diff --git a/jedi/parser_utils.py b/jedi/parser_utils.py index 2ee67f04..869aaedb 100644 --- a/jedi/parser_utils.py +++ b/jedi/parser_utils.py @@ -243,14 +243,16 @@ def get_parent_scope(node, include_flows=False): Returns the underlying scope. """ scope = node.parent + if scope is None: + return None # It's a module already. if scope.type in ('funcdef', 'classdef') and scope.name == node: scope = scope.parent + if scope.parent is None: # The module scope. + return scope - while scope is not None: - if include_flows and isinstance(scope, tree.Flow): + while True: + if include_flows and isinstance(scope, tree.Flow) or is_scope(scope): return scope - if is_scope(scope): - break scope = scope.parent return scope diff --git a/test/test_api/test_classes.py b/test/test_api/test_classes.py index d320966a..1e4f188e 100644 --- a/test/test_api/test_classes.py +++ b/test/test_api/test_classes.py @@ -99,7 +99,7 @@ def test_function_call_signature_in_doc(Script): def test_param_docstring(): - param = jedi.names("def test(parameter): pass")[1] + param = jedi.names("def test(parameter): pass", all_scopes=True)[1] assert param.name == 'parameter' assert param.docstring() == '' diff --git a/test/test_evaluate/test_stdlib.py b/test/test_evaluate/test_stdlib.py index d3f0e620..a851699d 100644 --- a/test/test_evaluate/test_stdlib.py +++ b/test/test_evaluate/test_stdlib.py @@ -41,6 +41,7 @@ def test_namedtuple_list(Script): assert completions == {'legs', 'length', 'large'} +@pytest.mark.skip(reason='TODO Please remove this once typeshed is merged') def test_namedtuple_content(Script): source = dedent("""\ import collections