diff --git a/jedi/api/refactoring.py b/jedi/api/refactoring.py index e8bb5c62..b1aefd63 100644 --- a/jedi/api/refactoring.py +++ b/jedi/api/refactoring.py @@ -184,17 +184,20 @@ def inline(grammar, names): name.tree_name.prefix + s path = definitions[0].get_root_context().py__file__() - file_to_node_changes.setdefault(path, {})[expr_stmt] = \ - _remove_indent_and_newline_of_prefix(expr_stmt.get_first_leaf().prefix) + changes = file_to_node_changes.setdefault(path, {}) + changes[expr_stmt] = _remove_indent_of_prefix(expr_stmt.get_first_leaf().prefix) + next_leaf = expr_stmt.get_next_leaf() + + # Most of the time we have to remove the newline at the end of the + # statement, but if there's a comment we might not need to. + if next_leaf.prefix.strip(' \t') == '' \ + and (next_leaf.type == 'newline' or next_leaf == ';'): + changes[next_leaf] = '' return Refactoring(grammar, file_to_node_changes) -def _remove_indent_and_newline_of_prefix(prefix): +def _remove_indent_of_prefix(prefix): r""" Removes the last indentation of a prefix, e.g. " \n \n " becomes " \n \n". """ - lines = split_lines(prefix, keepends=True)[:-1] - if lines and lines[-1].endswith('\n'): - # Remove the newline - lines[-1] = lines[-1][:-1] - return ''.join(lines) + return ''.join(split_lines(prefix, keepends=True)[:-1]) diff --git a/test/refactor/inline.py b/test/refactor/inline.py index a6c11264..eb4e31c4 100644 --- a/test/refactor/inline.py +++ b/test/refactor/inline.py @@ -41,9 +41,8 @@ test(foobarb) # ++++++++++++++++++++++++++++++++++++++++++++++++++ --- /home/dave/source/jedi/test/refactor/inline.py +++ /home/dave/source/jedi/test/refactor/inline.py -@@ -1,4 +1,4 @@ +@@ -1,4 +1,3 @@ -foobarb: int = 1 -+ #? 5 -test(foobarb) +test(1) @@ -112,3 +111,79 @@ if 1: - a = 1, 2 - return test(100, a) + return test(100, (1, 2)) +# -------------------------------------------------- multiplication-add-parens1 +a = 1+2 +#? 11 +test(100 * a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,4 +1,3 @@ +-a = 1+2 + #? 11 +-test(100 * a) ++test(100 * (1+2)) +# -------------------------------------------------- multiplication-add-parens2 +a = 1+2 +#? 11 +(x, 100 * a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,4 +1,3 @@ +-a = 1+2 + #? 11 +-(x, 100 * a) ++(x, 100 * (1+2)) +# -------------------------------------------------- multiplication-add-parens3 +x +a = 1+2 +#? 9 +(100 ** a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,5 +1,4 @@ + x +-a = 1+2 + #? 9 +-(100 ** a) ++(100 ** (1+2)) +# -------------------------------------------------- no-add-parens1 +x +a = 1+2 +#? 5 +test(a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,5 +1,4 @@ + x +-a = 1+2 + #? 5 +-test(a) ++test(1+2) +# -------------------------------------------------- no-add-parens2 +a = 1+2 +#? 9 +test(3, a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,4 +1,3 @@ +-a = 1+2 + #? 9 +-test(3, a) ++test(3, 1+2) +# -------------------------------------------------- no-add-parens3 +a = 1|2 +#? 5 +(3, a) +# ++++++++++++++++++++++++++++++++++++++++++++++++++ +--- /home/dave/source/jedi/test/refactor/inline.py ++++ /home/dave/source/jedi/test/refactor/inline.py +@@ -1,4 +1,3 @@ +-a = 1|2 + #? 5 +-(3, a) ++(3, 1|2)