From b8c63f366c90e78b53b08c85e7ce4c230e516a8d Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 28 Jan 2015 15:11:21 +0100 Subject: [PATCH] FastModule seems to be compatible now with the normal Module, because it inherits from it and makes some minor modifications in some cases. --- jedi/parser/fast.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/jedi/parser/fast.py b/jedi/parser/fast.py index 242a006f..2c63e4e1 100644 --- a/jedi/parser/fast.py +++ b/jedi/parser/fast.py @@ -19,20 +19,19 @@ from jedi.parser.tokenize import (source_tokens, FLOWS, NEWLINE, class FastModule(pr.SubModule): type = 'file_input' - def __init__(self): + def __init__(self, module_path): super(FastModule, self).__init__([]) self.modules = [] self.reset_caches() self.names_dict = {} + self.path = module_path def reset_caches(self): self.modules = [] - - def __getattr__(self, name): - if name.startswith('__'): - raise AttributeError('Not available!') - else: - return getattr(self.modules[0], name) + try: + del self._used_names # Remove the used names cache. + except AttributeError: + pass # It was never used. @property @cache.underscore_memoization @@ -48,6 +47,14 @@ class FastModule(pr.SubModule): """ return MergedNamesDict([m.used_names for m in self.modules]) + @property + def global_names(self): + return [name for m in self.modules for name in m.global_names] + + @property + def error_statement_stacks(self): + return [e for m in self.modules for e in m.error_statement_stacks] + def __repr__(self): return "" % (type(self).__name__, self.name, self.start_pos[0], self.end_pos[0]) @@ -283,7 +290,7 @@ class FastParser(use_metaclass(CachedFastParser)): self.update(source) def _reset_caches(self): - self.module = FastModule() + self.module = FastModule(self.module_path) self.current_node = ParserNode(self.module) self.current_node.set_parser(self, '')