1
0
forked from VimPlug/jedi

Make sure goto_definitions is no longer used in the main code

This commit is contained in:
Dave Halter
2019-12-20 18:47:04 +01:00
parent dbb61357c3
commit 4bbaec68e8
6 changed files with 19 additions and 21 deletions

View File

@@ -244,7 +244,7 @@ class Script(object):
context = self._get_module_context().create_context(leaf) context = self._get_module_context().create_context(leaf)
values = helpers.infer_goto_definition(self._inference_state, context, leaf) values = helpers.infer(self._inference_state, context, leaf)
values = convert_values( values = convert_values(
values, values,
only_stubs=only_stubs, only_stubs=only_stubs,
@@ -419,7 +419,7 @@ class Script(object):
unpack_tuple_to_dict(context, types, testlist) unpack_tuple_to_dict(context, types, testlist)
else: else:
if node.type == 'name': if node.type == 'name':
defs = self._inference_state.goto_definitions(context, node) defs = self._inference_state.infer(context, node)
else: else:
defs = infer_call_of_leaf(context, node) defs = infer_call_of_leaf(context, node)
try_iter_content(defs) try_iter_content(defs)

View File

@@ -104,7 +104,7 @@ class BaseDefinition(object):
Here is an example of the value of this attribute. Let's consider Here is an example of the value of this attribute. Let's consider
the following source. As what is in ``variable`` is unambiguous the following source. As what is in ``variable`` is unambiguous
to Jedi, :meth:`jedi.Script.goto_definitions` should return a list of to Jedi, :meth:`jedi.Script.infer` should return a list of
definition for ``sys``, ``f``, ``C`` and ``x``. definition for ``sys``, ``f``, ``C`` and ``x``.
>>> from jedi._compatibility import no_unicode_pprint >>> from jedi._compatibility import no_unicode_pprint
@@ -127,7 +127,7 @@ class BaseDefinition(object):
... variable''' ... variable'''
>>> script = Script(source) >>> script = Script(source)
>>> defs = script.goto_definitions() >>> defs = script.infer()
Before showing what is in ``defs``, let's sort it by :attr:`line` Before showing what is in ``defs``, let's sort it by :attr:`line`
so that it is easy to relate the result to the source code. so that it is easy to relate the result to the source code.
@@ -177,7 +177,7 @@ class BaseDefinition(object):
>>> from jedi import Script >>> from jedi import Script
>>> source = 'import json' >>> source = 'import json'
>>> script = Script(source, path='example.py') >>> script = Script(source, path='example.py')
>>> d = script.goto_definitions()[0] >>> d = script.infer()[0]
>>> print(d.module_name) # doctest: +ELLIPSIS >>> print(d.module_name) # doctest: +ELLIPSIS
json json
""" """
@@ -217,8 +217,8 @@ class BaseDefinition(object):
... def f(a, b=1): ... def f(a, b=1):
... "Document for function f." ... "Document for function f."
... ''' ... '''
>>> script = Script(source, 1, len('def f'), 'example.py') >>> script = Script(source, path='example.py')
>>> doc = script.goto_definitions()[0].docstring() >>> doc = script.infer(1, len('def f'))[0].docstring()
>>> print(doc) >>> print(doc)
f(a, b=1) f(a, b=1)
<BLANKLINE> <BLANKLINE>
@@ -228,7 +228,7 @@ class BaseDefinition(object):
docstring. For function, it is call signature. If you need docstring. For function, it is call signature. If you need
actual docstring, use ``raw=True`` instead. actual docstring, use ``raw=True`` instead.
>>> print(script.goto_definitions()[0].docstring(raw=True)) >>> print(script.infer(1, len('def f'))[0].docstring(raw=True))
Document for function f. Document for function f.
:param fast: Don't follow imports that are only one level deep like :param fast: Don't follow imports that are only one level deep like
@@ -259,8 +259,8 @@ class BaseDefinition(object):
>>> source = ''' >>> source = '''
... import os ... import os
... os.path.join''' ... os.path.join'''
>>> script = Script(source, 3, len('os.path.join'), 'example.py') >>> script = Script(source, path='example.py')
>>> print(script.goto_definitions()[0].full_name) >>> print(script.infer(3, len('os.path.join'))[0].full_name)
os.path.join os.path.join
Notice that it returns ``'os.path.join'`` instead of (for example) Notice that it returns ``'os.path.join'`` instead of (for example)
@@ -526,7 +526,7 @@ class Completion(BaseDefinition):
class Definition(BaseDefinition): class Definition(BaseDefinition):
""" """
*Definition* objects are returned from :meth:`api.Script.goto_assignments` *Definition* objects are returned from :meth:`api.Script.goto_assignments`
or :meth:`api.Script.goto_definitions`. or :meth:`api.Script.infer`.
""" """
def __init__(self, inference_state, definition): def __init__(self, inference_state, definition):
super(Definition, self).__init__(inference_state, definition) super(Definition, self).__init__(inference_state, definition)
@@ -549,8 +549,8 @@ class Definition(BaseDefinition):
... pass ... pass
... ...
... variable = f if random.choice([0,1]) else C''' ... variable = f if random.choice([0,1]) else C'''
>>> script = Script(source, column=3) # line is maximum by default >>> script = Script(source) # line is maximum by default
>>> defs = script.goto_definitions() >>> defs = script.infer(column=3)
>>> defs = sorted(defs, key=lambda d: d.line) >>> defs = sorted(defs, key=lambda d: d.line)
>>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE >>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE
[<Definition full_name='__main__.f', description='def f'>, [<Definition full_name='__main__.f', description='def f'>,

View File

@@ -150,11 +150,9 @@ def get_stack_at_position(grammar, code_lines, leaf, pos):
) )
def infer_goto_definition(inference_state, context, leaf): def infer(inference_state, context, leaf):
if leaf.type == 'name': if leaf.type == 'name':
# In case of a name we can just use goto_definition which does all the return inference_state.infer(context, leaf)
# magic itself.
return inference_state.goto_definitions(context, leaf)
parent = leaf.parent parent = leaf.parent
definitions = NO_VALUES definitions = NO_VALUES
@@ -407,7 +405,7 @@ def cache_call_signatures(inference_state, context, bracket_leaf, code_lines, us
yield None # Don't cache! yield None # Don't cache!
else: else:
yield (module_path, before_bracket, bracket_leaf.start_pos) yield (module_path, before_bracket, bracket_leaf.start_pos)
yield infer_goto_definition( yield infer(
inference_state, inference_state,
context, context,
bracket_leaf.get_previous_leaf(), bracket_leaf.get_previous_leaf(),

View File

@@ -143,7 +143,7 @@ class InferenceState(object):
"""Convenience function""" """Convenience function"""
return self.project._get_sys_path(self, environment=self.environment, **kwargs) return self.project._get_sys_path(self, environment=self.environment, **kwargs)
def goto_definitions(self, context, name): def infer(self, context, name):
def_ = name.get_definition(import_name_always=True) def_ = name.get_definition(import_name_always=True)
if def_ is not None: if def_ is not None:
type_ = def_.type type_ = def_.type

View File

@@ -186,7 +186,7 @@ def _check_name_for_execution(inference_state, context, compare_node, name, trai
args = InstanceArguments(value.instance, args) args = InstanceArguments(value.instance, args)
return args return args
for value in inference_state.goto_definitions(context, name): for value in inference_state.infer(context, name):
value_node = value.tree_node value_node = value.tree_node
if compare_node == value_node: if compare_node == value_node:
yield create_args(value) yield create_args(value)

View File

@@ -108,7 +108,7 @@ def infer_node(context, element):
str_element_names = [e.value for e in element_names] str_element_names = [e.value for e in element_names]
if any(i.value in str_element_names for i in if_names): if any(i.value in str_element_names for i in if_names):
for if_name in if_names: for if_name in if_names:
definitions = context.inference_state.goto_definitions(context, if_name) definitions = context.inference_state.infer(context, if_name)
# Every name that has multiple different definitions # Every name that has multiple different definitions
# causes the complexity to rise. The complexity should # causes the complexity to rise. The complexity should
# never fall below 1. # never fall below 1.