Merge pull request #321 from pre-commit/suggest_mirrors_autopep8 Remove autopep8-wrapper in favor of autopep8
diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index 363e82a..5d2d272 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml
@@ -5,169 +5,112 @@ language: python types: [python] args: [-i] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-added-large-files name: Check for added large files description: Prevent giant files from being committed entry: check-added-large-files language: python - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-ast name: Check python ast description: Simply check whether the files parse as valid python. entry: check-ast language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-byte-order-marker name: Check for byte-order marker description: Forbid files which have a UTF-8 byte-order marker entry: check-byte-order-marker language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-builtin-literals name: Check builtin type constructor use description: Require literal syntax when initializing empty or zero Python builtin types. entry: check-builtin-literals language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-case-conflict name: Check for case conflicts description: Check for files that would conflict in case-insensitive filesystems entry: check-case-conflict language: python - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-docstring-first name: Check docstring is first description: Checks a common error of defining a docstring after code. entry: check-docstring-first language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-executables-have-shebangs name: Check that executables have shebangs description: Ensures that (non-binary) executables have a shebang. entry: check-executables-have-shebangs language: python types: [text, executable] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-json name: Check JSON description: This hook checks json files for parseable syntax. entry: check-json language: python types: [json] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: pretty-format-json name: Pretty format JSON description: This hook sets a standard for formatting JSON files. entry: pretty-format-json language: python types: [json] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-merge-conflict name: Check for merge conflicts description: Check for files that contain merge conflict strings. entry: check-merge-conflict language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-symlinks name: Check for broken symlinks description: Checks for symlinks which do not point to anything. entry: check-symlinks language: python types: [symlink] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-vcs-permalinks name: Check vcs permalinks description: Ensures that links to vcs websites are permalinks. entry: check-vcs-permalinks language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-xml name: Check Xml description: This hook checks xml files for parseable syntax. entry: check-xml language: python types: [xml] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: check-yaml name: Check Yaml description: This hook checks yaml files for parseable syntax. entry: check-yaml language: python types: [yaml] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: debug-statements name: Debug Statements (Python) description: Check for debugger imports and py37+ `breakpoint()` calls in python source. entry: debug-statement-hook language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: detect-aws-credentials name: Detect AWS Credentials description: Detects *your* aws credentials from the aws cli credentials file entry: detect-aws-credentials language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: detect-private-key name: Detect Private Key description: Detects the presence of private keys entry: detect-private-key language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: double-quote-string-fixer name: Fix double quoted strings description: This hook replaces double quoted strings with single quoted strings entry: double-quote-string-fixer language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: end-of-file-fixer name: Fix End of Files description: Ensures that a file is either empty, or ends with one newline. @@ -175,9 +118,6 @@ language: python types: [text] stages: [commit, push, manual] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: file-contents-sorter name: File Contents Sorter description: Sort the lines in specified files (defaults to alphabetical). You must provide list of target files as input in your .pre-commit-config.yaml file. @@ -190,35 +130,23 @@ entry: fix-encoding-pragma description: 'Add # -*- coding: utf-8 -*- to the top of python files' types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: flake8 name: Flake8 description: This hook runs flake8. entry: flake8 language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: forbid-new-submodules name: Forbid new submodules language: python entry: forbid-new-submodules description: Prevent addition of new git submodules - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: mixed-line-ending name: Mixed line ending description: Replaces or checks mixed line ending entry: mixed-line-ending language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: name-tests-test name: Tests should end in _test.py description: This verifies that test files are named correctly @@ -231,18 +159,12 @@ language: python pass_filenames: false always_run: true - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: pyflakes name: Pyflakes (DEPRECATED, use flake8) description: This hook runs pyflakes. (This is deprecated, use flake8). entry: pyflakes language: python types: [python] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0 - id: requirements-txt-fixer name: Fix requirements.txt description: Sorts entries in requirements.txt @@ -261,6 +183,3 @@ entry: trailing-whitespace-fixer language: python types: [text] - # for backward compatibility - files: '' - minimum_pre_commit_version: 0.15.0
diff --git a/README.md b/README.md index df42a88..dc4cdb6 100644 --- a/README.md +++ b/README.md
@@ -92,10 +92,10 @@ - `requirements-txt-fixer` - Sorts entries in requirements.txt and removes incorrect entry for `pkg-resources==0.0.0` - `sort-simple-yaml` - Sorts simple YAML files which consist only of top-level keys, preserving comments and blocks. - `trailing-whitespace` - Trims trailing whitespace. - - Markdown linebreak trailing spaces preserved for `.md` and`.markdown`; - use `args: ['--markdown-linebreak-ext=txt,text']` to add other extensions, - `args: ['--markdown-linebreak-ext=*']` to preserve them for all files, - or `args: ['--no-markdown-linebreak-ext']` to disable and always trim. + - To preserve Markdown [hard linebreaks](https://github.github.com/gfm/#hard-line-break) + use `args: [--markdown-linebreak-ext=md]` (or other extensions used + by your markdownfiles). If for some reason you want to treat all files + as markdown, use `--markdown-linebreak-ext=*`. ### Deprecated / replaced hooks
diff --git a/hooks.yaml b/hooks.yaml deleted file mode 100644 index 4552fa7..0000000 --- a/hooks.yaml +++ /dev/null
@@ -1,186 +0,0 @@ -- id: autopep8-wrapper - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-added-large-files - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-ast - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-builtin-literals - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-byte-order-marker - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-case-conflict - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-docstring-first - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-executables-have-shebangs - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-json - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: pretty-format-json - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-merge-conflict - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-symlinks - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-vcs-permalinks - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-xml - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: check-yaml - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: debug-statements - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: detect-aws-credentials - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: detect-private-key - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: double-quote-string-fixer - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: end-of-file-fixer - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: file-contents-sorter - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: fix-encoding-pragma - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: flake8 - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: forbid-new-submodules - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: mixed-line-ending - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: name-tests-test - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: no-commit-to-branch - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: pyflakes - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: requirements-txt-fixer - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: sort-simple-yaml - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0 -- id: trailing-whitespace - language: system - name: upgrade-your-pre-commit-version - entry: upgrade-your-pre-commit-version - files: '' - minimum_pre_commit_version: 0.15.0
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py index 062f6e3..1b54fbd 100644 --- a/pre_commit_hooks/trailing_whitespace_fixer.py +++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -35,24 +35,25 @@ parser = argparse.ArgumentParser() parser.add_argument( '--no-markdown-linebreak-ext', - action='store_const', - const=[], - default=argparse.SUPPRESS, - dest='markdown_linebreak_ext', - help='Do not preserve linebreak spaces in Markdown', + action='store_true', + help=argparse.SUPPRESS, ) parser.add_argument( '--markdown-linebreak-ext', action='append', - const='', - default=['md,markdown'], + default=[], metavar='*|EXT[,EXT,...]', - nargs='?', - help='Markdown extensions (or *) for linebreak spaces', + help=( + 'Markdown extensions (or *) to not strip linebreak spaces. ' + 'default: %(default)s' + ), ) parser.add_argument('filenames', nargs='*', help='Filenames to fix') args = parser.parse_args(argv) + if args.no_markdown_linebreak_ext: + print('--no-markdown-linebreak-ext now does nothing!') + md_args = args.markdown_linebreak_ext if '' in md_args: parser.error('--markdown-linebreak-ext requires a non-empty argument') @@ -66,7 +67,7 @@ for ext in md_exts: if any(c in ext[1:] for c in r'./\:'): parser.error( - "bad --markdown-linebreak-ext extension '{}' (has . / \\ :)\n" + "bad --markdown-linebreak-ext extension {!r} (has . / \\ :)\n" " (probably filename; use '--markdown-linebreak-ext=EXT')" .format(ext), )
diff --git a/tests/meta_test.py b/tests/meta_test.py deleted file mode 100644 index e5d068f..0000000 --- a/tests/meta_test.py +++ /dev/null
@@ -1,43 +0,0 @@ -from __future__ import absolute_import -from __future__ import unicode_literals - -import io - -import yaml - - -def _assert_parseable_in_old_pre_commit(hooks): - for hook in hooks: - assert {'id', 'name', 'entry', 'files', 'language'} <= set(hook) - - -def test_legacy_hooks(): - with io.open('hooks.yaml', encoding='UTF-8') as legacy_file: - legacy = yaml.load(legacy_file.read()) - with io.open('.pre-commit-hooks.yaml', encoding='UTF-8') as hooks_file: - hooks = yaml.load(hooks_file.read()) - - # The same set of hooks should be defined in both files - new_hook_ids = {hook['id'] for hook in hooks} - legacy_hook_ids = {hook['id'] for hook in legacy} - assert new_hook_ids == legacy_hook_ids - - # Both files should be parseable by pre-commit<0.15.0 - _assert_parseable_in_old_pre_commit(legacy) - _assert_parseable_in_old_pre_commit(hooks) - - # The legacy file should force upgrading - for hook in legacy: - del hook['id'] - assert hook == { - 'language': 'system', - 'name': 'upgrade-your-pre-commit-version', - 'entry': 'upgrade-your-pre-commit-version', - 'files': '', - 'minimum_pre_commit_version': '0.15.0', - } - - # Each hook should require a new version if it uses types - for hook in hooks: - if 'types' in hook: - assert hook['minimum_pre_commit_version'] == '0.15.0'
diff --git a/tests/trailing_whitespace_fixer_test.py b/tests/trailing_whitespace_fixer_test.py index 7ee9e63..82c9b6d 100644 --- a/tests/trailing_whitespace_fixer_test.py +++ b/tests/trailing_whitespace_fixer_test.py
@@ -14,7 +14,7 @@ ), ) def test_fixes_trailing_whitespace(input_s, expected, tmpdir): - path = tmpdir.join('file.txt') + path = tmpdir.join('file.md') path.write(input_s) assert main((path.strpath,)) == 1 assert path.read() == expected @@ -36,89 +36,39 @@ assert ret == 0 -def test_markdown_ok(tmpdir): - filename = tmpdir.join('foo.md') - filename.write_binary(b'foo \n') - ret = main((filename.strpath,)) - assert filename.read_binary() == b'foo \n' - assert ret == 0 - - -# filename, expected input, expected output -MD_TESTS_1 = ( - ('foo.md', 'foo \nbar \n ', 'foo \nbar\n'), - ('bar.Markdown', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), - ('.md', 'baz \nquux \t\n\t\n', 'baz\nquux\n\n'), - ('txt', 'foo \nbaz \n\t\n', 'foo\nbaz\n\n'), -) - - -@pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_1) -def test_fixes_trailing_markdown_whitespace(filename, input_s, output, tmpdir): - path = tmpdir.join(filename) - path.write(input_s) - ret = main([path.strpath]) +@pytest.mark.parametrize('ext', ('md', 'Md', '.md', '*')) +def test_fixes_markdown_files(tmpdir, ext): + path = tmpdir.join('test.md') + path.write( + 'foo \n' # leaves alone + 'bar \n' # less than two so it is removed + 'baz \n' # more than two so it becomes two spaces + '\t\n' # trailing tabs are stripped anyway + '\n ', # whitespace at the end of the file is removed + ) + ret = main((path.strpath, '--markdown-linebreak-ext={}'.format(ext))) assert ret == 1 - assert path.read() == output + assert path.read() == ( + 'foo \n' + 'bar\n' + 'baz \n' + '\n' + '\n' + ) -# filename, expected input, expected output -MD_TESTS_2 = ( - ('foo.txt', 'foo \nbar \n \n', 'foo \nbar\n\n'), - ('bar.Markdown', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), - ('bar.MD', 'bar \nbaz\t \n\t\n', 'bar \nbaz \n\n'), - ('.txt', 'baz \nquux \t\n\t\n', 'baz\nquux\n\n'), - ('txt', 'foo \nbaz \n\t\n', 'foo\nbaz\n\n'), -) - - -@pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_2) -def test_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir): - path = tmpdir.join(filename) - path.write(input_s) - ret = main(('--markdown-linebreak-ext=TxT', path.strpath)) - assert ret == 1 - assert path.read() == output - - -# filename, expected input, expected output -MD_TESTS_3 = ( - ('foo.baz', 'foo \nbar \n ', 'foo \nbar\n'), - ('bar', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), -) - - -@pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_3) -def test_markdown_linebreak_ext_opt_all(filename, input_s, output, tmpdir): - path = tmpdir.join(filename) - path.write(input_s) - # need to make sure filename is not treated as argument to option - ret = main(('--markdown-linebreak-ext=*', path.strpath)) - assert ret == 1 - assert path.read() == output - - -@pytest.mark.parametrize(('arg'), ('--', 'a.b', 'a/b')) +@pytest.mark.parametrize('arg', ('--', 'a.b', 'a/b', '')) def test_markdown_linebreak_ext_badopt(arg): with pytest.raises(SystemExit) as excinfo: main(['--markdown-linebreak-ext', arg]) assert excinfo.value.code == 2 -# filename, expected input, expected output -MD_TESTS_4 = ( - ('bar.md', 'bar \nbaz\t \n\t\n', 'bar\nbaz\n\n'), - ('bar.markdown', 'baz \nquux \n', 'baz\nquux\n'), -) - - -@pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_4) -def test_no_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir): - path = tmpdir.join(filename) - path.write(input_s) - ret = main(['--no-markdown-linebreak-ext', path.strpath]) - assert ret == 1 - assert path.read() == output +def test_prints_warning_with_no_markdown_ext(capsys, tmpdir): + f = tmpdir.join('f').ensure() + assert main((f.strpath, '--no-markdown-linebreak-ext')) == 0 + out, _ = capsys.readouterr() + assert out == '--no-markdown-linebreak-ext now does nothing!\n' def test_preserve_non_utf8_file(tmpdir):