Skip to content

Commit 2bb0308

Browse files
committedApr 15, 2021
Fix bug for plugins using extend_default_ignore
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 PyCQA/pep8-naming#157
1 parent 992bb77 commit 2bb0308

File tree

4 files changed

+407
-179
lines changed

4 files changed

+407
-179
lines changed
 

‎src/flake8/options/aggregator.py

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ def aggregate_options(
4848
# Extend the default ignore value with the extended default ignore list,
4949
# registered by plugins.
5050
extended_default_ignore = manager.extended_default_ignore.copy()
51+
# Let's store our extended default ignore for use by the decision engine
52+
default_values.extended_default_ignore = (
53+
manager.extended_default_ignore.copy()
54+
)
5155
LOG.debug(
5256
"Extended default ignore list: %s", list(extended_default_ignore)
5357
)

‎src/flake8/style_guide.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,9 @@ def __init__(self, options: argparse.Namespace) -> None:
177177
reverse=True,
178178
)
179179
)
180-
self.using_default_ignore = set(self.ignored) == set(defaults.IGNORE)
180+
self.using_default_ignore = set(self.ignored) == set(
181+
defaults.IGNORE
182+
).union(options.extended_default_ignore)
181183
self.using_default_select = set(self.selected) == set(defaults.SELECT)
182184

183185
def _in_all_selected(self, code: str) -> bool:

‎tests/unit/test_decision_engine.py

+335-133
Original file line numberDiff line numberDiff line change
@@ -9,97 +9,114 @@
99

1010
def create_options(**kwargs):
1111
"""Create and return an instance of argparse.Namespace."""
12-
kwargs.setdefault('select', [])
13-
kwargs.setdefault('extended_default_select', [])
14-
kwargs.setdefault('extend_select', [])
15-
kwargs.setdefault('ignore', [])
16-
kwargs.setdefault('extend_ignore', [])
17-
kwargs.setdefault('disable_noqa', False)
18-
kwargs.setdefault('enable_extensions', [])
12+
kwargs.setdefault("select", [])
13+
kwargs.setdefault("extended_default_ignore", [])
14+
kwargs.setdefault("extended_default_select", [])
15+
kwargs.setdefault("extend_select", [])
16+
kwargs.setdefault("ignore", [])
17+
kwargs.setdefault("extend_ignore", [])
18+
kwargs.setdefault("disable_noqa", False)
19+
kwargs.setdefault("enable_extensions", [])
1920
return argparse.Namespace(**kwargs)
2021

2122

22-
@pytest.mark.parametrize('ignore_list,extend_ignore,error_code', [
23-
(['E111', 'E121'], [], 'E111'),
24-
(['E111', 'E121'], [], 'E121'),
25-
(['E111'], ['E121'], 'E121'),
26-
(['E11', 'E12'], [], 'E121'),
27-
(['E2', 'E12'], [], 'E121'),
28-
(['E2', 'E12'], [], 'E211'),
29-
(['E2', 'E3'], ['E12'], 'E211'),
30-
])
23+
@pytest.mark.parametrize(
24+
"ignore_list,extend_ignore,error_code",
25+
[
26+
(["E111", "E121"], [], "E111"),
27+
(["E111", "E121"], [], "E121"),
28+
(["E111"], ["E121"], "E121"),
29+
(["E11", "E12"], [], "E121"),
30+
(["E2", "E12"], [], "E121"),
31+
(["E2", "E12"], [], "E211"),
32+
(["E2", "E3"], ["E12"], "E211"),
33+
],
34+
)
3135
def test_was_ignored_ignores_errors(ignore_list, extend_ignore, error_code):
3236
"""Verify we detect users explicitly ignoring an error."""
3337
decider = style_guide.DecisionEngine(
34-
create_options(ignore=ignore_list, extend_ignore=extend_ignore))
38+
create_options(ignore=ignore_list, extend_ignore=extend_ignore)
39+
)
3540

3641
assert decider.was_ignored(error_code) is style_guide.Ignored.Explicitly
3742

3843

