Allow noqa to apply to lines due to continuation

This commit is contained in:
Anthony Sottile 2020-03-17 22:12:56 -07:00
parent 8f9b4931b9
commit 28797a57d8
5 changed files with 122 additions and 30 deletions

View file

@ -15,7 +15,7 @@ EXPECTED_RESULT_PHYSICAL_LINE = (
0,
1,
'Expected Message',
PHYSICAL_LINE,
None,
)
@ -153,11 +153,10 @@ def test_line_check_results(plugin_target, len_results):
"""Test the FileChecker class handling results from line checks."""
file_checker = mock_file_checker_with_plugin(plugin_target)
# Results will be store in an internal array
# Results will be stored in an internal array
file_checker.run_physical_checks(PHYSICAL_LINE)
assert file_checker.results == [
EXPECTED_RESULT_PHYSICAL_LINE
] * len_results
expected = [EXPECTED_RESULT_PHYSICAL_LINE] * len_results
assert file_checker.results == expected
PLACEHOLDER_CODE = 'some_line = "of" * code'

View file

@ -182,6 +182,25 @@ t.py:1:15: E711 comparison to None should be 'if cond is None:'
'''
def test_specific_noqa_on_line_with_continuation(tmpdir, capsys):
"""See https://gitlab.com/pycqa/flake8/issues/375."""
t_py_src = '''\
from os \\
import path # noqa: F401
x = """
trailing whitespace: \n
""" # noqa: W291
'''
with tmpdir.as_cwd():
tmpdir.join('t.py').write(t_py_src)
_call_main(['t.py'], retv=0)
out, err = capsys.readouterr()
assert out == err == ''
def test_obtaining_args_from_sys_argv_when_not_explicity_provided(capsys):
"""Test that arguments are obtained from 'sys.argv'."""
with mock.patch('sys.argv', ['flake8', '--help']):

View file

@ -122,16 +122,56 @@ def test_read_lines_ignores_empty_display_name(
assert file_processor.filename == 'stdin'
def test_line_for(default_options):
def test_noqa_line_for(default_options):
"""Verify we grab the correct line from the cached lines."""
file_processor = processor.FileProcessor('-', default_options, lines=[
'Line 1',
'Line 2',
'Line 3',
'Line 1\n',
'Line 2\n',
'Line 3\n',
])
for i in range(1, 4):
assert file_processor.line_for(i) == 'Line {0}'.format(i)
assert file_processor.noqa_line_for(i) == 'Line {0}\n'.format(i)
def test_noqa_line_for_continuation(default_options):
"""Verify that the correct "line" is retrieved for continuation."""
src = '''\
from foo \\
import bar # 2
x = """
hello
world
""" # 7
'''
lines = src.splitlines(True)
file_processor = processor.FileProcessor('-', default_options, lines=lines)
assert file_processor.noqa_line_for(0) is None
l_1_2 = 'from foo \\\n import bar # 2\n'
assert file_processor.noqa_line_for(1) == l_1_2
assert file_processor.noqa_line_for(2) == l_1_2
assert file_processor.noqa_line_for(3) == '\n'
l_4_7 = 'x = """\nhello\nworld\n""" # 7\n'
for i in (4, 5, 6, 7):
assert file_processor.noqa_line_for(i) == l_4_7
assert file_processor.noqa_line_for(8) is None
def test_noqa_line_for_no_eol_at_end_of_file(default_options):
"""Verify that we properly handle noqa line at the end of the file."""
src = 'from foo \\\nimport bar' # no end of file newline
lines = src.splitlines(True)
file_processor = processor.FileProcessor('-', default_options, lines=lines)
l_1_2 = 'from foo \\\nimport bar'
assert file_processor.noqa_line_for(1) == l_1_2
assert file_processor.noqa_line_for(2) == l_1_2
def test_next_line(default_options):