clang-format: Smarter replacement in the vim integration.

With this fix, only changed regions will be replaced in vim's buffer.
Thereby, marks should mostly be left intact. Furthermore, this is a
better fix for the performance problem in conjunction with
'foldmethod=syntax' (see r186660).

llvm-svn: 186789
This commit is contained in:
Daniel Jasper 2013-07-21 10:45:33 +00:00
parent 7aa9ebb546
commit 68c03c82df
1 changed files with 6 additions and 7 deletions

View File

@ -17,6 +17,7 @@
# It operates on the current, potentially unsaved buffer and does not create
# or save any files. To revert a formatting, just undo.
import difflib
import json
import subprocess
import sys
@ -67,10 +68,8 @@ else:
lines = stdout.split('\n')
output = json.loads(lines[0])
lines = lines[1:]
if '\n'.join(lines) != text:
common_length = min(len(buf), len(lines))
buf[:common_length] = lines[:common_length]
for line in lines[len(buf):]:
buf.append(line)
del buf[len(lines):]
vim.command('goto %d' % (output['Cursor'] + 1))
sequence = difflib.SequenceMatcher(None, vim.current.buffer, lines)
for op in sequence.get_opcodes():
if op[0] is not 'equal':
vim.current.buffer[op[1]:op[2]] = lines[op[3]:op[4]]
vim.command('goto %d' % (output['Cursor'] + 1))