forked from VimPlug/jedi
Properly identify side effects, fixes #1411
This commit is contained in:
@@ -523,6 +523,12 @@ class BaseDefinition(object):
|
|||||||
"""
|
"""
|
||||||
return self._name.infer().get_type_hint()
|
return self._name.infer().get_type_hint()
|
||||||
|
|
||||||
|
def is_side_effect(self):
|
||||||
|
tree_name = self._name.tree_name
|
||||||
|
if tree_name is None:
|
||||||
|
return False
|
||||||
|
return tree_name.parent.type == 'trailer'
|
||||||
|
|
||||||
|
|
||||||
class Completion(BaseDefinition):
|
class Completion(BaseDefinition):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Tests for `api.names`.
|
|||||||
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def _assert_definition_names(definitions, names):
|
def _assert_definition_names(definitions, names):
|
||||||
assert [d.name for d in definitions] == names
|
assert [d.name for d in definitions] == names
|
||||||
@@ -167,3 +169,20 @@ def test_no_error(get_names):
|
|||||||
assert b.name == 'b'
|
assert b.name == 'b'
|
||||||
assert a20.name == 'a'
|
assert a20.name == 'a'
|
||||||
assert a20.goto() == [a20]
|
assert a20.goto() == [a20]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'code, index, is_side_effect', [
|
||||||
|
('x', 0, False),
|
||||||
|
('x.x', 0, False),
|
||||||
|
('x.x', 1, True),
|
||||||
|
('def x(x): x.x', 1, False),
|
||||||
|
('def x(x): x.x', 3, True),
|
||||||
|
('import sys; sys.path', 0, False),
|
||||||
|
('import sys; sys.path', 1, False),
|
||||||
|
('import sys; sys.path', 2, True),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_is_side_effect(get_names, code, index, is_side_effect):
|
||||||
|
names = get_names(code, references=True, all_scopes=True)
|
||||||
|
assert names[index].is_side_effect() == is_side_effect
|
||||||
|
|||||||
Reference in New Issue
Block a user