From 4161bfc7f28454db2a307cdcae463e41bec3103d Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 22 Dec 2019 01:24:50 +0100 Subject: [PATCH] Avoid some duplication of code --- jedi/inference/gradual/stub_value.py | 4 ++- jedi/inference/names.py | 47 +++++++++++++++++----------- jedi/inference/value/module.py | 18 +++-------- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/jedi/inference/gradual/stub_value.py b/jedi/inference/gradual/stub_value.py index 34637305..91ec0e1f 100644 --- a/jedi/inference/gradual/stub_value.py +++ b/jedi/inference/gradual/stub_value.py @@ -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 diff --git a/jedi/inference/names.py b/jedi/inference/names.py index 3a4919e6..3a830b1e 100644 --- a/jedi/inference/names.py +++ b/jedi/inference/names.py @@ -226,14 +226,7 @@ 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__() + doc = self._value.py__doc__() if include_signatures: doc = _merge_docs_and_signature([self._value], doc) @@ -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 diff --git a/jedi/inference/value/module.py b/jedi/inference/value/module.py index a7830273..20332fee 100644 --- a/jedi/inference/value/module.py +++ b/jedi/inference/value/module.py @@ -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):