39-
@pytest.mark.parametrize('ignore_list,extend_ignore,error_code', [
40-
(['E111', 'E121'], [], 'E112'),
41-
(['E111', 'E121'], [], 'E122'),
42-
(['E11', 'E12'], ['E121'], 'W121'),
43-
(['E2', 'E12'], [], 'E112'),
44-
(['E2', 'E12'], [], 'E111'),
45-
(['E2', 'E12'], ['W11', 'E3'], 'E111'),
46-
])
47-
def test_was_ignored_implicitly_selects_errors(ignore_list, extend_ignore,
48-
error_code):
44+
@pytest.mark.parametrize(
45+
"ignore_list,extend_ignore,error_code",
46+
[
47+
(["E111", "E121"], [], "E112"),
48+
(["E111", "E121"], [], "E122"),
49+
(["E11", "E12"], ["E121"], "W121"),
50+
(["E2", "E12"], [], "E112"),
51+
(["E2", "E12"], [], "E111"),
52+
(["E2", "E12"], ["W11", "E3"], "E111"),
53+
],
54+
)
55+
def test_was_ignored_implicitly_selects_errors(
56+
ignore_list, extend_ignore, error_code
57+
):
4958
"""Verify we detect users does not explicitly ignore an error."""
5059
decider = style_guide.DecisionEngine(
51-
create_options(ignore=ignore_list, extend_ignore=extend_ignore))
60+
create_options(ignore=ignore_list, extend_ignore=extend_ignore)
61+
)
5262

5363
assert decider.was_ignored(error_code) is style_guide.Selected.Implicitly
5464

5565

5666
@pytest.mark.parametrize(
57-
'select_list,extend_select,enable_extensions,error_code', [
58-
(['E111', 'E121'], [], [], 'E111'),
59-
(['E111', 'E121'], [], [], 'E121'),
60-
(['E11', 'E12'], [], [], 'E121'),
61-
(['E2', 'E12'], [], [], 'E121'),
62-
(['E2', 'E12'], [], [], 'E211'),
63-
(['E1'], ['E2'], [], 'E211'),
64-
(['E1'], [], ['E2'], 'E211'),
65-
([], ['E2'], [], 'E211'),
66-
([], [], ['E2'], 'E211'),
67-
(['E1'], ['E2'], [], 'E211'),
68-
(['E111'], ['E121'], ['E2'], 'E121'),
69-
]
67+
"select_list,extend_select,enable_extensions,error_code",
68+
[
69+
(["E111", "E121"], [], [], "E111"),
70+
(["E111", "E121"], [], [], "E121"),
71+
(["E11", "E12"], [], [], "E121"),
72+
(["E2", "E12"], [], [], "E121"),
73+
(["E2", "E12"], [], [], "E211"),
74+
(["E1"], ["E2"], [], "E211"),
75+
(["E1"], [], ["E2"], "E211"),
76+
([], ["E2"], [], "E211"),
77+
([], [], ["E2"], "E211"),
78+
(["E1"], ["E2"], [], "E211"),
79+
(["E111"], ["E121"], ["E2"], "E121"),
80+
],
7081
)
71-
def test_was_selected_selects_errors(select_list, extend_select,
72-
enable_extensions, error_code):
82+
def test_was_selected_selects_errors(
83+
select_list, extend_select, enable_extensions, error_code
84+
):
7385
"""Verify we detect users explicitly selecting an error."""
7486
decider = style_guide.DecisionEngine(
75-
options=create_options(select=select_list,
76-
extend_select=extend_select,
77-
enable_extensions=enable_extensions),
87+
options=create_options(
88+
select=select_list,
89+
extend_select=extend_select,
90+
enable_extensions=enable_extensions,
91+
),
7892
)
7993

8094
assert decider.was_selected(error_code) is style_guide.Selected.Explicitly
8195

8296

8397
def test_was_selected_implicitly_selects_errors():
8498
"""Verify we detect users implicitly selecting an error."""
85-
error_code = 'E121'
99+
error_code = "E121"
86100
decider = style_guide.DecisionEngine(
87101
create_options(
88102
select=[],
89-
extended_default_select=['E'],
103+
extended_default_select=["E"],
90104
),
91105
)
92106

93107
assert decider.was_selected(error_code) is style_guide.Selected.Implicitly
94108

95109

