mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-10 06:31:57 +08:00
Self test on parsos files to check if there's no syntax errors.
This commit is contained in:
@@ -430,7 +430,7 @@ class ErrorFinder(Normalizer):
|
|||||||
self._add_syntax_error(message % p.name.value, p.name)
|
self._add_syntax_error(message % p.name.value, p.name)
|
||||||
param_names.add(p.name.value)
|
param_names.add(p.name.value)
|
||||||
|
|
||||||
if p.default is None:
|
if p.default is None and not p.star_count:
|
||||||
if default_only:
|
if default_only:
|
||||||
# def f(x=3, y): pass
|
# def f(x=3, y): pass
|
||||||
message = "non-default argument follows default argument"
|
message = "non-default argument follows default argument"
|
||||||
@@ -510,6 +510,9 @@ class ErrorFinder(Normalizer):
|
|||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
if node.type == 'suite':
|
||||||
|
self._indentation_count -= 1
|
||||||
|
|
||||||
def visit_leaf(self, leaf):
|
def visit_leaf(self, leaf):
|
||||||
if leaf.type == 'error_leaf':
|
if leaf.type == 'error_leaf':
|
||||||
if leaf.original_type in ('indent', 'error_dedent'):
|
if leaf.original_type in ('indent', 'error_dedent'):
|
||||||
@@ -597,7 +600,7 @@ class ErrorFinder(Normalizer):
|
|||||||
elif leaf.value == 'break':
|
elif leaf.value == 'break':
|
||||||
in_loop = False
|
in_loop = False
|
||||||
for block in self._context.blocks:
|
for block in self._context.blocks:
|
||||||
if block.type == 'for_stmt':
|
if block.type in ('for_stmt', 'while_stmt'):
|
||||||
in_loop = True
|
in_loop = True
|
||||||
if not in_loop:
|
if not in_loop:
|
||||||
self._add_syntax_error("'break' outside loop", leaf)
|
self._add_syntax_error("'break' outside loop", leaf)
|
||||||
|
|||||||
23
test/test_file_python_errors.py
Normal file
23
test/test_file_python_errors.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
import parso
|
||||||
|
|
||||||
|
|
||||||
|
def get_python_files(path):
|
||||||
|
for dir_path, dir_names, file_names in os.walk(path):
|
||||||
|
for file_name in file_names:
|
||||||
|
if file_name.endswith('.py'):
|
||||||
|
yield os.path.join(dir_path, file_name)
|
||||||
|
|
||||||
|
|
||||||
|
def test_parso_files(each_version):
|
||||||
|
"""
|
||||||
|
There are obviously no syntax erros in the Python code of parso. However
|
||||||
|
parso should output the same for all versions.
|
||||||
|
"""
|
||||||
|
grammar = parso.load_grammar(version=each_version)
|
||||||
|
path = os.path.dirname(os.path.dirname(__file__)) + '/parso'
|
||||||
|
for file in get_python_files(path):
|
||||||
|
tree = grammar.parse(path=file)
|
||||||
|
errors = list(tree._iter_errors(grammar))
|
||||||
|
assert not errors
|
||||||
Reference in New Issue
Block a user