mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 22:14:27 +08:00
Add is_compiled and a few other things to be more compatible with the new way of handling stubs
This commit is contained in:
@@ -255,7 +255,7 @@ class Script(object):
|
|||||||
context = self._evaluator.create_context(self._get_module(), leaf)
|
context = self._evaluator.create_context(self._get_module(), leaf)
|
||||||
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
|
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
|
||||||
# We don't want stubs here we want the actual contexts, if possible.
|
# We don't want stubs here we want the actual contexts, if possible.
|
||||||
definitions = try_stubs_to_actual_context_set(definitions)
|
definitions = try_stubs_to_actual_context_set(definitions, prefer_stub_to_compiled=True)
|
||||||
|
|
||||||
names = [s.name for s in definitions]
|
names = [s.name for s in definitions]
|
||||||
defs = [classes.Definition(self._evaluator, name) for name in names]
|
defs = [classes.Definition(self._evaluator, name) for name in names]
|
||||||
@@ -308,7 +308,7 @@ class Script(object):
|
|||||||
return isinstance(name, imports.SubModuleName)
|
return isinstance(name, imports.SubModuleName)
|
||||||
|
|
||||||
names = filter_follow_imports(names, check)
|
names = filter_follow_imports(names, check)
|
||||||
names = try_stubs_to_actual_names(names)
|
names = try_stubs_to_actual_names(names, prefer_stub_to_compiled=True)
|
||||||
|
|
||||||
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
||||||
return helpers.sorted_definitions(defs)
|
return helpers.sorted_definitions(defs)
|
||||||
|
|||||||
@@ -111,10 +111,6 @@ class Context(HelperContextMixin, BaseContext):
|
|||||||
To be defined by subclasses.
|
To be defined by subclasses.
|
||||||
"""
|
"""
|
||||||
tree_node = None
|
tree_node = None
|
||||||
stub_context = None
|
|
||||||
|
|
||||||
def is_stub(self):
|
|
||||||
return False
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def api_type(self):
|
def api_type(self):
|
||||||
@@ -158,6 +154,12 @@ class Context(HelperContextMixin, BaseContext):
|
|||||||
def is_module(self):
|
def is_module(self):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def is_stub(self):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def is_compiled(self):
|
||||||
|
return False
|
||||||
|
|
||||||
def py__bool__(self):
|
def py__bool__(self):
|
||||||
"""
|
"""
|
||||||
Since Wrapper is a super class for classes, functions and modules,
|
Since Wrapper is a super class for classes, functions and modules,
|
||||||
|
|||||||
@@ -99,6 +99,9 @@ class CompiledObject(Context):
|
|||||||
def is_class(self):
|
def is_class(self):
|
||||||
return self.access_handle.is_class()
|
return self.access_handle.is_class()
|
||||||
|
|
||||||
|
def is_compiled(self):
|
||||||
|
return True
|
||||||
|
|
||||||
def py__doc__(self, include_call_signature=False):
|
def py__doc__(self, include_call_signature=False):
|
||||||
return self.access_handle.py__doc__()
|
return self.access_handle.py__doc__()
|
||||||
|
|
||||||
|
|||||||
@@ -277,6 +277,8 @@ def _add_stub_if_possible(parent_context, actual_context, stub_contexts):
|
|||||||
|
|
||||||
|
|
||||||
def with_stub_context_if_possible(actual_context):
|
def with_stub_context_if_possible(actual_context):
|
||||||
|
return ContextSet([actual_context])
|
||||||
|
# XXX
|
||||||
if actual_context.tree_node.type == 'lambdef':
|
if actual_context.tree_node.type == 'lambdef':
|
||||||
return ContextSet([actual_context])
|
return ContextSet([actual_context])
|
||||||
assert actual_context.tree_node.type in ('classdef', 'funcdef')
|
assert actual_context.tree_node.type in ('classdef', 'funcdef')
|
||||||
@@ -338,7 +340,7 @@ def stub_to_actual_context_set(stub_context):
|
|||||||
return non_stubs
|
return non_stubs
|
||||||
|
|
||||||
|
|
||||||
def try_stubs_to_actual_context_set(stub_contexts):
|
def try_stubs_to_actual_context_set(stub_contexts, prefer_stub_to_compiled=False):
|
||||||
return ContextSet.from_sets(
|
return ContextSet.from_sets(
|
||||||
stub_to_actual_context_set(stub_context) or ContextSet(stub_context)
|
stub_to_actual_context_set(stub_context) or ContextSet(stub_context)
|
||||||
for stub_context in stub_contexts
|
for stub_context in stub_contexts
|
||||||
@@ -346,7 +348,7 @@ def try_stubs_to_actual_context_set(stub_contexts):
|
|||||||
|
|
||||||
|
|
||||||
@to_list
|
@to_list
|
||||||
def try_stubs_to_actual_names(names):
|
def try_stubs_to_actual_names(names, prefer_stub_to_compiled=False):
|
||||||
for name in names:
|
for name in names:
|
||||||
parent_context = name.parent_context
|
parent_context = name.parent_context
|
||||||
if name.tree_name is None:
|
if name.tree_name is None:
|
||||||
@@ -356,12 +358,24 @@ def try_stubs_to_actual_names(names):
|
|||||||
yield name
|
yield name
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for n in goto_non_stub(parent_context, name.tree_name):
|
contexts = stub_to_actual_context_set(parent_context)
|
||||||
yield n
|
if prefer_stub_to_compiled:
|
||||||
|
# We don't really care about
|
||||||
|
contexts = ContextSet([c for c in contexts if not c.is_compiled()])
|
||||||
|
|
||||||
|
new_names = contexts.py__getattribute__(name.tree_name, is_goto=True)
|
||||||
|
|
||||||
|
if new_names:
|
||||||
|
for n in new_names:
|
||||||
|
yield n
|
||||||
|
else:
|
||||||
|
yield name
|
||||||
|
|
||||||
|
|
||||||
def stubify(parent_context, context):
|
def stubify(parent_context, context):
|
||||||
if parent_context.is_stub():
|
if parent_context.is_stub():
|
||||||
|
return ContextSet([context])
|
||||||
|
# XXX
|
||||||
return ContextSet(
|
return ContextSet(
|
||||||
c.stub_context
|
c.stub_context
|
||||||
for c in stub_to_actual_context_set(context)
|
for c in stub_to_actual_context_set(context)
|
||||||
|
|||||||
Reference in New Issue
Block a user