don't follow imports automatically, there will be an attribute/method later on, that does this. -> #45

This commit is contained in:
David Halter
2012-12-06 16:39:27 +01:00
parent 92dea00f0d
commit 60ed17ec53
2 changed files with 16 additions and 12 deletions

View File

@@ -27,6 +27,7 @@ from __future__ import with_statement
__all__ = ['Script', 'NotFoundError', 'set_debug_function']
import re
import weakref
import parsing
import dynamic
@@ -91,15 +92,18 @@ class Script(object):
:rtype: list
"""
def follow_imports_if_possible(name):
return [name] #TODO remove
# TODO remove this, or move to another place (not used)
par = name.parent()
if isinstance(par, parsing.Import) and not \
isinstance(self.parser.user_stmt, parsing.Import):
new = imports.ImportPath(par).follow(is_goto=True)
# Only remove the old entry if a new one has been found.
#print par, new, par.parent()
if new:
print(new, name)
return new
try:
return new
except AttributeError: # .name undefined
pass
return [name]
path = self.module.get_path_until_cursor()
@@ -159,10 +163,9 @@ class Script(object):
or n.startswith(like):
if not evaluate.filter_private_variable(s,
self.parser.user_stmt, n):
for f in follow_imports_if_possible(c):
new = api_classes.Completion(f, needs_dot,
len(like), s)
comps.append(new)
new = api_classes.Completion(c, needs_dot,
len(like), s)
comps.append(new)
return sorted(comps, key=lambda x: (x.word.startswith('__'),
@@ -195,7 +198,7 @@ class Script(object):
except IndexError:
raise NotFoundError()
stmt.start_pos = self.pos
stmt.parent = lambda: self.parser.user_scope
stmt.parent = weakref.ref(self.parser.user_scope)
return stmt
def get_definition(self):

View File

@@ -228,9 +228,11 @@ class TestRegression(Base):
def test_follow_imports_if_possible(self):
""" github issue #45 """
s = self.complete("import datetime.timedelta; datetime.timedelta")
#print s, [r.name.parent() for r in s], [r.type for r in s]
#assert 'Import' not in [r.type for r in s]
s = self.complete("from datetime import timedelta; timedelta")
# type can also point to import, but there will be additional
# attributes
types = [r.type for r in s]
#assert 'Import' not in types and 'Class' in types
class TestFeature(Base):
@@ -285,6 +287,5 @@ class TestSpeed(Base):
script.get_in_function_call()
#print(api.imports.imports_processed)
if __name__ == '__main__':
unittest.main()