adjust error outputs to be more standardized

This commit is contained in:
Anthony Sottile 2022-04-06 16:55:26 -04:00
parent 48c60be15b
commit b13ff9b868
6 changed files with 22 additions and 13 deletions

View File

@ -28,13 +28,13 @@ def check_docstring_first(src: bytes, filename: str = '<unknown>') -> int:
if tok_type == tokenize.STRING and scol == 0: if tok_type == tokenize.STRING and scol == 0:
if found_docstring_line is not None: if found_docstring_line is not None:
print( print(
f'{filename}:{sline} Multiple module docstrings ' f'{filename}:{sline}: Multiple module docstrings '
f'(first docstring on line {found_docstring_line}).', f'(first docstring on line {found_docstring_line}).',
) )
return 1 return 1
elif found_code_line is not None: elif found_code_line is not None:
print( print(
f'{filename}:{sline} Module docstring appears after code ' f'{filename}:{sline}: Module docstring appears after code '
f'(code seen on line {found_code_line}).', f'(code seen on line {found_code_line}).',
) )
return 1 return 1

View File

@ -10,6 +10,7 @@ from pre_commit_hooks.util import cmd_output
CONFLICT_PATTERNS = [ CONFLICT_PATTERNS = [
b'<<<<<<< ', b'<<<<<<< ',
b'======= ', b'======= ',
b'=======\r\n',
b'=======\n', b'=======\n',
b'>>>>>>> ', b'>>>>>>> ',
] ]
@ -39,12 +40,12 @@ def main(argv: Sequence[str] | None = None) -> int:
retcode = 0 retcode = 0
for filename in args.filenames: for filename in args.filenames:
with open(filename, 'rb') as inputfile: with open(filename, 'rb') as inputfile:
for i, line in enumerate(inputfile): for i, line in enumerate(inputfile, start=1):
for pattern in CONFLICT_PATTERNS: for pattern in CONFLICT_PATTERNS:
if line.startswith(pattern): if line.startswith(pattern):
print( print(
f'Merge conflict string "{pattern.decode()}" ' f'{filename}:{i}: Merge conflict string '
f'found in {filename}:{i + 1}', f'{pattern.strip().decode()!r} found',
) )
retcode = 1 retcode = 1

View File

@ -65,7 +65,7 @@ def check_file(filename: str) -> int:
visitor.visit(ast_obj) visitor.visit(ast_obj)
for bp in visitor.breakpoints: for bp in visitor.breakpoints:
print(f'{filename}:{bp.line}:{bp.col} - {bp.name} {bp.reason}') print(f'{filename}:{bp.line}:{bp.col}: {bp.name} {bp.reason}')
return int(bool(visitor.breakpoints)) return int(bool(visitor.breakpoints))

View File

@ -17,7 +17,7 @@ TESTS = (
b'from __future__ import unicode_literals\n' b'from __future__ import unicode_literals\n'
b'"foo"\n', b'"foo"\n',
1, 1,
'{filename}:2 Module docstring appears after code ' '{filename}:2: Module docstring appears after code '
'(code seen on line 1).\n', '(code seen on line 1).\n',
), ),
# Test double docstring # Test double docstring
@ -26,7 +26,7 @@ TESTS = (
b'from __future__ import absolute_import\n' b'from __future__ import absolute_import\n'
b'"fake docstring"\n', b'"fake docstring"\n',
1, 1,
'{filename}:3 Multiple module docstrings ' '{filename}:3: Multiple module docstrings '
'(first docstring on line 1).\n', '(first docstring on line 1).\n',
), ),
# Test multiple lines of code above # Test multiple lines of code above
@ -35,7 +35,7 @@ TESTS = (
b'import sys\n' b'import sys\n'
b'"docstring"\n', b'"docstring"\n',
1, 1,
'{filename}:3 Module docstring appears after code ' '{filename}:3: Module docstring appears after code '
'(code seen on line 1).\n', '(code seen on line 1).\n',
), ),
# String literals in expressions are ok. # String literals in expressions are ok.

View File

@ -101,8 +101,14 @@ def repository_pending_merge(tmpdir):
@pytest.mark.usefixtures('f1_is_a_conflict_file') @pytest.mark.usefixtures('f1_is_a_conflict_file')
def test_merge_conflicts_git(): def test_merge_conflicts_git(capsys):
assert main(['f1']) == 1 assert main(['f1']) == 1
out, _ = capsys.readouterr()
assert out == (
"f1:1: Merge conflict string '<<<<<<<' found\n"
"f1:3: Merge conflict string '=======' found\n"
"f1:5: Merge conflict string '>>>>>>>' found\n"
)
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -139,7 +145,7 @@ def test_care_when_assumed_merge(tmpdir):
assert main([str(f.realpath()), '--assume-in-merge']) == 1 assert main([str(f.realpath()), '--assume-in-merge']) == 1
def test_worktree_merge_conflicts(f1_is_a_conflict_file, tmpdir): def test_worktree_merge_conflicts(f1_is_a_conflict_file, tmpdir, capsys):
worktree = tmpdir.join('worktree') worktree = tmpdir.join('worktree')
cmd_output('git', 'worktree', 'add', str(worktree)) cmd_output('git', 'worktree', 'add', str(worktree))
with worktree.as_cwd(): with worktree.as_cwd():
@ -148,4 +154,4 @@ def test_worktree_merge_conflicts(f1_is_a_conflict_file, tmpdir):
) )
msg = f1_is_a_conflict_file.join('.git/worktrees/worktree/MERGE_MSG') msg = f1_is_a_conflict_file.join('.git/worktrees/worktree/MERGE_MSG')
assert msg.exists() assert msg.exists()
test_merge_conflicts_git() test_merge_conflicts_git(capsys)

View File

@ -55,7 +55,9 @@ def test_non_utf8_file(tmpdir):
assert main((str(f_py),)) == 0 assert main((str(f_py),)) == 0
def test_py37_breakpoint(tmpdir): def test_py37_breakpoint(tmpdir, capsys):
f_py = tmpdir.join('f.py') f_py = tmpdir.join('f.py')
f_py.write('def f():\n breakpoint()\n') f_py.write('def f():\n breakpoint()\n')
assert main((str(f_py),)) == 1 assert main((str(f_py),)) == 1
out, _ = capsys.readouterr()
assert out == f'{f_py}:2:4: breakpoint called\n'