diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 9115077..fb1c487 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -33,24 +33,12 @@ def _autofix(filename, new_contents): f.write(new_contents) -def parse_indent(s): - # type: (str) -> str +def parse_num_to_int(s): + """Convert string numbers to int, leaving strings as is.""" try: - int_indentation_spec = int(s) + return int(s) except ValueError: - if not s.strip(): - return s - else: - raise ValueError( - 'Non-whitespace JSON indentation delimiter supplied. ', - ) - else: - if int_indentation_spec >= 0: - return int_indentation_spec * ' ' - else: - raise ValueError( - 'Negative integer supplied to construct JSON indentation delimiter. ', - ) + return s def parse_topkeys(s): @@ -68,9 +56,12 @@ def pretty_format_json(argv=None): ) parser.add_argument( '--indent', - type=parse_indent, - default=' ', - help='String used as delimiter for one indentation level', + type=parse_num_to_int, + default='2', + help=( + 'The number of indent spaces or a string to be used as delimiter' + ' for indentation level e.g. 4 or "\t" (Default: 2)' + ), ) parser.add_argument( '--no-ensure-ascii', diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py index 4054b4c..7ce7e16 100644 --- a/tests/pretty_format_json_test.py +++ b/tests/pretty_format_json_test.py @@ -3,20 +3,16 @@ import shutil import pytest from six import PY2 -from pre_commit_hooks.pretty_format_json import parse_indent +from pre_commit_hooks.pretty_format_json import parse_num_to_int from pre_commit_hooks.pretty_format_json import pretty_format_json from testing.util import get_resource_path -def test_parse_indent(): - assert parse_indent('0') == '' - assert parse_indent('2') == ' ' - assert parse_indent('\t') == '\t' - with pytest.raises(ValueError): - parse_indent('a') - with pytest.raises(ValueError): - parse_indent('-2') - +def test_parse_num_to_int(): + assert parse_num_to_int('0') == 0 + assert parse_num_to_int('2') == 2 + assert parse_num_to_int('\t') == '\t' + assert parse_num_to_int(' ') == ' ' @pytest.mark.parametrize(