Removed Scope.statements from the parser tree.

This commit is contained in:
Dave Halter
2017-04-28 18:18:37 +02:00
parent 307adc2026
commit eaa5100372
5 changed files with 21 additions and 14 deletions

View File

@@ -273,13 +273,15 @@ class Scope(PythonBaseNode, DocstringMixin):
return scan(self.children)
@property
def statements(self):
return self._search_in_scope((ExprStmt, KeywordStatement))
def is_scope(self):
return True
def get_suite(self):
"""
Returns the part that is executed by the function.
"""
return self.children[-1]
def __repr__(self):
try:
name = self.name.value

View File

@@ -11,8 +11,8 @@ from jedi import Script
def test_paths_from_assignment():
def paths(src):
script = Script(src)
stmt = script._get_module_node().statements[0]
return set(sys_path._paths_from_assignment(script._get_module(), stmt))
expr_stmt = script._get_module_node().children[0].children[0]
return set(sys_path._paths_from_assignment(script._get_module(), expr_stmt))
assert paths('sys.path[0:0] = ["a"]') == set(['a'])
assert paths('sys.path = ["b", 1, x + 3, y, "c"]') == set(['b', 'c'])

View File

@@ -112,7 +112,7 @@ def test_carriage_return_statements():
# this is a namespace package
''')
source = source.replace('\n', '\r\n')
stmt = parse(source).statements[0]
stmt = parse(source).children[0]
assert '#' not in stmt.get_code()
@@ -120,7 +120,9 @@ def test_incomplete_list_comprehension():
""" Shouldn't raise an error, same bug as #418. """
# With the old parser this actually returned a statement. With the new
# parser only valid statements generate one.
assert parse('(1 for def').statements == []
children = parse('(1 for def').children
assert [c.type for c in children] == \
['error_node', 'error_node', 'newline', 'endmarker']
def test_hex_values_in_docstring():

View File

@@ -23,8 +23,9 @@ class TokenTest(unittest.TestCase):
def testit():
a = "huhu"
'''))
tok = parsed.subscopes[0].statements[0].children[2]
assert tok.end_pos == (3, 14)
simple_stmt = parsed.subscopes[0].get_suite().children[-1]
string = simple_stmt.children[0].get_rhs()
assert string.end_pos == (3, 14)
def test_end_pos_multi_line(self):
parsed = parse(dedent('''
@@ -32,8 +33,9 @@ class TokenTest(unittest.TestCase):
a = """huhu
asdfasdf""" + "h"
'''))
tok = parsed.subscopes[0].statements[0].children[2].children[0]
assert tok.end_pos == (4, 11)
expr_stmt = parsed.subscopes[0].get_suite().children[1].children[0]
string_leaf = expr_stmt.get_rhs().children[0]
assert string_leaf.end_pos == (4, 11)
def test_simple_no_whitespace(self):
# Test a simple one line string, no preceding whitespace

View File

@@ -102,8 +102,9 @@ class TestRegression(TestCase):
# jedi issue #150
s = "x()\nx( )\nx( )\nx ( )"
module = parse(s)
for i, s in enumerate(module.statements):
assert s.end_pos == (i + 1, i + 3)
for i, simple_stmt in enumerate(module.children[:-1]):
expr_stmt = simple_stmt.children[0]
assert expr_stmt.end_pos == (i + 1, i + 3)
def check_definition_by_marker(self, source, after_cursor, names):
r"""