Continues processing JSONs even if hook fails (fixes #1038)
diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py
index 627a11c..5c0292b 100644
--- a/pre_commit_hooks/pretty_format_json.py
+++ b/pre_commit_hooks/pretty_format_json.py
@@ -115,16 +115,20 @@
f'Input File {json_file} is not a valid JSON, consider using '
f'check-json',
)
- return 1
-
- if contents != pretty_contents:
- if args.autofix:
- _autofix(json_file, pretty_contents)
- else:
- diff_output = get_diff(contents, pretty_contents, json_file)
- sys.stdout.buffer.write(diff_output.encode())
-
status = 1
+ else:
+ if contents != pretty_contents:
+ if args.autofix:
+ _autofix(json_file, pretty_contents)
+ else:
+ diff_output = get_diff(
+ contents,
+ pretty_contents,
+ json_file,
+ )
+ sys.stdout.buffer.write(diff_output.encode())
+
+ status = 1
return status
diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py
index 5ded724..68b6d7a 100644
--- a/tests/pretty_format_json_test.py
+++ b/tests/pretty_format_json_test.py
@@ -82,6 +82,24 @@
assert ret == 0
+def test_invalid_main(tmpdir):
+ srcfile1 = tmpdir.join('not_valid_json.json')
+ srcfile1.write(
+ '{\n'
+ ' // not json\n'
+ ' "a": "b"\n'
+ '}',
+ )
+ srcfile2 = tmpdir.join('to_be_json_formatted.json')
+ srcfile2.write('{ "a": "b" }')
+
+ # it should have skipped the first file and formatted the second one
+ assert main(['--autofix', str(srcfile1), str(srcfile2)]) == 1
+
+ # confirm second file was formatted (shouldn't trigger linter again)
+ assert main([str(srcfile2)]) == 0
+
+
def test_orderfile_get_pretty_format():
ret = main((
'--top-keys=alist', get_resource_path('pretty_formatted_json.json'),