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:
@@ -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)):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user