mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-14 00:14:46 +00:00
Improve error message for malformed per-file-ignores
This commit is contained in:
parent
cfe9e92999
commit
f955a98b71
3 changed files with 48 additions and 3 deletions
|
|
@ -12,6 +12,8 @@ from typing import Callable, Dict, Generator # noqa: F401 (until flake8 3.7)
|
||||||
from typing import List, Pattern, Sequence # noqa: F401 (until flake8 3,7)
|
from typing import List, Pattern, Sequence # noqa: F401 (until flake8 3,7)
|
||||||
from typing import Tuple, Union # noqa: F401 (until flake8 3.7)
|
from typing import Tuple, Union # noqa: F401 (until flake8 3.7)
|
||||||
|
|
||||||
|
from flake8 import exceptions
|
||||||
|
|
||||||
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
||||||
from flake8.plugins.manager import Plugin # noqa: F401 (until flake8 3.7)
|
from flake8.plugins.manager import Plugin # noqa: F401 (until flake8 3.7)
|
||||||
|
|
||||||
|
|
@ -109,6 +111,21 @@ def parse_files_to_codes_mapping(value): # noqa: C901
|
||||||
State.filenames = []
|
State.filenames = []
|
||||||
State.codes = []
|
State.codes = []
|
||||||
|
|
||||||
|
def _unexpected_token():
|
||||||
|
# type: () -> exceptions.ExecutionError
|
||||||
|
|
||||||
|
def _indent(s):
|
||||||
|
# type: (str) -> str
|
||||||
|
return " " + s.strip().replace("\n", "\n ")
|
||||||
|
|
||||||
|
return exceptions.ExecutionError(
|
||||||
|
"Expected `per-file-ignores` to be a mapping from file exclude "
|
||||||
|
"patterns to ignore codes.\n\n"
|
||||||
|
"Configured `per-file-ignores` setting:\n\n{}".format(
|
||||||
|
_indent(value)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
for token in _tokenize_files_to_codes_mapping(value):
|
for token in _tokenize_files_to_codes_mapping(value):
|
||||||
# legal in any state: separator sets the sep bit
|
# legal in any state: separator sets the sep bit
|
||||||
if token.tp in {_COMMA, _WS}:
|
if token.tp in {_COMMA, _WS}:
|
||||||
|
|
@ -122,7 +139,7 @@ def parse_files_to_codes_mapping(value): # noqa: C901
|
||||||
State.filenames.append(token.src)
|
State.filenames.append(token.src)
|
||||||
State.seen_sep = False
|
State.seen_sep = False
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unexpected token: {}".format(token))
|
raise _unexpected_token()
|
||||||
# looking for codes
|
# looking for codes
|
||||||
else:
|
else:
|
||||||
if token.tp == _EOF:
|
if token.tp == _EOF:
|
||||||
|
|
@ -135,7 +152,7 @@ def parse_files_to_codes_mapping(value): # noqa: C901
|
||||||
State.filenames.append(token.src)
|
State.filenames.append(token.src)
|
||||||
State.seen_sep = False
|
State.seen_sep = False
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unexpected token: {}".format(token))
|
raise _unexpected_token()
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,3 +58,30 @@ t.py:2:1: F401 'sys' imported but unused
|
||||||
2 F401 'os' imported but unused
|
2 F401 'os' imported but unused
|
||||||
'''
|
'''
|
||||||
assert err == ''
|
assert err == ''
|
||||||
|
|
||||||
|
|
||||||
|
def test_malformed_per_file_ignores_error(tmpdir, capsys):
|
||||||
|
"""Test the error message for malformed `per-file-ignores`."""
|
||||||
|
setup_cfg = '''\
|
||||||
|
[flake8]
|
||||||
|
per-file-ignores =
|
||||||
|
incorrect/*
|
||||||
|
values/*
|
||||||
|
'''
|
||||||
|
|
||||||
|
with tmpdir.as_cwd():
|
||||||
|
tmpdir.join('setup.cfg').write(setup_cfg)
|
||||||
|
|
||||||
|
app = application.Application()
|
||||||
|
app.run(['.'])
|
||||||
|
|
||||||
|
out, err = capsys.readouterr()
|
||||||
|
assert out == '''\
|
||||||
|
There was a critical error during execution of Flake8:
|
||||||
|
Expected `per-file-ignores` to be a mapping from file exclude patterns to ignore codes.
|
||||||
|
|
||||||
|
Configured `per-file-ignores` setting:
|
||||||
|
|
||||||
|
incorrect/*
|
||||||
|
values/*
|
||||||
|
''' # noqa: E501
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import os
|
||||||
import mock
|
import mock
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from flake8 import exceptions
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
from flake8.plugins import manager as plugin_manager
|
from flake8.plugins import manager as plugin_manager
|
||||||
|
|
||||||
|
|
@ -111,7 +112,7 @@ def test_parse_files_to_codes_mapping(value, expected):
|
||||||
)
|
)
|
||||||
def test_invalid_file_list(value):
|
def test_invalid_file_list(value):
|
||||||
"""Test parsing of invalid files-to-codes mappings."""
|
"""Test parsing of invalid files-to-codes mappings."""
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(exceptions.ExecutionError):
|
||||||
utils.parse_files_to_codes_mapping(value)
|
utils.parse_files_to_codes_mapping(value)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue