diff --git a/jedi/fast_parser.py b/jedi/fast_parser.py index d8992452..374a866e 100644 --- a/jedi/fast_parser.py +++ b/jedi/fast_parser.py @@ -19,6 +19,9 @@ class Module(parsing.Simple, parsing.Module): """ This module does a whole lot of caching, because it uses different parsers. """ self.cache = {} + for p in self.parsers: + p.user_scope = None + p.user_stmt = None def _get(self, name, operation, execute=False, *args, **kwargs): key = (name, args, frozenset(kwargs.items())) @@ -213,12 +216,12 @@ class FastParser(use_metaclass(CachedFastParser)): h = hash(code_part) p = None - if h in hashes: + if h in hashes and hashes[h].code == code_part: p = hashes[h] m = p.module m.line_offset += line_offset + 1 - m.start_pos[0] if self.user_position is not None and \ - m.start_pos >= self.user_position >= m.end_pos: + m.start_pos <= self.user_position <= m.end_pos: #print(h, line_offset, m.start_pos, lines) p = None else: @@ -231,6 +234,7 @@ class FastParser(use_metaclass(CachedFastParser)): top_module=self.module) p.hash = h + p.code = code_part p.module.parent = self.module self.parsers.insert(parser_order, p) diff --git a/jedi/parsing.py b/jedi/parsing.py index c2da8074..a2935803 100644 --- a/jedi/parsing.py +++ b/jedi/parsing.py @@ -483,7 +483,7 @@ class Flow(Scope): for s in self.inits: stmts.append(s.get_code(new_line=False)) stmt = ', '.join(stmts) - string = "%s %s:\n" % (self.command, vars, stmt) + string = "%s %s:\n" % (self.command, stmt) string += super(Flow, self).get_code(True, indention) if self.next: string += self.next.get_code() @@ -1235,7 +1235,7 @@ class PyFuzzyParser(object): d.parent = self.module self.start_pos = self.module.start_pos - self.end_pos = self.module.start_pos + self.module.end_pos = self.end_pos def __repr__(self): return "<%s: %s>" % (type(self).__name__, self.module)