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):