diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 841375f5..76525445 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -247,7 +247,7 @@ class Script(object): for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) - names = filter_definition_names(names) + names = filter_definition_names(names, self._parser.user_stmt()) for c in names: completions.append((c, s)) return completions diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 6b0d9b5c..9ffb2034 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -32,7 +32,7 @@ from jedi.evaluate import helpers from jedi.evaluate.cache import memoize_default -def filter_definition_names(names, position=None): +def filter_definition_names(names, origin, position=None): # Just calculate the scope from the first stmt = names[0].get_definition() scope = stmt.get_parent_scope() @@ -45,7 +45,7 @@ def filter_definition_names(names, position=None): names = list(names) for name in names: if name.value.startswith('__') and not name.value.endswith('__'): - if filter_private_variable(scope, name): + if filter_private_variable(scope, origin): names.remove(name) if not (isinstance(scope, er.FunctionExecution) @@ -106,7 +106,7 @@ class NameFinder(object): except KeyError: return [] - names = filter_definition_names(names, position) + names = filter_definition_names(names, self.name_str, position) name_scope = None # Only the names defined in the last position are valid definitions. diff --git a/test/completion/classes.py b/test/completion/classes.py index 2f4f7131..82cbf99c 100644 --- a/test/completion/classes.py +++ b/test/completion/classes.py @@ -388,6 +388,8 @@ class PrivateVar(): self.__var = 1 #? int() self.__var + #? ['__var'] + self.__var #? [] PrivateVar().__var #?