forked from VimPlug/jedi
Make goto_definitions a lot simpler.
This commit is contained in:
@@ -3,50 +3,29 @@ This module has helpers for doing type inference on strings. It is needed,
|
||||
because we still want to infer types where the syntax is invalid.
|
||||
"""
|
||||
from jedi import debug
|
||||
from jedi.api import helpers
|
||||
from jedi.parser import tree
|
||||
from jedi.parser import Parser, ParseError
|
||||
from jedi.evaluate import imports
|
||||
from jedi.evaluate.cache import memoize_default
|
||||
from jedi.api import helpers
|
||||
|
||||
|
||||
def type_inference(evaluator, parser, user_context, position, dotted_path, is_completion=False):
|
||||
def goto_checks(evaluator, parser, user_context, position, dotted_path, follow_types=False):
|
||||
module = evaluator.wrap(parser.module())
|
||||
stack = helpers.get_stack_at_position(evaluator.grammar, self._source, module, position)
|
||||
stack
|
||||
|
||||
def type_inference(evaluator, parser, user_context, position, dotted_path):
|
||||
"""
|
||||
Base for completions/goto. Basically it returns the resolved scopes
|
||||
under cursor.
|
||||
"""
|
||||
debug.dbg('start: %s in %s', dotted_path, parser.user_scope())
|
||||
|
||||
user_stmt = parser.user_stmt_with_whitespace()
|
||||
if not user_stmt and len(dotted_path.split('\n')) > 1:
|
||||
# If the user_stmt is not defined and the dotted_path is multi line,
|
||||
# something's strange. Most probably the backwards tokenizer
|
||||
# matched to much.
|
||||
# Just parse one statement, take it and evaluate it.
|
||||
eval_stmt = get_under_cursor_stmt(evaluator, parser, dotted_path, position)
|
||||
if eval_stmt is None:
|
||||
return []
|
||||
|
||||
if isinstance(user_stmt, tree.Import) and not is_completion:
|
||||
i, _ = helpers.get_on_import_stmt(evaluator, user_context,
|
||||
user_stmt, is_completion)
|
||||
if i is None:
|
||||
return []
|
||||
scopes = [i]
|
||||
else:
|
||||
# Just parse one statement, take it and evaluate it.
|
||||
eval_stmt = get_under_cursor_stmt(evaluator, parser, dotted_path, position)
|
||||
if eval_stmt is None:
|
||||
return []
|
||||
|
||||
if not is_completion:
|
||||
module = evaluator.wrap(parser.module())
|
||||
names, level, _, _ = helpers.check_error_statements(module, position)
|
||||
if names:
|
||||
names = [str(n) for n in names]
|
||||
i = imports.Importer(evaluator, names, module, level)
|
||||
return i.follow()
|
||||
|
||||
scopes = evaluator.eval_element(eval_stmt)
|
||||
|
||||
return scopes
|
||||
return evaluator.eval_element(eval_stmt)
|
||||
|
||||
|
||||
@memoize_default(evaluator_is_first_arg=True)
|
||||
|
||||
Reference in New Issue
Block a user