summaryrefslogtreecommitdiffstats
path: root/clang/tools/clang-format/clang-format.py
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2017-06-19 07:30:04 +0000
committerDaniel Jasper <djasper@google.com>2017-06-19 07:30:04 +0000
commit271dd0603e4ddb63e1c7cc140459cb42fe13a2ac (patch)
treebb7f5b6edd0c5e94a599e1c05502a879dc1eed7b /clang/tools/clang-format/clang-format.py
parentf955efc01be806f8a8813c2b50b7a693db66c0de (diff)
downloadbcm5719-llvm-271dd0603e4ddb63e1c7cc140459cb42fe13a2ac.tar.gz
bcm5719-llvm-271dd0603e4ddb63e1c7cc140459cb42fe13a2ac.zip
clang-format: Add capability to format the diff on save in vim.
With this patch, one can configure a BufWrite hook that will make the clang-format integration compute a diff of the current buffer with the file that's on disk and format all changed lines. This should create a zero-overhead auto-format solution that doesn't require the file to already be clang-format clean to avoid spurious diffs. Review: https://reviews.llvm.org/D32429 llvm-svn: 305665
Diffstat (limited to 'clang/tools/clang-format/clang-format.py')
-rw-r--r--clang/tools/clang-format/clang-format.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/clang/tools/clang-format/clang-format.py b/clang/tools/clang-format/clang-format.py
index ae8a6ebf74e..2412566346f 100644
--- a/clang/tools/clang-format/clang-format.py
+++ b/clang/tools/clang-format/clang-format.py
@@ -63,8 +63,19 @@ def main():
# Determine range to format.
if vim.eval('exists("l:lines")') == '1':
lines = vim.eval('l:lines')
+ elif vim.eval('exists("l:formatdiff")') == '1':
+ with open(vim.current.buffer.name, 'r') as f:
+ ondisk = f.read().splitlines();
+ sequence = difflib.SequenceMatcher(None, ondisk, vim.current.buffer)
+ lines = []
+ for op in reversed(sequence.get_opcodes()):
+ if op[0] not in ['equal', 'delete']:
+ lines += ['-lines', '%s:%s' % (op[3] + 1, op[4])]
+ if lines == []:
+ return
else:
- lines = '%s:%s' % (vim.current.range.start + 1, vim.current.range.end + 1)
+ lines = ['-lines', '%s:%s' % (vim.current.range.start + 1,
+ vim.current.range.end + 1)]
# Determine the cursor position.
cursor = int(vim.eval('line2byte(line("."))+col(".")')) - 2
@@ -82,7 +93,7 @@ def main():
# Call formatter.
command = [binary, '-style', style, '-cursor', str(cursor)]
if lines != 'all':
- command.extend(['-lines', lines])
+ command += lines
if fallback_style:
command.extend(['-fallback-style', fallback_style])
if vim.current.buffer.name:
OpenPOWER on IntegriCloud