1
0
forked from VimPlug/jedi

Fix an issue where __ prefixed variables where not hidden when accessed from a class

Everything worked well when looking at it from an instance perspective.
This commit is contained in:
Dave Halter
2018-08-03 11:05:49 +02:00
parent 1a4be5c91c
commit 95a1a69771
2 changed files with 22 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ py__doc__(include_call_signature: Returns the docstring for a context.
""" """
from jedi._compatibility import use_metaclass from jedi._compatibility import use_metaclass
from jedi.parser_utils import get_parent_scope
from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate.lazy_context import LazyKnownContext from jedi.evaluate.lazy_context import LazyKnownContext
@@ -83,6 +84,22 @@ class ClassFilter(ParserTreeFilter):
return [self.name_class(self.context, name, self._node_context) return [self.name_class(self.context, name, self._node_context)
for name in names] for name in names]
def _equals_origin_scope(self):
node = self._origin_scope
while node is not None:
if node == self._parser_scope or node == self.context:
return True
node = get_parent_scope(node)
return False
def _access_possible(self, name):
return not name.value.startswith('__') or name.value.endswith('__') \
or self._equals_origin_scope()
def _filter(self, names):
names = super(ClassFilter, self)._filter(names)
return [name for name in names if self._access_possible(name)]
class ClassContext(use_metaclass(CachedMetaClass, TreeContext)): class ClassContext(use_metaclass(CachedMetaClass, TreeContext)):
""" """

View File

@@ -417,6 +417,9 @@ class PrivateVar():
def __private_func(self): def __private_func(self):
return 1 return 1
#? int()
__private_func()
def wrap_private(self): def wrap_private(self):
return self.__private_func() return self.__private_func()
#? [] #? []
@@ -425,6 +428,8 @@ PrivateVar().__var
PrivateVar().__var PrivateVar().__var
#? [] #? []
PrivateVar().__private_func PrivateVar().__private_func
#? []
PrivateVar.__private_func
#? int() #? int()
PrivateVar().wrap_private() PrivateVar().wrap_private()