Skip to content

Commit 830ea6d

Browse files
committed
Give a better message when ast is not parseable.
1 parent 7666314 commit 830ea6d

3 files changed

Lines changed: 17 additions & 3 deletions

File tree

‎pre_commit_hooks/debug_statement_hook.py‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from __future__ import print_function
2+
from __future__ import unicode_literals
23

34
import argparse
45
import ast
56
import collections
6-
import sys
7+
import traceback
78

89
from pre_commit_hooks.util import entry
910

@@ -35,7 +36,14 @@ def visit_ImportFrom(self, node):
3536

3637

3738
def check_file_for_debug_statements(filename):
38-
ast_obj = ast.parse(open(filename).read())
39+
try:
40+
ast_obj = ast.parse(open(filename).read(), filename=filename)
41+
except SyntaxError:
42+
print('{0} - Could not parse ast'.format(filename))
43+
print()
44+
print('\t' + traceback.format_exc().replace('\n', '\n\t'))
45+
print()
46+
return 1
3947
visitor = ImportStatementParser()
4048
visitor.visit(ast_obj)
4149
if visitor.debug_import_statements:
@@ -67,4 +75,4 @@ def debug_statement_hook(argv):
6775

6876

6977
if __name__ == '__main__':
70-
sys.exit(debug_statement_hook())
78+
exit(debug_statement_hook())
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
if True:

‎tests/debug_statement_hook_test.py‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,8 @@ def test_returns_one_for_failing_file():
6565
def test_returns_zero_for_passing_file():
6666
ret = debug_statement_hook([__file__])
6767
assert ret == 0
68+
69+
70+
def test_syntaxerror_file():
71+
ret = debug_statement_hook([get_resource_path('cannot_parse_ast.notpy')])
72+
assert ret == 1

0 commit comments

Comments
 (0)