diff --git a/.travis.yml b/.travis.yml index 6a0aaa0..94b6262 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,9 @@ env: # These should match the tox env list - TOXENV=py34 - TOXENV=pypy - TOXENV=pypy3 -install: pip install coveralls tox +install: + - if [[ $TOXENV == py26 ]]; then pip install ordereddict; fi + - pip install coveralls tox script: tox # Special snowflake. Our tests depend on making real commits. before_install: diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 1d601fa..ae6dfe8 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -3,13 +3,21 @@ from __future__ import print_function import argparse import sys +# Versions older than Python 2.6 will need to install ordereddict, +# but newer versions will import from the built-in collections module. +try: + from collections import OrderedDict +except ImportError: + from ordereddict import OrderedDict + import simplejson -def _get_pretty_format(contents, indent, no_sort_keys): +def _get_pretty_format(contents, indent, sort_keys=True): return simplejson.dumps( - simplejson.loads(contents), - sort_keys=no_sort_keys, + simplejson.loads(contents, + object_pairs_hook=None if sort_keys else OrderedDict), + sort_keys=sort_keys, indent=indent ) + "\n" # dumps don't end with a newline @@ -39,7 +47,7 @@ def pretty_format_json(argv=None): action='store_true', dest='no_sort_keys', default=False, - help='Do not sort the keys' + help='Keep JSON nodes in the same order' ) parser.add_argument('filenames', nargs='*', help='Filenames to fix')