96-
@pytest.mark.parametrize('select_list,error_code', [
97-
(['E111', 'E121'], 'E112'),
98-
(['E111', 'E121'], 'E122'),
99-
(['E11', 'E12'], 'E132'),
100-
(['E2', 'E12'], 'E321'),
101-
(['E2', 'E12'], 'E410'),
102-
])
110+
@pytest.mark.parametrize(
111+
"select_list,error_code",
112+
[
113+
(["E111", "E121"], "E112"),
114+
(["E111", "E121"], "E122"),
115+
(["E11", "E12"], "E132"),
116+
(["E2", "E12"], "E321"),
117+
(["E2", "E12"], "E410"),
118+
],
119+
)
103120
def test_was_selected_excludes_errors(select_list, error_code):
104121
"""Verify we detect users implicitly excludes an error."""
105122
decider = style_guide.DecisionEngine(create_options(select=select_list))
@@ -108,100 +125,285 @@ def test_was_selected_excludes_errors(select_list, error_code):
108125

109126

110127
@pytest.mark.parametrize(
111-
'select_list,ignore_list,extend_ignore,error_code,expected', [
112-
(['E111', 'E121'], [], [], 'E111', style_guide.Decision.Selected),
113-
(['E111', 'E121'], [], [], 'E112', style_guide.Decision.Ignored),
114-
(['E111', 'E121'], [], [], 'E121', style_guide.Decision.Selected),
115-
(['E111', 'E121'], [], [], 'E122', style_guide.Decision.Ignored),
116-
(['E11', 'E12'], [], [], 'E132', style_guide.Decision.Ignored),
117-
(['E2', 'E12'], [], [], 'E321', style_guide.Decision.Ignored),
118-
(['E2', 'E12'], [], [], 'E410', style_guide.Decision.Ignored),
119-
(['E11', 'E121'], ['E1'], [], 'E112', style_guide.Decision.Selected),
120-
(['E11', 'E121'], [], ['E1'], 'E112', style_guide.Decision.Selected),
121-
(['E111', 'E121'], ['E2'], ['E3'], 'E122',
122-
style_guide.Decision.Ignored),
123-
(['E11', 'E12'], ['E13'], [], 'E132', style_guide.Decision.Ignored),
124-
(['E1', 'E3'], ['E32'], [], 'E321', style_guide.Decision.Ignored),
125-
([], ['E2', 'E12'], [], 'E410', style_guide.Decision.Ignored),
126-
(['E4'], ['E2', 'E12', 'E41'], [], 'E410',
127-
style_guide.Decision.Ignored),
128-
(['E41'], ['E2', 'E12', 'E4'], [], 'E410',
129-
style_guide.Decision.Selected),
130-
(['E'], ['F'], [], 'E410', style_guide.Decision.Selected),
131-
(['F'], [], [], 'E410', style_guide.Decision.Ignored),
132-
(['E'], defaults.IGNORE, [], 'E126', style_guide.Decision.Selected),
133-
(['W'], defaults.IGNORE, [], 'E126', style_guide.Decision.Ignored),
134-
(['E'], defaults.IGNORE, [], 'W391', style_guide.Decision.Ignored),
135-
(['E', 'W'], ['E13'], [], 'E131', style_guide.Decision.Ignored),
136-
(defaults.SELECT, ['E13'], [], 'E131', style_guide.Decision.Ignored),
137-
(defaults.SELECT, defaults.IGNORE, ['W391'], 'E126',
138-
style_guide.Decision.Ignored),
139-
(defaults.SELECT, defaults.IGNORE, [], 'W391',
140-
style_guide.Decision.Selected),
141-
]
128+
"select_list,ignore_list,extend_ignore,error_code,expected",
129+
[
130+
(["E111", "E121"], [], [], "E111", style_guide.Decision.Selected),
131+
(["E111", "E121"], [], [], "E112", style_guide.Decision.Ignored),
132+
(["E111", "E121"], [], [], "E121", style_guide.Decision.Selected),
133+
(["E111", "E121"], [], [], "E122", style_guide.Decision.Ignored),
134+
(["E11", "E12"], [], [], "E132", style_guide.Decision.Ignored),
135+
(["E2", "E12"], [], [], "E321", style_guide.Decision.Ignored),
136+
(["E2", "E12"], [], [], "E410", style_guide.Decision.Ignored),
137+
(["E11", "E121"], ["E1"], [], "E112", style_guide.Decision.Selected),
138+
(["E11", "E121"], [], ["E1"], "E112", style_guide.Decision.Selected),
139+
(
140+
["E111", "E121"],
141+
["E2"],
142+
["E3"],
143+
"E122",
144+
style_guide.Decision.Ignored,
145+
),
146+
(["E11", "E12"], ["E13"], [], "E132", style_guide.Decision.Ignored),
147+
(["E1", "E3"], ["E32"], [], "E321", style_guide.Decision.Ignored),
148+
([], ["E2", "E12"], [], "E410", style_guide.Decision.Ignored),
149+
(
150+
["E4"],
151+
["E2", "E12", "E41"],
152+
[],
153+
"E410",
154+
style_guide.Decision.Ignored,
155+
),
156+
(
157+
["E41"],
158+
["E2", "E12", "E4"],
159+
[],
160+
"E410",
161+
style_guide.Decision.Selected,
162+
),
163+
(["E"], ["F"], [], "E410", style_guide.Decision.Selected),
164+
(["F"], [], [], "E410", style_guide.Decision.Ignored),
165+
(["E"], defaults.IGNORE, [], "E126", style_guide.Decision.Selected),
166+
(["W"], defaults.IGNORE, [], "E126", style_guide.Decision.Ignored),
167+
(["E"], defaults.IGNORE, [], "W391", style_guide.Decision.Ignored),
168+
(["E", "W"], ["E13"], [], "E131", style_guide.Decision.Ignored),
169+
(defaults.SELECT, ["E13"], [], "E131", style_guide.Decision.Ignored),
170+
(
171+
defaults.SELECT,
172+
defaults.IGNORE,
173+
["W391"],
174+
"E126",
175+
style_guide.Decision.Ignored,
176+
),
177+
(
178+
defaults.SELECT,
179+
defaults.IGNORE,
180+
[],
181+
"W391",
182+
style_guide.Decision.Selected,
183+
),
184+
],
142185
)
143-
def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
144-
expected):
186+
def test_decision_for(
187+
select_list, ignore_list, extend_ignore, error_code, expected
188+
):
145189
"""Verify we decide when to report an error."""
146190
decider = style_guide.DecisionEngine(
147-
create_options(select=select_list,
148-
ignore=ignore_list,
149-
extend_ignore=extend_ignore))
191+
create_options(
192+
select=select_list,
193+
ignore=ignore_list,
194+
extend_ignore=extend_ignore,
195+
)
196+
)
150197

