Skip to content

Commit f2626f6

Browse files
committed
also fix map in B023. update comments
1 parent e16ad24 commit f2626f6

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

bugbear.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ def check_for_b023(self, loop_node): # noqa: C901
592592
# check for filter&reduce
593593
if (
594594
isinstance(node.func, ast.Name)
595-
and node.func.id in ("filter", "reduce")
595+
and node.func.id in ("filter", "reduce", "map")
596596
) or (
597597
isinstance(node.func, ast.Attribute)
598598
and node.func.attr == "reduce"
@@ -610,11 +610,14 @@ def check_for_b023(self, loop_node): # noqa: C901
610610
):
611611
safe_functions.append(keyword.value)
612612

613+
# mark `return lambda: x` as safe
614+
# does not (currently) check inner lambdas in a returned expression
615+
# e.g. `return (lambda: x, )
613616
if isinstance(node, ast.Return):
614617
if isinstance(node.value, FUNCTION_NODES):
615618
safe_functions.append(node.value)
616-
# TODO: ast.walk(node) and mark all child nodes safe?
617619

620+
# find unsafe functions
618621
if isinstance(node, FUNCTION_NODES) and node not in safe_functions:
619622
argnames = {
620623
arg.arg for arg in ast.walk(node.args) if isinstance(arg, ast.arg)

tests/b023.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ def myfunc(x):
121121
max(range(3), key=lambda y: x * y)
122122
sorted(range(3), key=lambda y: x * y)
123123

124+
any(map(lambda y: x < y, range(3)))
125+
all(map(lambda y: x < y, range(3)))
126+
set(map(lambda y: x < y, range(3)))
127+
list(map(lambda y: x < y, range(3)))
128+
tuple(map(lambda y: x < y, range(3)))
129+
sorted(map(lambda y: x < y, range(3)))
130+
frozenset(map(lambda y: x < y, range(3)))
131+
124132
any(filter(lambda y: x < y, range(3)))
125133
all(filter(lambda y: x < y, range(3)))
126134
set(filter(lambda y: x < y, range(3)))
@@ -156,7 +164,7 @@ def iter_f(names):
156164
return lambda: name if exists(name) else None
157165

158166
if foo(name):
159-
return [lambda: name] # false alarm, should be fixed?
167+
return [lambda: name] # known false alarm
160168

161169
if False:
162170
return [lambda: i for i in range(3)] # error

tests/test_bugbear.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,8 @@ def test_b023(self):
356356
B023(115, 36, vars=("x",)),
357357
B023(116, 37, vars=("x",)),
358358
B023(117, 36, vars=("x",)),
359-
B023(159, 28, vars=("name",)), # false alarm?
360-
B023(162, 28, vars=("i",)),
359+
B023(167, 28, vars=("name",)), # known false alarm
360+
B023(170, 28, vars=("i",)),
361361
)
362362
self.assertEqual(errors, expected)
363363

0 commit comments

Comments
 (0)