mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
Fix some name inferance with stubs
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user