mirror of
https://github.com/pre-commit/pre-commit-hooks.git
synced 2026-04-08 04:34:16 +00:00
Default --no-markdown-linebreak-ext for trailing-whitespace
This commit is contained in:
parent
78b24438db
commit
99453a5366
3 changed files with 40 additions and 89 deletions
|
|
@ -97,10 +97,10 @@ Add this to your `.pre-commit-config.yaml`
|
||||||
- `requirements-txt-fixer` - Sorts entries in requirements.txt and removes incorrect entry for `pkg-resources==0.0.0`
|
- `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.
|
- `sort-simple-yaml` - Sorts simple YAML files which consist only of top-level keys, preserving comments and blocks.
|
||||||
- `trailing-whitespace` - Trims trailing whitespace.
|
- `trailing-whitespace` - Trims trailing whitespace.
|
||||||
- Markdown linebreak trailing spaces preserved for `.md` and`.markdown`;
|
- To preserve Markdown [hard linebreaks](https://github.github.com/gfm/#hard-line-break)
|
||||||
use `args: ['--markdown-linebreak-ext=txt,text']` to add other extensions,
|
use `args: [--markdown-linebreak-ext=md]` (or other extensions used
|
||||||
`args: ['--markdown-linebreak-ext=*']` to preserve them for all files,
|
by your markdownfiles). If for some reason you want to treat all files
|
||||||
or `args: ['--no-markdown-linebreak-ext']` to disable and always trim.
|
as markdown, use `--markdown-linebreak-ext=*`.
|
||||||
|
|
||||||
### As a standalone package
|
### As a standalone package
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,24 +35,25 @@ def main(argv=None):
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--no-markdown-linebreak-ext',
|
'--no-markdown-linebreak-ext',
|
||||||
action='store_const',
|
action='store_true',
|
||||||
const=[],
|
help=argparse.SUPPRESS,
|
||||||
default=argparse.SUPPRESS,
|
|
||||||
dest='markdown_linebreak_ext',
|
|
||||||
help='Do not preserve linebreak spaces in Markdown',
|
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--markdown-linebreak-ext',
|
'--markdown-linebreak-ext',
|
||||||
action='append',
|
action='append',
|
||||||
const='',
|
default=[],
|
||||||
default=['md,markdown'],
|
|
||||||
metavar='*|EXT[,EXT,...]',
|
metavar='*|EXT[,EXT,...]',
|
||||||
nargs='?',
|
help=(
|
||||||
help='Markdown extensions (or *) for linebreak spaces',
|
'Markdown extensions (or *) to not strip linebreak spaces. '
|
||||||
|
'default: %(default)s'
|
||||||
|
),
|
||||||
)
|
)
|
||||||
parser.add_argument('filenames', nargs='*', help='Filenames to fix')
|
parser.add_argument('filenames', nargs='*', help='Filenames to fix')
|
||||||
args = parser.parse_args(argv)
|
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
|
md_args = args.markdown_linebreak_ext
|
||||||
if '' in md_args:
|
if '' in md_args:
|
||||||
parser.error('--markdown-linebreak-ext requires a non-empty argument')
|
parser.error('--markdown-linebreak-ext requires a non-empty argument')
|
||||||
|
|
@ -66,7 +67,7 @@ def main(argv=None):
|
||||||
for ext in md_exts:
|
for ext in md_exts:
|
||||||
if any(c in ext[1:] for c in r'./\:'):
|
if any(c in ext[1:] for c in r'./\:'):
|
||||||
parser.error(
|
parser.error(
|
||||||
"bad --markdown-linebreak-ext extension '{}' (has . / \\ :)\n"
|
"bad --markdown-linebreak-ext extension {!r} (has . / \\ :)\n"
|
||||||
" (probably filename; use '--markdown-linebreak-ext=EXT')"
|
" (probably filename; use '--markdown-linebreak-ext=EXT')"
|
||||||
.format(ext),
|
.format(ext),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ from pre_commit_hooks.trailing_whitespace_fixer import main
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
def test_fixes_trailing_whitespace(input_s, expected, tmpdir):
|
def test_fixes_trailing_whitespace(input_s, expected, tmpdir):
|
||||||
path = tmpdir.join('file.txt')
|
path = tmpdir.join('file.md')
|
||||||
path.write(input_s)
|
path.write(input_s)
|
||||||
assert main((path.strpath,)) == 1
|
assert main((path.strpath,)) == 1
|
||||||
assert path.read() == expected
|
assert path.read() == expected
|
||||||
|
|
@ -36,89 +36,39 @@ def test_ok_with_dos_line_endings(tmpdir):
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
|
|
||||||
|
|
||||||
def test_markdown_ok(tmpdir):
|
@pytest.mark.parametrize('ext', ('md', 'Md', '.md', '*'))
|
||||||
filename = tmpdir.join('foo.md')
|
def test_fixes_markdown_files(tmpdir, ext):
|
||||||
filename.write_binary(b'foo \n')
|
path = tmpdir.join('test.md')
|
||||||
ret = main((filename.strpath,))
|
path.write(
|
||||||
assert filename.read_binary() == b'foo \n'
|
'foo \n' # leaves alone
|
||||||
assert ret == 0
|
'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
|
||||||
# filename, expected input, expected output
|
'\n ', # whitespace at the end of the file is removed
|
||||||
MD_TESTS_1 = (
|
)
|
||||||
('foo.md', 'foo \nbar \n ', 'foo \nbar\n'),
|
ret = main((path.strpath, '--markdown-linebreak-ext={}'.format(ext)))
|
||||||
('bar.Markdown', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'),
|
assert ret == 1
|
||||||
('.md', 'baz \nquux \t\n\t\n', 'baz\nquux\n\n'),
|
assert path.read() == (
|
||||||
('txt', 'foo \nbaz \n\t\n', 'foo\nbaz\n\n'),
|
'foo \n'
|
||||||
|
'bar\n'
|
||||||
|
'baz \n'
|
||||||
|
'\n'
|
||||||
|
'\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_1)
|
@pytest.mark.parametrize('arg', ('--', 'a.b', 'a/b', ''))
|
||||||
def test_fixes_trailing_markdown_whitespace(filename, input_s, output, tmpdir):
|
|
||||||
path = tmpdir.join(filename)
|
|
||||||
path.write(input_s)
|
|
||||||
ret = main([path.strpath])
|
|
||||||
assert ret == 1
|
|
||||||
assert path.read() == output
|
|
||||||
|
|
||||||
|
|
||||||
# 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'))
|
|
||||||
def test_markdown_linebreak_ext_badopt(arg):
|
def test_markdown_linebreak_ext_badopt(arg):
|
||||||
with pytest.raises(SystemExit) as excinfo:
|
with pytest.raises(SystemExit) as excinfo:
|
||||||
main(['--markdown-linebreak-ext', arg])
|
main(['--markdown-linebreak-ext', arg])
|
||||||
assert excinfo.value.code == 2
|
assert excinfo.value.code == 2
|
||||||
|
|
||||||
|
|
||||||
# filename, expected input, expected output
|
def test_prints_warning_with_no_markdown_ext(capsys, tmpdir):
|
||||||
MD_TESTS_4 = (
|
f = tmpdir.join('f').ensure()
|
||||||
('bar.md', 'bar \nbaz\t \n\t\n', 'bar\nbaz\n\n'),
|
assert main((f.strpath, '--no-markdown-linebreak-ext')) == 0
|
||||||
('bar.markdown', 'baz \nquux \n', 'baz\nquux\n'),
|
out, _ = capsys.readouterr()
|
||||||
)
|
assert out == '--no-markdown-linebreak-ext now does nothing!\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_preserve_non_utf8_file(tmpdir):
|
def test_preserve_non_utf8_file(tmpdir):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue