1
0
forked from VimPlug/jedi

Move some contents of gradual.stub_contexts to gradual.conversion

This commit is contained in:
Dave Halter
2019-05-10 01:24:58 +02:00
parent e57ff54caa
commit a6a71c59f4
8 changed files with 100 additions and 98 deletions

View File

@@ -38,7 +38,7 @@ from jedi.evaluate.syntax_tree import tree_name_to_contexts
from jedi.evaluate.context import ModuleContext from jedi.evaluate.context import ModuleContext
from jedi.evaluate.base_context import ContextSet from jedi.evaluate.base_context import ContextSet
from jedi.evaluate.context.iterable import unpack_tuple_to_dict from jedi.evaluate.context.iterable import unpack_tuple_to_dict
from jedi.evaluate.gradual.stub_context import try_stubs_to_actual_context_set, \ from jedi.evaluate.gradual.conversion import try_stubs_to_actual_context_set, \
try_stub_to_actual_names try_stub_to_actual_names
from jedi.evaluate.gradual.utils import load_proper_stub_module from jedi.evaluate.gradual.utils import load_proper_stub_module

View File

@@ -16,7 +16,7 @@ from jedi.evaluate.imports import ImportName
from jedi.evaluate.names import ParamName from jedi.evaluate.names import ParamName
from jedi.evaluate.context import FunctionExecutionContext, MethodContext from jedi.evaluate.context import FunctionExecutionContext, MethodContext
from jedi.evaluate.gradual.typeshed import StubModuleContext from jedi.evaluate.gradual.typeshed import StubModuleContext
from jedi.evaluate.gradual.stub_context import name_to_stub, stub_to_actual_context_set from jedi.evaluate.gradual.conversion import name_to_stub, stub_to_actual_context_set
from jedi.api.keywords import KeywordName from jedi.api.keywords import KeywordName

View File

@@ -84,7 +84,7 @@ from jedi.evaluate.context import ClassContext, FunctionContext, \
from jedi.evaluate.context.iterable import CompForContext from jedi.evaluate.context.iterable import CompForContext
from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \ from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \
eval_node, check_tuple_assignments eval_node, check_tuple_assignments
from jedi.evaluate.gradual.stub_context import try_stub_to_actual_names, \ from jedi.evaluate.gradual.conversion import try_stub_to_actual_names, \
stub_to_actual_context_set stub_to_actual_context_set

View File

@@ -0,0 +1,93 @@
from jedi.evaluate.base_context import ContextSet, \
NO_CONTEXTS
from jedi.evaluate.utils import to_list
from jedi.evaluate.gradual.stub_context import StubModuleContext
def stub_to_actual_context_set(stub_context, ignore_compiled=False):
stub_module = stub_context.get_root_context()
if not stub_module.is_stub():
return ContextSet([stub_context])
qualified_names = stub_context.get_qualified_names()
return _infer_from_stub(stub_module, qualified_names, ignore_compiled)
def _infer_from_stub(stub_module, qualified_names, ignore_compiled):
if qualified_names is None:
return NO_CONTEXTS
assert isinstance(stub_module, StubModuleContext), stub_module
non_stubs = stub_module.non_stub_context_set
if ignore_compiled:
non_stubs = non_stubs.filter(lambda c: not c.is_compiled())
for name in qualified_names:
non_stubs = non_stubs.py__getattribute__(name)
return non_stubs
def try_stubs_to_actual_context_set(stub_contexts, prefer_stub_to_compiled=False):
return ContextSet.from_sets(
stub_to_actual_context_set(stub_context, ignore_compiled=prefer_stub_to_compiled)
or ContextSet([stub_context])
for stub_context in stub_contexts
)
@to_list
def try_stub_to_actual_names(names, prefer_stub_to_compiled=False):
for name in names:
module = name.get_root_context()
if not module.is_stub():
yield name
continue
name_list = name.get_qualified_names()
if name_list is None:
contexts = NO_CONTEXTS
else:
contexts = _infer_from_stub(
module,
name_list[:-1],
ignore_compiled=prefer_stub_to_compiled,
)
if contexts:
if name_list:
for new_name in contexts.py__getattribute__(name_list[-1], is_goto=True):
yield new_name
else:
for c in contexts:
yield c.name
else:
yield name
def _load_stub_module(module):
if module.is_stub():
return module
from jedi.evaluate.gradual.typeshed import _try_to_load_stub
return _try_to_load_stub(
module.evaluator,
ContextSet([module]),
parent_module_context=None,
import_names=module.string_names
)
def name_to_stub(name):
return ContextSet.from_sets(to_stub(c) for c in name.infer())
def to_stub(context):
if context.is_stub():
return ContextSet([context])
qualified_names = context.get_qualified_names()
stub_module = _load_stub_module(context.get_root_context())
if stub_module is None or qualified_names is None:
return NO_CONTEXTS
stub_contexts = ContextSet([stub_module])
for name in qualified_names:
stub_contexts = stub_contexts.py__getattribute__(name)
return stub_contexts

View File

@@ -1,12 +1,10 @@
import os import os
from jedi.evaluate.base_context import ContextWrapper, ContextSet, \ from jedi.evaluate.base_context import ContextWrapper
NO_CONTEXTS
from jedi.evaluate.context.klass import ClassMixin, ClassContext from jedi.evaluate.context.klass import ClassMixin, ClassContext
from jedi.evaluate.context.module import ModuleContext from jedi.evaluate.context.module import ModuleContext
from jedi.evaluate.filters import ParserTreeFilter, \ from jedi.evaluate.filters import ParserTreeFilter, \
TreeNameDefinition TreeNameDefinition
from jedi.evaluate.utils import to_list
from jedi.evaluate.gradual.typing import TypingModuleFilterWrapper from jedi.evaluate.gradual.typing import TypingModuleFilterWrapper
@@ -128,92 +126,3 @@ class StubFilter(ParserTreeFilter):
class VersionInfo(ContextWrapper): class VersionInfo(ContextWrapper):
pass pass
def stub_to_actual_context_set(stub_context, ignore_compiled=False):
stub_module = stub_context.get_root_context()
if not stub_module.is_stub():
return ContextSet([stub_context])
qualified_names = stub_context.get_qualified_names()
return _infer_from_stub(stub_module, qualified_names, ignore_compiled)
def _infer_from_stub(stub_module, qualified_names, ignore_compiled):
if qualified_names is None:
return NO_CONTEXTS
assert isinstance(stub_module, StubModuleContext), stub_module
non_stubs = stub_module.non_stub_context_set
if ignore_compiled:
non_stubs = non_stubs.filter(lambda c: not c.is_compiled())
for name in qualified_names:
non_stubs = non_stubs.py__getattribute__(name)
return non_stubs
def try_stubs_to_actual_context_set(stub_contexts, prefer_stub_to_compiled=False):
return ContextSet.from_sets(
stub_to_actual_context_set(stub_context, ignore_compiled=prefer_stub_to_compiled)
or ContextSet([stub_context])
for stub_context in stub_contexts
)
@to_list
def try_stub_to_actual_names(names, prefer_stub_to_compiled=False):
for name in names:
module = name.get_root_context()
if not module.is_stub():
yield name
continue
name_list = name.get_qualified_names()
if name_list is None:
contexts = NO_CONTEXTS
else:
contexts = _infer_from_stub(
module,
name_list[:-1],
ignore_compiled=prefer_stub_to_compiled,
)
if contexts:
if name_list:
for new_name in contexts.py__getattribute__(name_list[-1], is_goto=True):
yield new_name
else:
for c in contexts:
yield c.name
else:
yield name
def _load_stub_module(module):
if module.is_stub():
return module
from jedi.evaluate.gradual.typeshed import _try_to_load_stub
return _try_to_load_stub(
module.evaluator,
ContextSet([module]),
parent_module_context=None,
import_names=module.string_names
)
def name_to_stub(name):
return ContextSet.from_sets(to_stub(c) for c in name.infer())
def to_stub(context):
if context.is_stub():
return ContextSet([context])
qualified_names = context.get_qualified_names()
stub_module = _load_stub_module(context.get_root_context())
if stub_module is None or qualified_names is None:
return NO_CONTEXTS
stub_contexts = ContextSet([stub_module])
for name in qualified_names:
stub_contexts = stub_contexts.py__getattribute__(name)
return stub_contexts

View File

@@ -93,7 +93,7 @@ class ContextName(ContextNameMixin, AbstractTreeName):
self._context = context self._context = context
def goto(self): def goto(self):
from jedi.evaluate.gradual.stub_context import try_stub_to_actual_names from jedi.evaluate.gradual.conversion import try_stub_to_actual_names
return try_stub_to_actual_names([self._context.name]) return try_stub_to_actual_names([self._context.name])

View File

@@ -4,7 +4,7 @@ import pytest
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate.helpers import execute_evaluated from jedi.evaluate.helpers import execute_evaluated
from jedi.evaluate.gradual.stub_context import stub_to_actual_context_set from jedi.evaluate.gradual.conversion import stub_to_actual_context_set
def test_simple(evaluator, environment): def test_simple(evaluator, environment):

View File

@@ -12,7 +12,7 @@ from jedi._compatibility import find_module_py33, find_module
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate import imports from jedi.evaluate import imports
from jedi.api.project import Project from jedi.api.project import Project
from jedi.evaluate.gradual.stub_context import stub_to_actual_context_set from jedi.evaluate.gradual.conversion import stub_to_actual_context_set
from ..helpers import cwd_at, get_example_dir, test_dir, root_dir from ..helpers import cwd_at, get_example_dir, test_dir, root_dir
THIS_DIR = os.path.dirname(__file__) THIS_DIR = os.path.dirname(__file__)