mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 14:34:31 +08:00
Avoid some duplication of code
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
from jedi.inference.base_value import ValueWrapper
|
from jedi.inference.base_value import ValueWrapper
|
||||||
from jedi.inference.value.module import ModuleValue
|
from jedi.inference.value.module import ModuleValue
|
||||||
from jedi.inference.filters import ParserTreeFilter
|
from jedi.inference.filters import ParserTreeFilter
|
||||||
from jedi.inference.names import StubName
|
from jedi.inference.names import StubName, StubModuleName
|
||||||
from jedi.inference.gradual.typing import TypingModuleFilterWrapper
|
from jedi.inference.gradual.typing import TypingModuleFilterWrapper
|
||||||
from jedi.inference.context import ModuleContext
|
from jedi.inference.context import ModuleContext
|
||||||
|
|
||||||
|
|
||||||
class StubModuleValue(ModuleValue):
|
class StubModuleValue(ModuleValue):
|
||||||
|
_module_name_class = StubModuleName
|
||||||
|
|
||||||
def __init__(self, non_stub_value_set, *args, **kwargs):
|
def __init__(self, non_stub_value_set, *args, **kwargs):
|
||||||
super(StubModuleValue, self).__init__(*args, **kwargs)
|
super(StubModuleValue, self).__init__(*args, **kwargs)
|
||||||
self.non_stub_value_set = non_stub_value_set
|
self.non_stub_value_set = non_stub_value_set
|
||||||
|
|||||||
@@ -226,13 +226,6 @@ class ValueNameMixin(object):
|
|||||||
return ValueSet([self._value])
|
return ValueSet([self._value])
|
||||||
|
|
||||||
def py__doc__(self, include_signatures=False):
|
def py__doc__(self, include_signatures=False):
|
||||||
from jedi.inference.gradual.conversion import convert_names
|
|
||||||
doc = ''
|
|
||||||
if self._value.is_stub():
|
|
||||||
names = convert_names([self], prefer_stub_to_compiled=False)
|
|
||||||
if self not in names:
|
|
||||||
doc = _merge_name_docs(names)
|
|
||||||
if not doc:
|
|
||||||
doc = self._value.py__doc__()
|
doc = self._value.py__doc__()
|
||||||
|
|
||||||
if include_signatures:
|
if include_signatures:
|
||||||
@@ -608,20 +601,12 @@ class NameWrapper(object):
|
|||||||
return '%s(%s)' % (self.__class__.__name__, self._wrapped_name)
|
return '%s(%s)' % (self.__class__.__name__, self._wrapped_name)
|
||||||
|
|
||||||
|
|
||||||
# From here on down we make looking up the sys.version_info fast.
|
class StubNameMixin(object):
|
||||||
class StubName(TreeNameDefinition):
|
|
||||||
def infer(self):
|
|
||||||
inferred = super(StubName, self).infer()
|
|
||||||
if self.string_name == 'version_info' and self.get_root_context().py__name__() == 'sys':
|
|
||||||
from jedi.inference.gradual.stub_value import VersionInfo
|
|
||||||
return [VersionInfo(c) for c in inferred]
|
|
||||||
return inferred
|
|
||||||
|
|
||||||
def py__doc__(self, include_signatures=False):
|
def py__doc__(self, include_signatures=False):
|
||||||
from jedi.inference.gradual.conversion import convert_names
|
from jedi.inference.gradual.conversion import convert_names
|
||||||
names = convert_names([self], prefer_stub_to_compiled=False)
|
names = convert_names([self], prefer_stub_to_compiled=False)
|
||||||
if self in names:
|
if self in names:
|
||||||
doc = super(StubName, self).py__doc__(include_signatures)
|
doc = super(StubNameMixin, self).py__doc__(include_signatures)
|
||||||
else:
|
else:
|
||||||
doc = _merge_name_docs(names)
|
doc = _merge_name_docs(names)
|
||||||
if include_signatures:
|
if include_signatures:
|
||||||
@@ -629,3 +614,29 @@ class StubName(TreeNameDefinition):
|
|||||||
if parent.type in ('funcdef', 'classdef') and parent.name is self.tree_name:
|
if parent.type in ('funcdef', 'classdef') and parent.name is self.tree_name:
|
||||||
doc = _merge_docs_and_signature(self.infer(), doc)
|
doc = _merge_docs_and_signature(self.infer(), doc)
|
||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
|
||||||
|
# From here on down we make looking up the sys.version_info fast.
|
||||||
|
class StubName(StubNameMixin, TreeNameDefinition):
|
||||||
|
def infer(self):
|
||||||
|
inferred = super(StubName, self).infer()
|
||||||
|
if self.string_name == 'version_info' and self.get_root_context().py__name__() == 'sys':
|
||||||
|
from jedi.inference.gradual.stub_value import VersionInfo
|
||||||
|
return [VersionInfo(c) for c in inferred]
|
||||||
|
return inferred
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleName(ValueNameMixin, AbstractNameDefinition):
|
||||||
|
start_pos = 1, 0
|
||||||
|
|
||||||
|
def __init__(self, value, name):
|
||||||
|
self._value = value
|
||||||
|
self._name = name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def string_name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
|
||||||
|
class StubModuleName(StubNameMixin, ModuleName):
|
||||||
|
pass
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os
|
|||||||
|
|
||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi.inference.cache import inference_state_method_cache
|
from jedi.inference.cache import inference_state_method_cache
|
||||||
from jedi.inference.names import ValueNameMixin, AbstractNameDefinition
|
from jedi.inference.names import AbstractNameDefinition, ModuleName
|
||||||
from jedi.inference.filters import GlobalNameFilter, ParserTreeFilter, DictFilter, MergedFilter
|
from jedi.inference.filters import GlobalNameFilter, ParserTreeFilter, DictFilter, MergedFilter
|
||||||
from jedi.inference import compiled
|
from jedi.inference import compiled
|
||||||
from jedi.inference.base_value import TreeValue
|
from jedi.inference.base_value import TreeValue
|
||||||
@@ -37,18 +37,6 @@ class _ModuleAttributeName(AbstractNameDefinition):
|
|||||||
return compiled.get_string_value_set(self.parent_context.inference_state)
|
return compiled.get_string_value_set(self.parent_context.inference_state)
|
||||||
|
|
||||||
|
|
||||||
class ModuleName(ValueNameMixin, AbstractNameDefinition):
|
|
||||||
start_pos = 1, 0
|
|
||||||
|
|
||||||
def __init__(self, value, name):
|
|
||||||
self._value = value
|
|
||||||
self._name = name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def string_name(self):
|
|
||||||
return self._name
|
|
||||||
|
|
||||||
|
|
||||||
def iter_module_names(inference_state, paths):
|
def iter_module_names(inference_state, paths):
|
||||||
# Python modules/packages
|
# Python modules/packages
|
||||||
for n in inference_state.compiled_subprocess.list_module_names(paths):
|
for n in inference_state.compiled_subprocess.list_module_names(paths):
|
||||||
@@ -95,6 +83,8 @@ class SubModuleDictMixin(object):
|
|||||||
|
|
||||||
|
|
||||||
class ModuleMixin(SubModuleDictMixin):
|
class ModuleMixin(SubModuleDictMixin):
|
||||||
|
_module_name_class = ModuleName
|
||||||
|
|
||||||
def get_filters(self, origin_scope=None):
|
def get_filters(self, origin_scope=None):
|
||||||
yield MergedFilter(
|
yield MergedFilter(
|
||||||
ParserTreeFilter(
|
ParserTreeFilter(
|
||||||
@@ -121,7 +111,7 @@ class ModuleMixin(SubModuleDictMixin):
|
|||||||
@property
|
@property
|
||||||
@inference_state_method_cache()
|
@inference_state_method_cache()
|
||||||
def name(self):
|
def name(self):
|
||||||
return ModuleName(self, self._string_name)
|
return self._module_name_class(self, self._string_name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _string_name(self):
|
def _string_name(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user