private variables are not available outside of class for completion, fixes #56

This commit is contained in:
David Halter
2012-11-23 00:25:02 +01:00
parent 936f7f9fd5
commit 3aeb9e0aeb
2 changed files with 10 additions and 8 deletions

View File

@@ -135,13 +135,18 @@ class Script(object):
completions += ((k, bs) for k in keywords.get_keywords(
all=True))
completions = [(c, s) for c, s in completions
if settings.case_insensitive_completion
and c.names[-1].lower().startswith(like.lower())
or c.names[-1].startswith(like)]
comps = []
for c, s in completions:
n = c.names[-1]
if settings.case_insensitive_completion \
and n.lower().startswith(like.lower()) \
or n.startswith(like):
if not evaluate.filter_private_variable(s,
self.parser.user_stmt, n):
comps.append((c, s))
needs_dot = not dot and path
completions = set(completions)
completions = set(comps)
c = [api_classes.Completion(
c, needs_dot, len(like), s) for c, s in completions]

View File

@@ -1550,12 +1550,9 @@ def follow_path(path, scope, call_scope, position=None):
def filter_private_variable(scope, call_scope, var_name):
if isinstance(var_name, (str, unicode)) \
and var_name.startswith('__') and isinstance(scope, Instance):
#print 'a', scope, var_name, call_scope
s = call_scope.get_parent_until((parsing.Class, Instance), include_current=True)
if s != scope and s != scope.base.base:
#print s, scope, call_scope.parent()
return True
return False