151198
assert decider.decision_for(error_code) is expected
152199

153200

154201
@pytest.mark.parametrize(
155-
'select,ignore,extended_default_select,'
156-
'enabled_extensions,error_code,expected', [
157-
(defaults.SELECT, [], ['I1'], [], 'I100',
158-
style_guide.Decision.Selected),
159-
(defaults.SELECT, [], ['I1'], [], 'I201',
160-
style_guide.Decision.Ignored),
161-
(defaults.SELECT, ['I2'], ['I1'], [], 'I101',
162-
style_guide.Decision.Selected),
163-
(defaults.SELECT, ['I2'], ['I1'], [], 'I201',
164-
style_guide.Decision.Ignored),
165-
(defaults.SELECT, ['I1'], ['I10'], [], 'I101',
166-
style_guide.Decision.Selected),
167-
(defaults.SELECT, ['I10'], ['I1'], [], 'I101',
168-
style_guide.Decision.Ignored),
169-
(defaults.SELECT, [], [], ['U4'], 'U401',
170-
style_guide.Decision.Selected),
171-
(defaults.SELECT, ['U401'], [], ['U4'], 'U401',
172-
style_guide.Decision.Ignored),
173-
(defaults.SELECT, ['U401'], [], ['U4'], 'U402',
174-
style_guide.Decision.Selected),
175-
(['E', 'W'], ['E13'], [], [], 'E131', style_guide.Decision.Ignored),
176-
(['E', 'W'], ['E13'], [], [], 'E126', style_guide.Decision.Selected),
177-
(['E2'], ['E21'], [], [], 'E221', style_guide.Decision.Selected),
178-
(['E2'], ['E21'], [], [], 'E212', style_guide.Decision.Ignored),
179-
(['F', 'W'], ['C90'], ['I1'], [], 'C901',
180-
style_guide.Decision.Ignored),
181-
(['E', 'W'], ['C'], [], [], 'E131',
182-
style_guide.Decision.Selected),
183-
(defaults.SELECT, defaults.IGNORE, [], ['I'], 'I101',
184-
style_guide.Decision.Selected),
185-
(defaults.SELECT, defaults.IGNORE, ['G'], ['I'], 'G101',
186-
style_guide.Decision.Selected),
187-
(defaults.SELECT, ['G1'], ['G'], ['I'], 'G101',
188-
style_guide.Decision.Ignored),
189-
(defaults.SELECT, ['E126'], [], ['I'], 'I101',
190-
style_guide.Decision.Selected),
191-
(['E', 'W'], defaults.IGNORE, ['I'], [], 'I101',
192-
style_guide.Decision.Ignored),
202+
"select,ignore,extended_default_ignore,extended_default_select,"
203+
"enabled_extensions,error_code,expected",
204+
[
205+
(
206+
defaults.SELECT,
207+
[],
208+
[],
209+
["I1"],
210+
[],
211+
"I100",
212+
style_guide.Decision.Selected,
213+
),
214+
(
215+
defaults.SELECT,
216+
[],
217+
[],
218+
["I1"],
219+
[],
220+
"I201",
221+
style_guide.Decision.Ignored,
222+
),
223+
(
224+
defaults.SELECT,
225+
["I2"],
226+
[],
227+
["I1"],
228+
[],
229+
"I101",
230+
style_guide.Decision.Selected,
231+
),
232+
(
233+
defaults.SELECT,
234+
["I2"],
235+
[],
236+
["I1"],
237+
[],
238+
"I201",
239+
style_guide.Decision.Ignored,
240+
),
241+
(
242+
defaults.SELECT,
243+
["I1"],
244+
[],
245+
["I10"],
246+
[],
247+
"I101",
248+
style_guide.Decision.Selected,
249+
),
250+
(
251+
defaults.SELECT,
252+
["I10"],
253+
[],
254+
["I1"],
255+
[],
256+
"I101",
257+
style_guide.Decision.Ignored,
258+
),
259+
(
260+
defaults.SELECT,
261+
[],
262+
[],
263+
[],
264+
["U4"],
265+
"U401",
266+
style_guide.Decision.Selected,
267+
),
268+
(
269+
defaults.SELECT,
270+
["U401"],
271+
[],
272+
[],
273+
["U4"],
274+
"U401",
275+
style_guide.Decision.Ignored,
276+
),
277+
(
278+
defaults.SELECT,
279+
["U401"],
280+
[],
281+
[],
282+
["U4"],
283+
"U402",
284+
style_guide.Decision.Selected,
285+
),
286+
(
287+
["E", "W"],
288+
["E13"],
289+
[],
290+
[],
291+
[],
292+
"E131",
293+
style_guide.Decision.Ignored,
294+
),
295+
(
296+
["E", "W"],
297+
["E13"],
298+
[],
299+
[],
300+
[],
301+
"E126",
302+
style_guide.Decision.Selected,
303+
),
304+
(["E2"], ["E21"], [], [], [], "E221", style_guide.Decision.Selected),
305+
(["E2"], ["E21"], [], [], [], "E212", style_guide.Decision.Ignored),
306+
(
307+
["F", "W"],
308+
["C90"],
309+
[],
310+
["I1"],
311+
[],
312+
"C901",
313+
style_guide.Decision.Ignored,
314+
),
315+
(
316+
["E", "W"],
317+
["C"],
318+
[],
319+
[],
320+
[],
321+
"E131",
322+
style_guide.Decision.Selected,
323+
),
324+
(
325+
defaults.SELECT,
326+
defaults.IGNORE,
327+
[],
328+
[],
329+
["I"],
330+
"I101",
331+
style_guide.Decision.Selected,
332+
),
333+
(
334+
defaults.SELECT,
335+
defaults.IGNORE,
336+
[],
337+
["G"],
338+
["I"],
339+
"G101",
340+
style_guide.Decision.Selected,
341+
),
342+
(
343+
defaults.SELECT,
344+
["G1"],
345+
[],
346+
["G"],
347+
["I"],
348+
"G101",
349+
style_guide.Decision.Ignored,
350+
),
351+
(
352+
defaults.SELECT,
353+
["E126"],
354+
[],
355+
[],
356+
["I"],
357+
"I101",
358+
style_guide.Decision.Selected,
359+
),
360+
(
361+
["E", "W"],
362+
defaults.IGNORE,
363+
[],
364+
["I"],
365+
[],
366+
"I101",
367+
style_guide.Decision.Ignored,
368+
),
369+
(
370+
["E", "W", "I101"],
371+
defaults.IGNORE + ("I101",),
372+
["I101"],
373+
[],
374+
[],
375+
"I101",
376+
style_guide.Decision.Selected,
377+
),
378+
(
379+
["E", "W"],
380+
defaults.IGNORE + ("I101",),
381+
["I101"],
382+
[],
383+
[],
384+
"I101",
385+
style_guide.Decision.Ignored,
386+
),
193387
# TODO(sigmavirus24) Figure out how to exercise the final catch-all
194388
# return statement
195-
]
389+
],
196390
)
197391
def test_more_specific_decision_for_logic(
198-
select, ignore, extended_default_select,
199-
enabled_extensions, error_code, expected):
392+
select,
393+
ignore,
394+
extended_default_ignore,
395+
extended_default_select,
396+
enabled_extensions,
397+
error_code,
398+
expected,
399+
):
200400
"""Verify the logic of DecisionEngine.more_specific_decision_for."""
201401
decider = style_guide.DecisionEngine(
202402
create_options(
203-
select=select, ignore=ignore,
403+
select=select,
404+
ignore=ignore,
204405
extended_default_select=extended_default_select,
406+
extended_default_ignore=extended_default_ignore,
205407
enable_extensions=enabled_extensions,
206408
),
207409
)

