Skip to content

Commit 30e1ab8

Browse files
committed
revert to fix davidhalter/jedi#859
1 parent 3da8042 commit 30e1ab8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+4269
-4754
lines changed

pythonFiles/preview/jedi/_compatibility.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,6 @@ def literal_eval(string):
236236
except ImportError:
237237
from itertools import izip_longest as zip_longest # Python 2
238238

239-
try:
240-
FileNotFoundError = FileNotFoundError
241-
except NameError:
242-
FileNotFoundError = IOError
243-
244239

245240
def no_unicode_pprint(dct):
246241
"""

pythonFiles/preview/jedi/api/__init__.py

Lines changed: 48 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
import warnings
1414
import sys
1515

16+
from jedi._compatibility import unicode
1617
from jedi.parser import load_grammar
1718
from jedi.parser import tree
18-
from jedi.parser.diff import FastParser
19+
from jedi.parser.fast import FastParser
1920
from jedi.parser.utils import save_parser
2021
from jedi import debug
2122
from jedi import settings
@@ -33,7 +34,6 @@
3334
from jedi.evaluate.helpers import get_module_names
3435
from jedi.evaluate.sys_path import get_venv_path
3536
from jedi.evaluate.iterable import unpack_tuple_to_dict
36-
from jedi.evaluate.filters import TreeNameDefinition
3737

3838
# Jedi uses lots and lots of recursion. By setting this a little bit higher, we
3939
# can remove some "maximum recursion depth" errors.
@@ -135,20 +135,15 @@ def __init__(self, source=None, line=None, column=None, path=None,
135135
self._evaluator = Evaluator(self._grammar, sys_path=sys_path)
136136
debug.speed('init')
137137

138-
@cache.memoize_method
139-
def _get_module_node(self):
138+
def _get_module(self):
140139
cache.invalidate_star_import_cache(self._path)
141140
parser = FastParser(self._grammar, self._source, self.path)
142141
save_parser(self.path, parser, pickling=False)
143142

143+
module = self._evaluator.wrap(parser.module)
144+
imports.add_module(self._evaluator, unicode(module.name), module)
144145
return parser.module
145146

146-
@cache.memoize_method
147-
def _get_module(self):
148-
module = er.ModuleContext(self._evaluator, self._get_module_node())
149-
imports.add_module(self._evaluator, module.name.string_name, module)
150-
return module
151-
152147
@property
153148
def source_path(self):
154149
"""
@@ -191,15 +186,12 @@ def goto_definitions(self):
191186
192187
:rtype: list of :class:`classes.Definition`
193188
"""
194-
module_node = self._get_module_node()
195-
leaf = module_node.name_for_position(self._pos)
189+
leaf = self._get_module().name_for_position(self._pos)
196190
if leaf is None:
197-
leaf = module_node.get_leaf_for_position(self._pos)
191+
leaf = self._get_module().get_leaf_for_position(self._pos)
198192
if leaf is None:
199193
return []
200-
201-
context = self._evaluator.create_context(self._get_module(), leaf)
202-
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
194+
definitions = helpers.evaluate_goto_definition(self._evaluator, leaf)
203195

204196
names = [s.name for s in definitions]
205197
defs = [classes.Definition(self._evaluator, name) for name in names]
@@ -219,9 +211,11 @@ def goto_assignments(self, follow_imports=False):
219211
"""
220212
def filter_follow_imports(names):
221213
for name in names:
222-
if isinstance(name, (imports.ImportName, TreeNameDefinition)):
223-
for context in name.infer():
224-
yield context.name
214+
definition = name.get_definition()
215+
if definition.type in ('import_name', 'import_from'):
216+
imp = imports.ImportWrapper(self._evaluator, name)
217+
for name in filter_follow_imports(imp.follow(is_goto=True)):
218+
yield name
225219
else:
226220
yield name
227221

@@ -236,11 +230,10 @@ def _goto(self):
236230
"""
237231
Used for goto_assignments and usages.
238232
"""
239-
name = self._get_module_node().name_for_position(self._pos)
233+
name = self._get_module().name_for_position(self._pos)
240234
if name is None:
241235
return []
242-
context = self._evaluator.create_context(self._get_module(), name)
243-
return list(self._evaluator.goto(context, name))
236+
return list(self._evaluator.goto(name))
244237

