1
0
forked from VimPlug/jedi

Finally get rid of NameFinder

This commit is contained in:
Dave Halter
2019-08-24 03:20:21 +02:00
parent c4b0b45a1d
commit c1d8454f0c
4 changed files with 32 additions and 59 deletions

View File

@@ -6,7 +6,7 @@ from parso.python.tree import Name
from jedi.inference.filters import ParserTreeFilter, MergedFilter, \
GlobalNameFilter
from jedi.inference.base_value import NO_VALUES
from jedi.inference.base_value import NO_VALUES, ValueSet
from jedi.parser_utils import get_parent_scope
from jedi import debug
from jedi import parser_utils
@@ -24,17 +24,13 @@ class AbstractContext(object):
raise NotImplementedError
def goto(self, name_or_str, position):
return self._goto(name_or_str, position)[0]
def _goto(self, name_or_str, position):
from jedi.inference import finder
f = finder.NameFinder(self, self, name_or_str, position)
filters = _get_global_filters_for_name(
self, name_or_str if isinstance(name_or_str, Name) else None, position,
)
names = f.filter_name(filters)
names = finder.filter_name(filters, name_or_str)
debug.dbg('Context.goto %s in (%s): %s', name_or_str, self, names)
return names, f
return names
def py__getattribute__(self, name_or_str, name_context=None, position=None,
analysis_errors=True):
@@ -43,7 +39,7 @@ class AbstractContext(object):
"""
if name_context is None:
name_context = self
names, f = self._goto(name_or_str, position)
names = self.goto(name_or_str, position)
string_name = name_or_str.value if isinstance(name_or_str, Name) else name_or_str
@@ -75,12 +71,15 @@ class AbstractContext(object):
else:
values = found_predefined_types
else:
values = f.find(names, attribute_lookup=False)
values = ValueSet.from_sets(name.infer() for name in names)
if not names and not values and analysis_errors:
if isinstance(name_or_str, Name):
from jedi.inference import analysis
message = ("NameError: name '%s' is not defined." % string_name)
analysis.add(name_context, 'name-error', name_or_str, message)
debug.dbg('context.names_to_types: %s -> %s', names, values)
if values:
return values
return self._check_for_additional_knowledge(name_or_str, name_context, position)