mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 22:14:27 +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.parser_utils import clean_scope_docstring, get_doc_with_call_signature
|
||||||
from jedi.common import BaseContextSet, BaseContext
|
from jedi.common import BaseContextSet, BaseContext
|
||||||
from jedi.evaluate.helpers import SimpleGetItemNotFound, execute_evaluated
|
from jedi.evaluate.helpers import SimpleGetItemNotFound, execute_evaluated
|
||||||
|
from jedi.evaluate.utils import safe_property
|
||||||
|
|
||||||
|
|
||||||
class Context(BaseContext):
|
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):
|
def __init__(self, wrapped_context):
|
||||||
self._wrapped_context = 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):
|
def __getattr__(self, name):
|
||||||
return getattr(self._wrapped_context, name)
|
return getattr(self._wrapped_context, name)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from jedi.evaluate.arguments import AnonymousArguments
|
|||||||
from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, \
|
from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, \
|
||||||
ContextName, AbstractNameDefinition, ParamName
|
ContextName, AbstractNameDefinition, ParamName
|
||||||
from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \
|
from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \
|
||||||
ContextSet, TreeContext, ContextWrapper
|
ContextSet, TreeContext, TreeContextWrapper
|
||||||
from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, \
|
from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, \
|
||||||
LazyTreeContext
|
LazyTreeContext
|
||||||
from jedi.evaluate.context.typing import TypeVar
|
from jedi.evaluate.context.typing import TypeVar
|
||||||
@@ -296,7 +296,7 @@ class FunctionExecutionContext(TreeContext):
|
|||||||
return self.get_return_values()
|
return self.get_return_values()
|
||||||
|
|
||||||
|
|
||||||
class OverloadedFunctionContext(ContextWrapper):
|
class OverloadedFunctionContext(TreeContextWrapper):
|
||||||
def __init__(self, function, overloaded_functions):
|
def __init__(self, function, overloaded_functions):
|
||||||
super(OverloadedFunctionContext, self).__init__(function)
|
super(OverloadedFunctionContext, self).__init__(function)
|
||||||
self._overloaded_functions = overloaded_functions
|
self._overloaded_functions = overloaded_functions
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from jedi.evaluate import compiled
|
|||||||
from jedi.evaluate.context.instance import \
|
from jedi.evaluate.context.instance import \
|
||||||
AbstractInstanceContext, CompiledInstance, BoundMethod, InstanceArguments
|
AbstractInstanceContext, CompiledInstance, BoundMethod, InstanceArguments
|
||||||
from jedi.evaluate.base_context import ContextualizedNode, \
|
from jedi.evaluate.base_context import ContextualizedNode, \
|
||||||
NO_CONTEXTS, ContextSet, ContextWrapper
|
NO_CONTEXTS, ContextSet, TreeContextWrapper
|
||||||
from jedi.evaluate.context import ClassContext, ModuleContext, \
|
from jedi.evaluate.context import ClassContext, ModuleContext, \
|
||||||
FunctionExecutionContext
|
FunctionExecutionContext
|
||||||
from jedi.evaluate.context import iterable
|
from jedi.evaluate.context import iterable
|
||||||
@@ -398,6 +398,7 @@ class ItemGetterCallable(object):
|
|||||||
# TODO we need to add the contextualized context.
|
# TODO we need to add the contextualized context.
|
||||||
context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None)
|
context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None)
|
||||||
else:
|
else:
|
||||||
|
return NO_CONTEXTS
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
return context_set
|
return context_set
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from jedi.evaluate.cache import evaluator_function_cache
|
|||||||
from jedi.cache import memoize_method
|
from jedi.cache import memoize_method
|
||||||
from jedi.parser_utils import get_call_signature_for_any
|
from jedi.parser_utils import get_call_signature_for_any
|
||||||
from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \
|
from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \
|
||||||
ContextWrapper
|
TreeContextWrapper
|
||||||
from jedi.evaluate.filters import AbstractTreeName, ParserTreeFilter, \
|
from jedi.evaluate.filters import AbstractTreeName, ParserTreeFilter, \
|
||||||
TreeNameDefinition, NameWrapper, MergedFilter
|
TreeNameDefinition, NameWrapper, MergedFilter
|
||||||
from jedi.evaluate.context import ModuleContext, FunctionContext, \
|
from jedi.evaluate.context import ModuleContext, FunctionContext, \
|
||||||
@@ -405,7 +405,7 @@ class StubOnlyModuleContext(ModuleContext):
|
|||||||
yield f
|
yield f
|
||||||
|
|
||||||
|
|
||||||
class StubContextWithCompiled(ContextWrapper):
|
class StubContextWithCompiled(TreeContextWrapper):
|
||||||
def __init__(self, stub_context, compiled_context):
|
def __init__(self, stub_context, compiled_context):
|
||||||
super(StubContextWithCompiled, self).__init__(stub_context)
|
super(StubContextWithCompiled, self).__init__(stub_context)
|
||||||
self._compiled_context = compiled_context
|
self._compiled_context = compiled_context
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from jedi import settings
|
from jedi import settings
|
||||||
|
from jedi.evaluate.filters import ContextName
|
||||||
from jedi.evaluate.compiled import CompiledContextName
|
from jedi.evaluate.compiled import CompiledContextName
|
||||||
|
from jedi.plugins.typeshed import StubContextWithCompiled
|
||||||
|
from jedi.evaluate.context import FunctionContext
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
@@ -11,7 +14,10 @@ def auto_import_json(monkeypatch):
|
|||||||
|
|
||||||
def test_base_auto_import_modules(auto_import_json, Script):
|
def test_base_auto_import_modules(auto_import_json, Script):
|
||||||
loads, = Script('import json; json.loads').goto_definitions()
|
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):
|
def test_auto_import_modules_imports(auto_import_json, Script):
|
||||||
|
|||||||
Reference in New Issue
Block a user