245238
def usages(self, additional_module_paths=()):
246239
"""
@@ -256,33 +249,37 @@ def usages(self, additional_module_paths=()):
256249
temp, settings.dynamic_flow_information = \
257250
settings.dynamic_flow_information, False
258251
try:
259-
module_node = self._get_module_node()
260-
user_stmt = module_node.get_statement_for_position(self._pos)
261-
definition_names = self._goto()
262-
if not definition_names and isinstance(user_stmt, tree.Import):
252+
user_stmt = self._get_module().get_statement_for_position(self._pos)
253+
definitions = self._goto()
254+
if not definitions and isinstance(user_stmt, tree.Import):
263255
# For not defined imports (goto doesn't find something, we take
264256
# the name as a definition. This is enough, because every name
265257
# points to it.
266258
name = user_stmt.name_for_position(self._pos)
267259
if name is None:
268260
# Must be syntax
269261
return []
270-
definition_names = [TreeNameDefinition(self._get_module(), name)]
262+
definitions = [name]
271263

272-
if not definition_names:
264+
if not definitions:
273265
# Without a definition for a name we cannot find references.
274266
return []
275267

276-
definition_names = usages.resolve_potential_imports(self._evaluator,
277-
definition_names)
268+
if not isinstance(user_stmt, tree.Import):
269+
# import case is looked at with add_import_name option
270+
definitions = usages.usages_add_import_modules(self._evaluator,
271+
definitions)
272+
273+
module = set([d.get_parent_until() for d in definitions])
274+
module.add(self._get_module())
275+
names = usages.usages(self._evaluator, definitions, module)
278276

279-
modules = set([d.get_root_context() for d in definition_names])
280-
modules.add(self._get_module())
281-
definitions = usages.usages(self._evaluator, definition_names, modules)
277+
for d in set(definitions):
278+
names.append(classes.Definition(self._evaluator, d))
282279
finally:
283280
settings.dynamic_flow_information = temp
284281

285-
return helpers.sorted_definitions(set(definitions))
282+
return helpers.sorted_definitions(set(names))
286283

287284
def call_signatures(self):
288285
"""
@@ -301,18 +298,13 @@ def call_signatures(self):
301298
:rtype: list of :class:`classes.CallSignature`
302299
"""
303300
call_signature_details = \
304-
helpers.get_call_signature_details(self._get_module_node(), self._pos)
301+
helpers.get_call_signature_details(self._get_module(), self._pos)
305302
if call_signature_details is None:
306303
return []
307304

308-
context = self._evaluator.create_context(
309-
self._get_module(),
310-
call_signature_details.bracket_leaf
311-
)
312305
with common.scale_speed_settings(settings.scale_call_signatures):
313306
definitions = helpers.cache_call_signatures(
314307
self._evaluator,
315-
context,
316308
call_signature_details.bracket_leaf,
317309
self._code_lines,
318310
self._pos
@@ -327,29 +319,27 @@ def call_signatures(self):
327319

328320
def _analysis(self):
329321
self._evaluator.is_analysis = True
330-
module_node = self._get_module_node()
331-
self._evaluator.analysis_modules = [module_node]
322+
self._evaluator.analysis_modules = [self._get_module()]
332323
try:
333-
for node in module_node.nodes_to_execute():
334-
context = self._get_module().create_context(node)
324+
for node in self._get_module().nodes_to_execute():
335325
if node.type in ('funcdef', 'classdef'):
336-
# TODO This is stupid, should be private
337-
from jedi.evaluate.finder import _name_to_types
338-
# Resolve the decorators.
339-
_name_to_types(self._evaluator, context, node.children[1])
326+
if node.type == 'classdef':
327+
continue
328+
raise NotImplementedError
329+
er.Function(self._evaluator, node).get_decorated_func()
340330
elif isinstance(node, tree.Import):
341331
import_names = set(node.get_defined_names())
342332
if node.is_nested():
343333
import_names |= set(path[-1] for path in node.paths())
344334
for n in import_names:
345-
imports.infer_import(context, n)
335+
imports.ImportWrapper(self._evaluator, n).follow()
346336
elif node.type == 'expr_stmt':
347-
types = context.eval_node(node)
337+
types = self._evaluator.eval_element(node)
348338
for testlist in node.children[:-1:2]:
349339
# Iterate tuples.
350340
unpack_tuple_to_dict(self._evaluator, types, testlist)
351341
else:
352-
try_iter_content(self._evaluator.goto_definitions(context, node))
342+
try_iter_content(self._evaluator.goto_definitions(node))
353343
self._evaluator.reset_recursion_limitations()
354344

355345
ana = [a for a in self._evaluator.analysis if self.path == a.path]
@@ -396,13 +386,11 @@ def __init__(self, source, namespaces, **kwds):
396386
super(Interpreter, self).__init__(source, **kwds)
397387
self.namespaces = namespaces
398388

389+
parser_module = super(Interpreter, self)._get_module()
390+
self._module = interpreter.MixedModule(self._evaluator, parser_module, self.namespaces)
391+
399392
def _get_module(self):
400-
parser_module = super(Interpreter, self)._get_module_node()
401-
return interpreter.MixedModuleContext(
402-
self._evaluator,
403-
parser_module,
404-
self.namespaces
405-
)
393+
return self._module
406394

407395

408396
def defined_names(source, path=None, encoding='utf-8'):
@@ -442,21 +430,13 @@ def names(source=None, path=None, encoding='utf-8', all_scopes=False,
442430
``definitions=True``. E.g. ``a = b`` returns ``b``.
443431
"""
444432
def def_ref_filter(_def):
445-
is_def = _def._name.tree_name.is_definition()
433+
is_def = _def.is_definition()
446434
return definitions and is_def or references and not is_def
447435

448436
# Set line/column to a random position, because they don't matter.
449437
script = Script(source, line=1, column=0, path=path, encoding=encoding)
450-
module_context = script._get_module()
451-
defs = [
452-
classes.Definition(
453-
script._evaluator,
454-
TreeNameDefinition(
455-
module_context.create_context(name.parent),
456-
name
457-
)
458-
) for name in get_module_names(script._get_module_node(), all_scopes)
459-
]
438+
defs = [classes.Definition(script._evaluator, name_part)
439+
for name_part in get_module_names(script._get_module(), all_scopes)]
460440
return sorted(filter(def_ref_filter, defs), key=lambda x: (x.line, x.column))
461441

462442

0 commit comments

Comments
 (0)