mirror of
https://github.com/PyCQA/flake8.git
synced 2026-03-30 10:46:54 +00:00
Since Flake8 3.0 we've had the ability for plugins to use `extend_default_ignore` to register codes they want disabled by default. This, however, was a permanent disabling unfortunately. Our code didn't have a way of understanding that this new set of `ignore` codes was actually the 'default' set for that run. Much like the extended_select_list, we now attach extended_ignore_list to be able to confidently determine if the ignore we get in the DecisionEngine is actually the Default Ignore list and what plugins what us to ignore by default. Refs https://github.com/PyCQA/pep8-naming/pull/157
411 lines
11 KiB
Python
411 lines
11 KiB
Python
"""Tests for the flake8.style_guide.DecisionEngine class."""
|
|
import argparse
|
|
|
|
import pytest
|
|
|
|
from flake8 import defaults
|
|
from flake8 import style_guide
|
|
|
|
|
|
def create_options(**kwargs):
|
|
"""Create and return an instance of argparse.Namespace."""
|
|
kwargs.setdefault("select", [])
|
|
kwargs.setdefault("extended_default_ignore", [])
|
|
kwargs.setdefault("extended_default_select", [])
|
|
kwargs.setdefault("extend_select", [])
|
|
kwargs.setdefault("ignore", [])
|
|
kwargs.setdefault("extend_ignore", [])
|
|
kwargs.setdefault("disable_noqa", False)
|
|
kwargs.setdefault("enable_extensions", [])
|
|
return argparse.Namespace(**kwargs)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"ignore_list,extend_ignore,error_code",
|
|
[
|
|
(["E111", "E121"], [], "E111"),
|
|
(["E111", "E121"], [], "E121"),
|
|
(["E111"], ["E121"], "E121"),
|
|
(["E11", "E12"], [], "E121"),
|
|
(["E2", "E12"], [], "E121"),
|
|
(["E2", "E12"], [], "E211"),
|
|
(["E2", "E3"], ["E12"], "E211"),
|
|
],
|
|
)
|
|
def test_was_ignored_ignores_errors(ignore_list, extend_ignore, error_code):
|
|
"""Verify we detect users explicitly ignoring an error."""
|
|
decider = style_guide.DecisionEngine(
|
|
create_options(ignore=ignore_list, extend_ignore=extend_ignore)
|
|
)
|
|
|
|
assert decider.was_ignored(error_code) is style_guide.Ignored.Explicitly
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"ignore_list,extend_ignore,error_code",
|
|
[
|
|
(["E111", "E121"], [], "E112"),
|
|
(["E111", "E121"], [], "E122"),
|
|
(["E11", "E12"], ["E121"], "W121"),
|
|
(["E2", "E12"], [], "E112"),
|
|
(["E2", "E12"], [], "E111"),
|
|
(["E2", "E12"], ["W11", "E3"], "E111"),
|
|
],
|
|
)
|
|
def test_was_ignored_implicitly_selects_errors(
|
|
ignore_list, extend_ignore, error_code
|
|
):
|
|
"""Verify we detect users does not explicitly ignore an error."""
|
|
decider = style_guide.DecisionEngine(
|
|
create_options(ignore=ignore_list, extend_ignore=extend_ignore)
|
|
)
|
|
|
|
assert decider.was_ignored(error_code) is style_guide.Selected.Implicitly
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"select_list,extend_select,enable_extensions,error_code",
|
|
[
|
|
(["E111", "E121"], [], [], "E111"),
|
|
(["E111", "E121"], [], [], "E121"),
|
|
(["E11", "E12"], [], [], "E121"),
|
|
(["E2", "E12"], [], [], "E121"),
|
|
(["E2", "E12"], [], [], "E211"),
|
|
(["E1"], ["E2"], [], "E211"),
|
|
(["E1"], [], ["E2"], "E211"),
|
|
([], ["E2"], [], "E211"),
|
|
([], [], ["E2"], "E211"),
|
|
(["E1"], ["E2"], [], "E211"),
|
|
(["E111"], ["E121"], ["E2"], "E121"),
|
|
],
|
|
)
|
|
def test_was_selected_selects_errors(
|
|
select_list, extend_select, enable_extensions, error_code
|
|
):
|
|
"""Verify we detect users explicitly selecting an error."""
|
|
decider = style_guide.DecisionEngine(
|
|
options=create_options(
|
|
select=select_list,
|
|
extend_select=extend_select,
|
|
enable_extensions=enable_extensions,
|
|
),
|
|
)
|
|
|
|
assert decider.was_selected(error_code) is style_guide.Selected.Explicitly
|
|
|
|
|
|
def test_was_selected_implicitly_selects_errors():
|
|
"""Verify we detect users implicitly selecting an error."""
|
|
error_code = "E121"
|
|
decider = style_guide.DecisionEngine(
|
|
create_options(
|
|
select=[],
|
|
extended_default_select=["E"],
|
|
),
|
|
)
|
|
|
|
assert decider.was_selected(error_code) is style_guide.Selected.Implicitly
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"select_list,error_code",
|
|
[
|
|
(["E111", "E121"], "E112"),
|
|
(["E111", "E121"], "E122"),
|
|
(["E11", "E12"], "E132"),
|
|
(["E2", "E12"], "E321"),
|
|
(["E2", "E12"], "E410"),
|
|
],
|
|
)
|
|
def test_was_selected_excludes_errors(select_list, error_code):
|
|
"""Verify we detect users implicitly excludes an error."""
|
|
decider = style_guide.DecisionEngine(create_options(select=select_list))
|
|
|
|
assert decider.was_selected(error_code) is style_guide.Ignored.Implicitly
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"select_list,ignore_list,extend_ignore,error_code,expected",
|
|
[
|
|
(["E111", "E121"], [], [], "E111", style_guide.Decision.Selected),
|
|
(["E111", "E121"], [], [], "E112", style_guide.Decision.Ignored),
|
|
(["E111", "E121"], [], [], "E121", style_guide.Decision.Selected),
|
|
(["E111", "E121"], [], [], "E122", style_guide.Decision.Ignored),
|
|
(["E11", "E12"], [], [], "E132", style_guide.Decision.Ignored),
|
|
(["E2", "E12"], [], [], "E321", style_guide.Decision.Ignored),
|
|
(["E2", "E12"], [], [], "E410", style_guide.Decision.Ignored),
|
|
(["E11", "E121"], ["E1"], [], "E112", style_guide.Decision.Selected),
|
|
(["E11", "E121"], [], ["E1"], "E112", style_guide.Decision.Selected),
|
|
(
|
|
["E111", "E121"],
|
|
["E2"],
|
|
["E3"],
|
|
"E122",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(["E11", "E12"], ["E13"], [], "E132", style_guide.Decision.Ignored),
|
|
(["E1", "E3"], ["E32"], [], "E321", style_guide.Decision.Ignored),
|
|
([], ["E2", "E12"], [], "E410", style_guide.Decision.Ignored),
|
|
(
|
|
["E4"],
|
|
["E2", "E12", "E41"],
|
|
[],
|
|
"E410",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
["E41"],
|
|
["E2", "E12", "E4"],
|
|
[],
|
|
"E410",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(["E"], ["F"], [], "E410", style_guide.Decision.Selected),
|
|
(["F"], [], [], "E410", style_guide.Decision.Ignored),
|
|
(["E"], defaults.IGNORE, [], "E126", style_guide.Decision.Selected),
|
|
(["W"], defaults.IGNORE, [], "E126", style_guide.Decision.Ignored),
|
|
(["E"], defaults.IGNORE, [], "W391", style_guide.Decision.Ignored),
|
|
(["E", "W"], ["E13"], [], "E131", style_guide.Decision.Ignored),
|
|
(defaults.SELECT, ["E13"], [], "E131", style_guide.Decision.Ignored),
|
|
(
|
|
defaults.SELECT,
|
|
defaults.IGNORE,
|
|
["W391"],
|
|
"E126",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
defaults.IGNORE,
|
|
[],
|
|
"W391",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
],
|
|
)
|
|
def test_decision_for(
|
|
select_list, ignore_list, extend_ignore, error_code, expected
|
|
):
|
|
"""Verify we decide when to report an error."""
|
|
decider = style_guide.DecisionEngine(
|
|
create_options(
|
|
select=select_list,
|
|
ignore=ignore_list,
|
|
extend_ignore=extend_ignore,
|
|
)
|
|
)
|
|
|
|
assert decider.decision_for(error_code) is expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"select,ignore,extended_default_ignore,extended_default_select,"
|
|
"enabled_extensions,error_code,expected",
|
|
[
|
|
(
|
|
defaults.SELECT,
|
|
[],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"I100",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
[],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"I201",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["I2"],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["I2"],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"I201",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["I1"],
|
|
[],
|
|
["I10"],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["I10"],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
[],
|
|
[],
|
|
[],
|
|
["U4"],
|
|
"U401",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["U401"],
|
|
[],
|
|
[],
|
|
["U4"],
|
|
"U401",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["U401"],
|
|
[],
|
|
[],
|
|
["U4"],
|
|
"U402",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
["E", "W"],
|
|
["E13"],
|
|
[],
|
|
[],
|
|
[],
|
|
"E131",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
["E", "W"],
|
|
["E13"],
|
|
[],
|
|
[],
|
|
[],
|
|
"E126",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(["E2"], ["E21"], [], [], [], "E221", style_guide.Decision.Selected),
|
|
(["E2"], ["E21"], [], [], [], "E212", style_guide.Decision.Ignored),
|
|
(
|
|
["F", "W"],
|
|
["C90"],
|
|
[],
|
|
["I1"],
|
|
[],
|
|
"C901",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
["E", "W"],
|
|
["C"],
|
|
[],
|
|
[],
|
|
[],
|
|
"E131",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
defaults.IGNORE,
|
|
[],
|
|
[],
|
|
["I"],
|
|
"I101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
defaults.IGNORE,
|
|
[],
|
|
["G"],
|
|
["I"],
|
|
"G101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["G1"],
|
|
[],
|
|
["G"],
|
|
["I"],
|
|
"G101",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
defaults.SELECT,
|
|
["E126"],
|
|
[],
|
|
[],
|
|
["I"],
|
|
"I101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
["E", "W"],
|
|
defaults.IGNORE,
|
|
[],
|
|
["I"],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
(
|
|
["E", "W", "I101"],
|
|
defaults.IGNORE + ("I101",),
|
|
["I101"],
|
|
[],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Selected,
|
|
),
|
|
(
|
|
["E", "W"],
|
|
defaults.IGNORE + ("I101",),
|
|
["I101"],
|
|
[],
|
|
[],
|
|
"I101",
|
|
style_guide.Decision.Ignored,
|
|
),
|
|
# TODO(sigmavirus24) Figure out how to exercise the final catch-all
|
|
# return statement
|
|
],
|
|
)
|
|
def test_more_specific_decision_for_logic(
|
|
select,
|
|
ignore,
|
|
extended_default_ignore,
|
|
extended_default_select,
|
|
enabled_extensions,
|
|
error_code,
|
|
expected,
|
|
):
|
|
"""Verify the logic of DecisionEngine.more_specific_decision_for."""
|
|
decider = style_guide.DecisionEngine(
|
|
create_options(
|
|
select=select,
|
|
ignore=ignore,
|
|
extended_default_select=extended_default_select,
|
|
extended_default_ignore=extended_default_ignore,
|
|
enable_extensions=enabled_extensions,
|
|
),
|
|
)
|
|
|
|
assert decider.more_specific_decision_for(error_code) is expected
|