| Index: tools/clang/scripts/apply-fixits.py
|
| diff --git a/tools/clang/scripts/apply-fixits.py b/tools/clang/scripts/apply-fixits.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..0f4231f9818403d3941f341f85f10bb472c0c8b2
|
| --- /dev/null
|
| +++ b/tools/clang/scripts/apply-fixits.py
|
| @@ -0,0 +1,64 @@
|
| +#!/usr/bin/env/python
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +import collections
|
| +import fileinput
|
| +import os
|
| +import re
|
| +import sys
|
| +
|
| +
|
| +# fix-it:"../../base/threading/sequenced_worker_pool.h":{341:3-341:11}:""
|
| +_FIXIT_RE = re.compile(r'^fix-it:"(?P<file>.+?)":'
|
| + r'{(?P<start_line>\d+?):(?P<start_col>\d+?)-'
|
| + r'(?P<end_line>\d+?):(?P<end_col>\d+?)}:'
|
| + r'"(?P<text>.*?)"$')
|
| +
|
| +
|
| +FixIt = collections.namedtuple('FixIt',
|
| + ('start_line', 'start_col', 'end_line', 'end_col', 'text'))
|
| +
|
| +
|
| +def main():
|
| + os.chdir('out/Debug')
|
| + fixits = collections.defaultdict(list)
|
| + for line in fileinput.input():
|
| + if not line.startswith('fix-it:'):
|
| + continue
|
| + m = _FIXIT_RE.match(line)
|
| + if not m:
|
| + continue
|
| + # The negative line numbers are a cheap hack so we can sort things in line
|
| + # order but reverse column order.
|
| + fixits[m.group('file')].append(FixIt(
|
| + int(m.group('start_line')),
|
| + -int(m.group('start_col')),
|
| + int(m.group('end_line')),
|
| + -int(m.group('end_col')),
|
| + m.group('text')))
|
| + for k, v in fixits.iteritems():
|
| + v.sort()
|
| + with open(k, 'rb+') as f:
|
| + lines = f.readlines()
|
| + last_fixit = None
|
| + for fixit in v:
|
| + if fixit.start_line != fixit.end_line:
|
| + print 'error: multiline fixits not supported! file: %s, fixit: %s' % (
|
| + k, fixit)
|
| + sys.exit(1)
|
| + if fixit == last_fixit:
|
| + continue
|
| + last_fixit = fixit
|
| + # Zero-based indexing is the one true way!
|
| + line = lines[fixit.start_line - 1]
|
| + lines[fixit.start_line - 1] = line[:-fixit.start_col - 1] + fixit.text + line[-fixit.end_col - 1:]
|
| + f.seek(0)
|
| + f.truncate()
|
| + f.writelines(lines)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main())
|
|
|