Typing does not need to be installed for Jedi to work, vendored typeshed is enough

This commit is contained in:
Dave Halter
2018-12-16 17:26:56 +01:00
parent af51c9cc33
commit 33b73d7fbc
2 changed files with 21 additions and 8 deletions

View File

@@ -161,7 +161,12 @@ class Evaluator(object):
@evaluator_function_cache()
def typing_module(self):
typing_module, = self.import_module((u'typing',))
return typing_module.stub_context
try:
return typing_module.stub_context
except AttributeError:
# Python 2 and 3.4: In some cases there is no non-stub module,
# because the module was not installed with `pip install typing`.
return typing_module
def reset_recursion_limitations(self):
self.recursion_detector = recursion.RecursionDetector()

View File

@@ -17,8 +17,9 @@ from jedi.evaluate.context.klass import ClassMixin
from jedi.evaluate.context.module import ModuleMixin
from jedi.evaluate.context.typing import TypingModuleFilterWrapper, \
TypingModuleName
from jedi.evaluate.compiled.context import CompiledObject, CompiledName
from jedi.evaluate.compiled.context import CompiledName
from jedi.evaluate.utils import to_list, safe_property
from jedi.evaluate.imports import JediImportError
_jedi_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_TYPESHED_PATH = os.path.join(_jedi_path, 'third_party', 'typeshed')
@@ -130,12 +131,19 @@ class TypeshedPlugin(BasePlugin):
parent_module_context, = evaluator.import_module(('os',))
return parent_module_context.py__getattribute__('path')
context_set = callback(
evaluator,
import_names,
parent_module_context,
sys_path
)
try:
context_set = callback(
evaluator,
import_names,
parent_module_context,
sys_path
)
except JediImportError:
if import_names == ('typing',):
# TODO this is also quite ugly, please refactor.
context_set = NO_CONTEXTS
else:
raise
import_name = import_names[-1]
map_ = None