‎tests/unit/test_style_guide.py

+65-45
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,29 @@
1212

1313
def create_options(**kwargs):
1414
"""Create and return an instance of argparse.Namespace."""
15-
kwargs.setdefault('select', [])
16-
kwargs.setdefault('extended_default_select', [])
17-
kwargs.setdefault('extend_select', [])
18-
kwargs.setdefault('ignore', [])
19-
kwargs.setdefault('extend_ignore', [])
20-
kwargs.setdefault('disable_noqa', False)
21-
kwargs.setdefault('enable_extensions', [])
22-
kwargs.setdefault('per_file_ignores', [])
15+
kwargs.setdefault("select", [])
16+
kwargs.setdefault("extended_default_select", [])
17+
kwargs.setdefault("extended_default_ignore", [])
18+
kwargs.setdefault("extend_select", [])
19+
kwargs.setdefault("ignore", [])
20+
kwargs.setdefault("extend_ignore", [])
21+
kwargs.setdefault("disable_noqa", False)
22+
kwargs.setdefault("enable_extensions", [])
23+
kwargs.setdefault("per_file_ignores", [])
2324
return argparse.Namespace(**kwargs)
2425

2526

2627
def test_handle_error_does_not_raise_type_errors():
2728
"""Verify that we handle our inputs better."""
2829
formatter = mock.create_autospec(base.BaseFormatter, instance=True)
2930
guide = style_guide.StyleGuide(
30-
create_options(select=['T111'], ignore=[]),
31+
create_options(select=["T111"], ignore=[]),
3132
formatter=formatter,
3233
stats=statistics.Statistics(),
3334
)
3435

