Index: include-fixer/tool/clang-include-fixer.py =================================================================== --- include-fixer/tool/clang-include-fixer.py +++ include-fixer/tool/clang-include-fixer.py @@ -40,6 +40,10 @@ 1, vim.eval('g:clang_include_fixer_increment_num')) +jump_to_include = False +if vim.eval('exists("g:clang_include_fixer_jump_to_include")') == "1": + jump_to_include = vim.eval('g:clang_include_fixer_jump_to_include') != "0" + def GetUserSelection(message, headers, maximum_suggested_headers): eval_message = message + '\n' @@ -84,12 +88,21 @@ command = [binary, "-stdin", "-insert-header=" + json.dumps(header), vim.current.buffer.name] stdout, stderr = execute(command, text) + if stderr: + raise Exception(stderr) if stdout: lines = stdout.splitlines() sequence = difflib.SequenceMatcher(None, vim.current.buffer, lines) + line_num = None for op in reversed(sequence.get_opcodes()): - if op[0] is not 'equal': + if op[0] != 'equal': vim.current.buffer[op[1]:op[2]] = lines[op[3]:op[4]] + if op[0] == 'insert': + # line_num in vim is 1-based. + line_num = op[1] + 1 + + if jump_to_include and line_num: + vim.current.window.cursor = (line_num, 0) def main(): @@ -128,22 +141,22 @@ unique_headers.append(header) if not symbol: - print "The file is fine, no need to add a header.\n" + print "The file is fine, no need to add a header." return if not unique_headers: - print "Couldn't find a header for {0}.\n".format(symbol) - return - - # If there is only one suggested header, insert it directly. - if len(unique_headers) == 1 or maximum_suggested_headers == 1: - InsertHeaderToVimBuffer({"SymbolIdentifier": symbol, - "Range": include_fixer_context["Range"], - "HeaderInfos": header_infos}, text) - print "Added #include {0} for {1}.\n".format(unique_headers[0], symbol) + print "Couldn't find a header for {0}.".format(symbol) return try: + # If there is only one suggested header, insert it directly. + if len(unique_headers) == 1 or maximum_suggested_headers == 1: + InsertHeaderToVimBuffer({"SymbolIdentifier": symbol, + "Range": include_fixer_context["Range"], + "HeaderInfos": header_infos}, text) + print "Added #include {0} for {1}.".format(unique_headers[0], symbol) + return + selected = GetUserSelection("choose a header file for {0}.".format(symbol), unique_headers, maximum_suggested_headers) selected_header_infos = [ @@ -153,7 +166,7 @@ InsertHeaderToVimBuffer({"SymbolIdentifier": symbol, "Range": include_fixer_context["Range"], "HeaderInfos": selected_header_infos}, text) - print "Added #include {0} for {1}.\n".format(selected, symbol) + print "Added #include {0} for {1}.".format(selected, symbol) except Exception as error: print >> sys.stderr, error.message return