mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
Make sure to test errors for inlining
This commit is contained in:
@@ -134,15 +134,15 @@ def inline(grammar, names):
|
||||
if not names:
|
||||
raise RefactoringError("There is no name under the cursor")
|
||||
if any(n.api_type == 'module' for n in names):
|
||||
raise RefactoringError("Cannot inline imports or modules.")
|
||||
raise RefactoringError("Cannot inline imports or modules")
|
||||
if any(n.tree_name is None for n in names):
|
||||
raise RefactoringError("Cannot inline builtins.")
|
||||
raise RefactoringError("Cannot inline builtins/extensions")
|
||||
|
||||
definitions = [n for n in names if n.tree_name.is_definition()]
|
||||
if len(definitions) == 0:
|
||||
raise RefactoringError("No definition found to inline.")
|
||||
raise RefactoringError("No definition found to inline")
|
||||
if len(definitions) > 1:
|
||||
raise RefactoringError("Cannot inline a name with multiple definitions.")
|
||||
raise RefactoringError("Cannot inline a name with multiple definitions")
|
||||
|
||||
tree_name = definitions[0].tree_name
|
||||
|
||||
@@ -156,6 +156,19 @@ def inline(grammar, names):
|
||||
|
||||
if len(expr_stmt.get_defined_names(include_setitem=True)) > 1:
|
||||
raise RefactoringError("Cannot inline a statement with multiple definitions")
|
||||
first_child = expr_stmt.children[1]
|
||||
if first_child.type == 'annassign' and len(first_child.children) == 4:
|
||||
first_child = first_child.children[2]
|
||||
if first_child != '=':
|
||||
if first_child.type == 'annassign':
|
||||
raise RefactoringError(
|
||||
'Cannot inline a statement that is defined by an annotation'
|
||||
)
|
||||
else:
|
||||
raise RefactoringError(
|
||||
'Cannot inline a statement with "%s"'
|
||||
% first_child.get_code(include_prefix=False)
|
||||
)
|
||||
|
||||
rhs = expr_stmt.get_rhs()
|
||||
replace_code = rhs.get_code(include_prefix=False)
|
||||
|
||||
@@ -1,10 +1,70 @@
|
||||
# -------------------------------------------------- multi-equal
|
||||
# -------------------------------------------------- no-name-error
|
||||
#? 0 error
|
||||
1
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
There is no name under the cursor
|
||||
# -------------------------------------------------- multi-equal-error
|
||||
def test():
|
||||
#? 4 error
|
||||
a = b = 3
|
||||
return test(100, a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline a statement with multiple definitions
|
||||
# -------------------------------------------------- no-definition-error
|
||||
#? 5 error
|
||||
test(a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
No definition found to inline
|
||||
# -------------------------------------------------- multi-names-error
|
||||
#? 0 error
|
||||
a, b[1] = 3
|
||||
test(a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline a statement with multiple definitions
|
||||
# -------------------------------------------------- addition-error
|
||||
#? 0 error
|
||||
a = 2
|
||||
a += 3
|
||||
test(a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline a name with multiple definitions
|
||||
# -------------------------------------------------- only-addition-error
|
||||
#? 0 error
|
||||
a += 3
|
||||
test(a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline a statement with "+="
|
||||
# -------------------------------------------------- with-annotation
|
||||
foobarb: int = 1
|
||||
#? 5
|
||||
test(foobarb)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
--- /home/dave/source/jedi/test/refactor/inline.py
|
||||
+++ /home/dave/source/jedi/test/refactor/inline.py
|
||||
@@ -1,4 +1,4 @@
|
||||
-foobarb: int = 1
|
||||
+
|
||||
#? 5
|
||||
-test(foobarb)
|
||||
+test(1)
|
||||
# -------------------------------------------------- only-annotation-error
|
||||
a: int
|
||||
#? 5 error
|
||||
test(a)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline a statement that is defined by an annotation
|
||||
# -------------------------------------------------- builtin
|
||||
import math
|
||||
#? 7 error
|
||||
math.cos
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline builtins/extensions
|
||||
# -------------------------------------------------- module
|
||||
from import_tree import some_mod
|
||||
#? 11 error
|
||||
test(some_mod)
|
||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Cannot inline imports or modules
|
||||
# -------------------------------------------------- simple
|
||||
def test():
|
||||
#? 4
|
||||
|
||||
Reference in New Issue
Block a user