forked from OSchip/llvm-project
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:
parent
7aa9ebb546
commit
68c03c82df
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue