Skip to content

Commit 3614150

Browse files
authoredApr 15, 2021
Merge pull request #1317 from PyCQA/fix-extend-default-ignore
Fix bug for plugins using extend_default_ignore
2 parents 992bb77 + 2bb0308 commit 3614150

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.