diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 87e4564..3386673 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,6 +4,7 @@ repos: hooks: - id: trailing-whitespace - id: end-of-file-fixer + exclude: testing/resources/pretty_formatted_json_no_endline.json - id: check-yaml - id: debug-statements - id: double-quote-string-fixer diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 627a11c..de26839 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -27,7 +27,8 @@ def _get_pretty_format( indent=indent, ensure_ascii=ensure_ascii, ) - return f'{json_pretty}\n' + finisher = '\n' if contents.endswith('\n') else '' + return f'{json_pretty}{finisher}' def _autofix(filename: str, new_contents: str) -> None: diff --git a/testing/resources/pretty_formatted_json_no_endline.json b/testing/resources/pretty_formatted_json_no_endline.json new file mode 100644 index 0000000..170c74a --- /dev/null +++ b/testing/resources/pretty_formatted_json_no_endline.json @@ -0,0 +1,9 @@ +{ + "alist": [ + 2, + 34, + 234 + ], + "blah": null, + "foo": "bar" +} \ No newline at end of file diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py index 5ded724..d93db75 100644 --- a/tests/pretty_format_json_test.py +++ b/tests/pretty_format_json_test.py @@ -23,6 +23,7 @@ def test_parse_num_to_int(): ('unsorted_pretty_formatted_json.json', 1), ('non_ascii_pretty_formatted_json.json', 1), ('pretty_formatted_json.json', 0), + ('pretty_formatted_json_no_endline.json', 0), ), ) def test_main(filename, expected_retval): @@ -36,6 +37,7 @@ def test_main(filename, expected_retval): ('unsorted_pretty_formatted_json.json', 0), ('non_ascii_pretty_formatted_json.json', 1), ('pretty_formatted_json.json', 0), + ('pretty_formatted_json_no_endline.json', 0), ), ) def test_unsorted_main(filename, expected_retval): @@ -49,6 +51,7 @@ def test_unsorted_main(filename, expected_retval): ('unsorted_pretty_formatted_json.json', 1), ('non_ascii_pretty_formatted_json.json', 1), ('pretty_formatted_json.json', 1), + ('pretty_formatted_json_no_endline.json', 1), ('tab_pretty_formatted_json.json', 0), ), )