mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 22:14:27 +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.value.module import ModuleValue
|
||||
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.context import ModuleContext
|
||||
|
||||
|
||||
class StubModuleValue(ModuleValue):
|
||||
_module_name_class = StubModuleName
|
||||
|
||||
def __init__(self, non_stub_value_set, *args, **kwargs):
|
||||
super(StubModuleValue, self).__init__(*args, **kwargs)
|
||||
self.non_stub_value_set = non_stub_value_set
|
||||
|
||||
@@ -226,13 +226,6 @@ class ValueNameMixin(object):
|
||||
return ValueSet([self._value])
|
||||
|
||||
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__()
|
||||
|
||||
if include_signatures:
|
||||
@@ -608,20 +601,12 @@ class NameWrapper(object):
|
||||
return '%s(%s)' % (self.__class__.__name__, self._wrapped_name)
|
||||
|
||||
|
||||
# From here on down we make looking up the sys.version_info fast.
|
||||
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
|
||||
|
||||
class StubNameMixin(object):
|
||||
def py__doc__(self, include_signatures=False):
|
||||
from jedi.inference.gradual.conversion import convert_names
|
||||
names = convert_names([self], prefer_stub_to_compiled=False)
|
||||
if self in names:
|
||||
doc = super(StubName, self).py__doc__(include_signatures)
|
||||
doc = super(StubNameMixin, self).py__doc__(include_signatures)
|
||||
else:
|
||||
doc = _merge_name_docs(names)
|
||||
if include_signatures:
|
||||
@@ -629,3 +614,29 @@ class StubName(TreeNameDefinition):
|
||||
if parent.type in ('funcdef', 'classdef') and parent.name is self.tree_name:
|
||||
doc = _merge_docs_and_signature(self.infer(), 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.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 import compiled
|
||||
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)
|
||||
|
||||
|
||||
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):
|
||||
# Python modules/packages
|
||||
for n in inference_state.compiled_subprocess.list_module_names(paths):
|
||||
@@ -95,6 +83,8 @@ class SubModuleDictMixin(object):
|
||||
|
||||
|
||||
class ModuleMixin(SubModuleDictMixin):
|
||||
_module_name_class = ModuleName
|
||||
|
||||
def get_filters(self, origin_scope=None):
|
||||
yield MergedFilter(
|
||||
ParserTreeFilter(
|
||||
@@ -121,7 +111,7 @@ class ModuleMixin(SubModuleDictMixin):
|
||||
@property
|
||||
@inference_state_method_cache()
|
||||
def name(self):
|
||||
return ModuleName(self, self._string_name)
|
||||
return self._module_name_class(self, self._string_name)
|
||||
|
||||
@property
|
||||
def _string_name(self):
|
||||
|
||||
Reference in New Issue
Block a user