diff --git a/jedi/parser/__init__.py b/jedi/parser/__init__.py index 14a1de5e..589c18af 100644 --- a/jedi/parser/__init__.py +++ b/jedi/parser/__init__.py @@ -567,10 +567,12 @@ class Parser(object): set_stmt, tok = self._parse_statement(added_breaks=['in'], names_are_set_vars=True) if tok != 'in': - debug.warning('syntax err, for flow incomplete @%s', - self.start_pos[0]) + debug.warning('syntax err, for flow incomplete @%s', self.start_pos[0]) - statement, tok = self._parse_statement() + try: + statement, tok = self._parse_statement() + except StopIteration: + statement, tok = None, None s = [] if statement is None else [statement] f = pr.ForFlow(self.module, s, first_pos, set_stmt) self._scope = self._scope.add_statement(f) diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 43f92ffa..d0a7aae3 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -275,6 +275,10 @@ class Scope(Simple, IsScope): if self.isinstance(Function): checks += self.params + self.decorators checks += [r for r in self.returns if r is not None] + if self.isinstance(Flow): + checks += self.inputs + if isinstance(self, ForFlow): + checks.append(self.set_stmt) for s in checks: if isinstance(s, Flow): diff --git a/test/test_call_signatures.py b/test/test_call_signatures.py index 6fe99a9e..771ac2f7 100644 --- a/test/test_call_signatures.py +++ b/test/test_call_signatures.py @@ -15,9 +15,11 @@ class TestCallSignatures(TestCase): assert signatures[0].call_name == expected_name assert signatures[0].index == expected_index + def _run_simple(self, source, name, index=0, column=None, line=1): + self._run(source, name, index, line, column) + def test_simple(self): - def run(source, name, index=0, column=None, line=1): - self._run(source, name, index, line, column) + run = self._run_simple # simple s1 = "abs(a, str(" @@ -60,18 +62,19 @@ class TestCallSignatures(TestCase): run("import time; abc = time; abc.sleep(", 'sleep', 0) - # jedi-vim #9 - run("with open(", 'open', 0) - - # jedi-vim #11 - run("for sorted(", 'sorted', 0) - run("for s in sorted(", 'sorted', 0) - # jedi #57 s = "def func(alpha, beta): pass\n" \ "func(alpha='101'," run(s, 'func', 0, column=13, line=2) + def test_flows(self): + # jedi-vim #9 + self._run_simple("with open(", 'open', 0) + + # jedi-vim #11 + self._run_simple("for sorted(", 'sorted', 0) + self._run_simple("for s in sorted(", 'sorted', 0) + def test_complex(self): s = """ def abc(a,b):