Merge pull request #6 from pre-commit/cannot_parse_ast
Give a better message when ast is not parseable.
diff --git a/pre_commit_hooks/debug_statement_hook.py b/pre_commit_hooks/debug_statement_hook.py
index 92f7c07..0ff94cf 100644
--- a/pre_commit_hooks/debug_statement_hook.py
+++ b/pre_commit_hooks/debug_statement_hook.py
@@ -1,9 +1,10 @@
from __future__ import print_function
+from __future__ import unicode_literals
import argparse
import ast
import collections
-import sys
+import traceback
from pre_commit_hooks.util import entry
@@ -35,7 +36,14 @@
def check_file_for_debug_statements(filename):
- ast_obj = ast.parse(open(filename).read())
+ try:
+ ast_obj = ast.parse(open(filename).read(), filename=filename)
+ except SyntaxError:
+ print('{0} - Could not parse ast'.format(filename))
+ print()
+ print('\t' + traceback.format_exc().replace('\n', '\n\t'))
+ print()
+ return 1
visitor = ImportStatementParser()
visitor.visit(ast_obj)
if visitor.debug_import_statements:
@@ -67,4 +75,4 @@
if __name__ == '__main__':
- sys.exit(debug_statement_hook())
+ exit(debug_statement_hook())
diff --git a/testing/resources/cannot_parse_ast.notpy b/testing/resources/cannot_parse_ast.notpy
new file mode 100644
index 0000000..150ca8d
--- /dev/null
+++ b/testing/resources/cannot_parse_ast.notpy
@@ -0,0 +1 @@
+if True:
diff --git a/tests/debug_statement_hook_test.py b/tests/debug_statement_hook_test.py
index 44c462f..66d7307 100644
--- a/tests/debug_statement_hook_test.py
+++ b/tests/debug_statement_hook_test.py
@@ -65,3 +65,8 @@
def test_returns_zero_for_passing_file():
ret = debug_statement_hook([__file__])
assert ret == 0
+
+
+def test_syntaxerror_file():
+ ret = debug_statement_hook([get_resource_path('cannot_parse_ast.notpy')])
+ assert ret == 1