3536
assert 1 == guide.handle_error(
36-
'T111', 'file.py', 1, None, 'error found', 'a = 1'
37+
"T111", "file.py", 1, None, "error found", "a = 1"
3738
)
3839

3940

@@ -54,13 +55,16 @@ def test_style_guide_manager():
5455
]
5556

5657

57-
@pytest.mark.parametrize('style_guide_file,filename,expected', [
58-
("first_file.py", "first_file.py", True),
59-
("first_file.py", "second_file.py", False),
60-
("sub_dir/*.py", "first_file.py", False),
61-
("sub_dir/*.py", "sub_dir/file.py", True),
62-
("sub_dir/*.py", "other_dir/file.py", False),
63-
])
58+
@pytest.mark.parametrize(
59+
"style_guide_file,filename,expected",
60+
[
61+
("first_file.py", "first_file.py", True),
62+
("first_file.py", "second_file.py", False),
63+
("sub_dir/*.py", "first_file.py", False),
64+
("sub_dir/*.py", "sub_dir/file.py", True),
65+
("sub_dir/*.py", "other_dir/file.py", False),
66+
],
67+
)
6468
def test_style_guide_applies_to(style_guide_file, filename, expected):
6569
"""Verify that we match a file to its style guide."""
6670
formatter = mock.create_autospec(base.BaseFormatter, instance=True)
@@ -69,7 +73,8 @@ def test_style_guide_applies_to(style_guide_file, filename, expected):
6973
options,
7074
formatter=formatter,
7175
stats=statistics.Statistics(),
72-
filename=style_guide_file)
76+
filename=style_guide_file,
77+
)
7378
assert guide.applies_to(filename) is expected
7479

