forked from VimPlug/jedi
Try to avoid CachedMetaClass for modules
This commit is contained in:
@@ -286,9 +286,10 @@ class Script(object):
|
|||||||
def _analysis(self):
|
def _analysis(self):
|
||||||
self._evaluator.is_analysis = True
|
self._evaluator.is_analysis = True
|
||||||
self._evaluator.analysis_modules = [self._module_node]
|
self._evaluator.analysis_modules = [self._module_node]
|
||||||
|
module = self._get_module()
|
||||||
try:
|
try:
|
||||||
for node in get_executable_nodes(self._module_node):
|
for node in get_executable_nodes(self._module_node):
|
||||||
context = self._get_module().create_context(node)
|
context = module.create_context(node)
|
||||||
if node.type in ('funcdef', 'classdef'):
|
if node.type in ('funcdef', 'classdef'):
|
||||||
# Resolve the decorators.
|
# Resolve the decorators.
|
||||||
tree_name_to_contexts(self._evaluator, context, node.children[1])
|
tree_name_to_contexts(self._evaluator, context, node.children[1])
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ import os
|
|||||||
|
|
||||||
from parso import python_bytes_to_unicode
|
from parso import python_bytes_to_unicode
|
||||||
|
|
||||||
from jedi._compatibility import use_metaclass
|
from jedi.evaluate.cache import evaluator_method_cache
|
||||||
from jedi.evaluate.cache import CachedMetaClass, evaluator_method_cache
|
|
||||||
from jedi.evaluate.filters import GlobalNameFilter, ContextNameMixin, \
|
from jedi.evaluate.filters import GlobalNameFilter, ContextNameMixin, \
|
||||||
AbstractNameDefinition, ParserTreeFilter, DictFilter
|
AbstractNameDefinition, ParserTreeFilter, DictFilter
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
@@ -41,7 +40,7 @@ class ModuleName(ContextNameMixin, AbstractNameDefinition):
|
|||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
|
|
||||||
class ModuleContext(use_metaclass(CachedMetaClass, TreeContext)):
|
class ModuleContext(TreeContext):
|
||||||
api_type = u'module'
|
api_type = u'module'
|
||||||
parent_context = None
|
parent_context = None
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ class ModuleCache(object):
|
|||||||
def get(self, name):
|
def get(self, name):
|
||||||
return self._name_cache[name]
|
return self._name_cache[name]
|
||||||
|
|
||||||
|
def get_from_path(self, path):
|
||||||
|
return self._path_cache[path]
|
||||||
|
|
||||||
|
|
||||||
# This memoization is needed, because otherwise we will infinitely loop on
|
# This memoization is needed, because otherwise we will infinitely loop on
|
||||||
# certain imports.
|
# certain imports.
|
||||||
@@ -468,6 +471,15 @@ class Importer(object):
|
|||||||
|
|
||||||
def _load_module(evaluator, path=None, code=None, sys_path=None,
|
def _load_module(evaluator, path=None, code=None, sys_path=None,
|
||||||
parent_module=None, module_name=None, safe_module_name=False):
|
parent_module=None, module_name=None, safe_module_name=False):
|
||||||
|
try:
|
||||||
|
return evaluator.module_cache.get(module_name)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
return evaluator.module_cache.get_from_path(path)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
if isinstance(path, ImplicitNSInfo):
|
if isinstance(path, ImplicitNSInfo):
|
||||||
from jedi.evaluate.context.namespace import ImplicitNamespaceContext
|
from jedi.evaluate.context.namespace import ImplicitNamespaceContext
|
||||||
module = ImplicitNamespaceContext(
|
module = ImplicitNamespaceContext(
|
||||||
|
|||||||
Reference in New Issue
Block a user