diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 9602e04a..b04323b1 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -15,6 +15,7 @@ from jedi.evaluate import compiled from jedi.evaluate.imports import ImportName from jedi.evaluate.context import instance from jedi.evaluate.context import ClassContext, FunctionExecutionContext +from jedi.plugins.typeshed import StubOnlyModuleContext from jedi.api.keywords import KeywordName @@ -203,6 +204,10 @@ class BaseDefinition(object): def in_builtin_module(self): """Whether this is a builtin module.""" + print(self._module) + if isinstance(self._module, StubOnlyModuleContext): + return any(isinstance(context, compiled.CompiledObject) + for context in self._module.non_stub_context_set) return isinstance(self._module, compiled.CompiledObject) @property diff --git a/jedi/evaluate/context/typing.py b/jedi/evaluate/context/typing.py index 7471e9f7..2892cf9b 100644 --- a/jedi/evaluate/context/typing.py +++ b/jedi/evaluate/context/typing.py @@ -255,7 +255,6 @@ class TypeAlias(object): # There should only be one, because it's code that we control. assert len(classes) == 1, classes cls = next(iter(classes)) - assert isinstance(cls, ClassContext), cls return cls diff --git a/jedi/plugins/typeshed.py b/jedi/plugins/typeshed.py index 4ec3b63d..58f68493 100644 --- a/jedi/plugins/typeshed.py +++ b/jedi/plugins/typeshed.py @@ -357,10 +357,10 @@ class StubFunctionContext(_MixedStubContextMixin, FunctionContext): class StubOnlyModuleContext(ModuleContext): def __init__(self, non_stub_context_set, *args, **kwargs): super(StubOnlyModuleContext, self).__init__(*args, **kwargs) - self._non_stub_context_set = non_stub_context_set + self.non_stub_context_set = non_stub_context_set def _get_first_non_stub_filters(self): - for context in self._non_stub_context_set: + for context in self.non_stub_context_set: yield next(context.get_filters(search_global=False)) def get_filters(self, search_global, until_position=None, diff --git a/test/test_api/test_api.py b/test/test_api/test_api.py index 3cbac36a..e52d504d 100644 --- a/test/test_api/test_api.py +++ b/test/test_api/test_api.py @@ -5,17 +5,24 @@ Test all things related to the ``jedi.api`` module. import os from textwrap import dedent -from jedi import preload_module -from jedi._compatibility import is_py3 from pytest import raises from parso import cache +from jedi import preload_module +from jedi._compatibility import is_py3 +from jedi.plugins import typeshed + def test_preload_modules(): def check_loaded(*modules): # +1 for None module (currently used) grammar_cache = next(iter(cache.parser_cache.values())) - assert len(grammar_cache) == len(modules) + 1 + # Filter the typeshed parser cache. + typeshed_cache_count = sum( + 1 for path in grammar_cache + if path is not None and path.startswith(typeshed._TYPESHED_PATH) + ) + assert len(grammar_cache) - typeshed_cache_count == len(modules) + 1 for i in modules: assert [i in k for k in grammar_cache.keys() if k is not None] @@ -292,4 +299,4 @@ def test_goto_follow_builtin_imports(Script): d, = s.goto_assignments(follow_imports=True) assert d.in_builtin_module() is True d, = s.goto_assignments(follow_imports=True, follow_builtin_imports=True) - assert d.in_builtin_module() is False + assert d.in_builtin_module() is True diff --git a/test/test_api/test_call_signatures.py b/test/test_api/test_call_signatures.py index ccd8fb23..1f62b606 100644 --- a/test/test_api/test_call_signatures.py +++ b/test/test_api/test_call_signatures.py @@ -6,6 +6,7 @@ import pytest from ..helpers import TestCase from jedi import cache +from jedi.parser_utils import get_call_signature from jedi._compatibility import is_py3 @@ -229,7 +230,15 @@ def test_complex(Script): re.compile( return it * 2 """ - assert_signature(Script, s, 'compile', 0, line=4, column=27) + sig1, sig2 = sorted(Script(s, line=4, column=27).call_signatures(), key=lambda s: s.line) + assert sig1.name == sig2.name == 'compile' + assert sig1.index == sig2.index == 0 + func1, = sig1._name.infer() + func2, = sig2._name.infer() + assert get_call_signature(func1.tree_node) \ + == 'compile(pattern: AnyStr, flags: _FlagsType = ...) -> Pattern[AnyStr]' + assert get_call_signature(func2.tree_node) \ + == 'compile(pattern: Pattern[AnyStr], flags: _FlagsType = ...) ->\nPattern[AnyStr]' # jedi-vim #70 s = """def foo(""" diff --git a/test/test_api/test_usages.py b/test/test_api/test_usages.py index fdac5ccf..65c0a588 100644 --- a/test/test_api/test_usages.py +++ b/test/test_api/test_usages.py @@ -8,7 +8,7 @@ def test_exclude_builtin_modules(Script): return [(d.line, d.column) for d in Script(source, column=8).usages(include_builtins=include)] source = '''import sys\nprint(sys.path)''' places = get(include=True) - assert places == [(None, None), (1, 7), (2, 6)] + assert places == [(1, 7), (2, 6)] places = get(include=False) assert places == [(1, 7), (2, 6)]