7580

@@ -80,41 +85,56 @@ def test_style_guide_manager_pre_file_ignores_parsing():
8085
guide = style_guide.StyleGuideManager(options, formatter=formatter)
8186
assert len(guide.style_guides) == 5
8287
expected = [
83-
utils.normalize_path(p) for p in [
84-
"first_file.py", "second_file.py", "third_file.py", "sub_dir/*",
88+
utils.normalize_path(p)
89+
for p in [
90+
"first_file.py",
91+
"second_file.py",
92+
"third_file.py",
93+
"sub_dir/*",
8594
]
8695
]
8796
assert expected == [g.filename for g in guide.style_guides[1:]]
8897

8998

90-
@pytest.mark.parametrize('ignores,violation,filename,handle_error_return', [
91-
(['E1', 'E2'], 'F401', 'first_file.py', 1),
92-
(['E1', 'E2'], 'E121', 'first_file.py', 0),
93-
(['E1', 'E2'], 'F401', 'second_file.py', 0),
94-
(['E1', 'E2'], 'F401', 'third_file.py', 1),
95-
(['E1', 'E2'], 'E311', 'third_file.py', 0),
96-
(['E1', 'E2'], 'F401', 'sub_dir/file.py', 0),
97-
])
98-
def test_style_guide_manager_pre_file_ignores(ignores, violation, filename,
99-
handle_error_return):
99+
@pytest.mark.parametrize(
100+
"ignores,violation,filename,handle_error_return",
101+
[
102+
(["E1", "E2"], "F401", "first_file.py", 1),
103+
(["E1", "E2"], "E121", "first_file.py", 0),
104+
(["E1", "E2"], "F401", "second_file.py", 0),
105+
(["E1", "E2"], "F401", "third_file.py", 1),
106+
(["E1", "E2"], "E311", "third_file.py", 0),
107+
(["E1", "E2"], "F401", "sub_dir/file.py", 0),
108+
],
109+
)
110+
def test_style_guide_manager_pre_file_ignores(
111+
ignores, violation, filename, handle_error_return
112+
):
100113
"""Verify how the StyleGuideManager creates a default style guide."""
101114
formatter = mock.create_autospec(base.BaseFormatter, instance=True)
102-
options = create_options(ignore=ignores,
103-
select=['E', 'F', 'W'],
104-
per_file_ignores=PER_FILE_IGNORES_UNPARSED)
115+
options = create_options(
116+
ignore=ignores,
117+
select=["E", "F", "W"],
118+
per_file_ignores=PER_FILE_IGNORES_UNPARSED,
119+
)
105120
guide = style_guide.StyleGuideManager(options, formatter=formatter)
106-
assert (guide.handle_error(violation, filename, 1, 1, "Fake text")
107-
== handle_error_return)
108-
109-
110-
@pytest.mark.parametrize('filename,expected', [
111-
('first_file.py', utils.normalize_path('first_file.py')),
112-
('second_file.py', utils.normalize_path('second_file.py')),
113-
('third_file.py', utils.normalize_path('third_file.py')),
114-
('fourth_file.py', None),
115-
('sub_dir/__init__.py', utils.normalize_path('sub_dir/*')),
116-
('other_dir/__init__.py', None),
117-
])
121+
assert (
122+
guide.handle_error(violation, filename, 1, 1, "Fake text")
123+
== handle_error_return
124+
)
125+
126+
127+
@pytest.mark.parametrize(
128+
"filename,expected",
129+
[
130+
("first_file.py", utils.normalize_path("first_file.py")),
131+
("second_file.py", utils.normalize_path("second_file.py")),
132+
("third_file.py", utils.normalize_path("third_file.py")),
133+
("fourth_file.py", None),
134+
("sub_dir/__init__.py", utils.normalize_path("sub_dir/*")),
135+
("other_dir/__init__.py", None),
136+
],
137+
)
118138
def test_style_guide_manager_style_guide_for(filename, expected):
119139
"""Verify the style guide selection function."""
120140
formatter = mock.create_autospec(base.BaseFormatter, instance=True)

0 commit comments

Comments
 (0)
Please sign in to comment.