Fix some name inferance with stubs

This commit is contained in:
Dave Halter
2018-09-05 10:29:37 +02:00
parent 39162de2a8
commit fa16c9e59d
5 changed files with 21 additions and 7 deletions

View File

@@ -13,6 +13,7 @@ from jedi._compatibility import Python3Method, zip_longest, unicode
from jedi.parser_utils import clean_scope_docstring, get_doc_with_call_signature
from jedi.common import BaseContextSet, BaseContext
from jedi.evaluate.helpers import SimpleGetItemNotFound, execute_evaluated
from jedi.evaluate.utils import safe_property
class Context(BaseContext):
@@ -122,9 +123,15 @@ def iterate_contexts(contexts, contextualized_node=None, is_async=False):
)
class ContextWrapper(object):
class TreeContextWrapper(object):
def __init__(self, wrapped_context):
self._wrapped_context = wrapped_context
assert wrapped_context.tree_node
@safe_property
def name(self):
from jedi.evaluate.filters import ContextName
return ContextName(self, self._wrapped_context.name.tree_name)
def __getattr__(self, name):
return getattr(self._wrapped_context, name)

View File

@@ -13,7 +13,7 @@ from jedi.evaluate.arguments import AnonymousArguments
from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, \
ContextName, AbstractNameDefinition, ParamName
from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \
ContextSet, TreeContext, ContextWrapper
ContextSet, TreeContext, TreeContextWrapper
from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, \
LazyTreeContext
from jedi.evaluate.context.typing import TypeVar
@@ -296,7 +296,7 @@ class FunctionExecutionContext(TreeContext):
return self.get_return_values()
class OverloadedFunctionContext(ContextWrapper):
class OverloadedFunctionContext(TreeContextWrapper):
def __init__(self, function, overloaded_functions):
super(OverloadedFunctionContext, self).__init__(function)
self._overloaded_functions = overloaded_functions

View File

@@ -21,7 +21,7 @@ from jedi.evaluate import compiled
from jedi.evaluate.context.instance import \
AbstractInstanceContext, CompiledInstance, BoundMethod, InstanceArguments
from jedi.evaluate.base_context import ContextualizedNode, \
NO_CONTEXTS, ContextSet, ContextWrapper
NO_CONTEXTS, ContextSet, TreeContextWrapper
from jedi.evaluate.context import ClassContext, ModuleContext, \
FunctionExecutionContext
from jedi.evaluate.context import iterable
@@ -398,6 +398,7 @@ class ItemGetterCallable(object):
# TODO we need to add the contextualized context.
context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None)
else:
return NO_CONTEXTS
raise NotImplementedError
return context_set

View File

@@ -8,7 +8,7 @@ from jedi.evaluate.cache import evaluator_function_cache
from jedi.cache import memoize_method
from jedi.parser_utils import get_call_signature_for_any
from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \
ContextWrapper
TreeContextWrapper
from jedi.evaluate.filters import AbstractTreeName, ParserTreeFilter, \
TreeNameDefinition, NameWrapper, MergedFilter
from jedi.evaluate.context import ModuleContext, FunctionContext, \
@@ -405,7 +405,7 @@ class StubOnlyModuleContext(ModuleContext):
yield f
class StubContextWithCompiled(ContextWrapper):
class StubContextWithCompiled(TreeContextWrapper):
def __init__(self, stub_context, compiled_context):
super(StubContextWithCompiled, self).__init__(stub_context)
self._compiled_context = compiled_context

View File

@@ -1,7 +1,10 @@
import pytest
from jedi import settings
from jedi.evaluate.filters import ContextName
from jedi.evaluate.compiled import CompiledContextName
from jedi.plugins.typeshed import StubContextWithCompiled
from jedi.evaluate.context import FunctionContext
@pytest.fixture()
@@ -11,7 +14,10 @@ def auto_import_json(monkeypatch):
def test_base_auto_import_modules(auto_import_json, Script):
loads, = Script('import json; json.loads').goto_definitions()
assert isinstance(loads._name, CompiledContextName)
assert isinstance(loads._name, ContextName)
context, = loads._name.infer()
assert isinstance(context, StubContextWithCompiled)
assert isinstance(context._wrapped_context, FunctionContext)
def test_auto_import_modules_imports(auto_import_json, Script):