Avoid some duplication of code

This commit is contained in:
Dave Halter
2019-12-22 01:24:50 +01:00
parent 290d1c151a
commit 4161bfc7f2
3 changed files with 36 additions and 33 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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):