10000 restrict test to only trigger on while loop with a single statement i… · python-trio/flake8-async@5bafeaa · GitHub
[go: up one dir, main page]

Skip to content

Commit 5bafeaa

Browse files
jakkdlZac-HD
authored andcommitted
restrict test to only trigger on while loop with a single statement in body
1 parent 99b7309 commit 5bafeaa

File tree

2 files changed

+54
-45
lines changed

2 files changed

+54
-45
lines changed

flake8_trio.py

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ def __init__(self):
127127
super().__init__()
128128
self._yield_is_error = False
129129
self._safe_decorator = False
130-
self._inside_loop: bool = False
131130

132131
def visit_With(self, node: Union[ast.With, ast.AsyncWith]):
133132
self.check_for_trio100(node)
@@ -200,24 +199,16 @@ def check_109(self, args: ast.arguments):
200199
if arg.arg == "timeout":
201200
self.error(TRIO109, arg.lineno, arg.col_offset)
202201

203-
# 301
204-
def visit_While(self, node: Union[ast.While, ast.For, ast.AsyncFor]):
205-
outer = self._inside_loop
206-
self._inside_loop = True
202+
def visit_While(self, node: ast.While):
203+
self.check_for_301(node)
207204
self.generic_visit(node)
208-
self._inside_loop = outer
209205

210-
visit_For = visit_While
211-
visit_AsyncFor = visit_While
212-
213-
def visit_Await(self, node: ast.Await):
206+
def check_for_301(self, node: ast.While):
214207
if (
215-
self._inside_loop
216-
and isinstance(node.value, ast.Call)
217-
and isinstance(node.value.func, ast.Attribute)
218-
and node.value.func.attr == "sleep"
219-
and isinstance(node.value.func.value, ast.Name)
220-
and node.value.func.value.id == "trio"
208+
len(node.body) == 1
209+
and isinstance(node.body[0], ast.Expr)
210+
and isinstance(node.body[0].value, ast.Await)
211+
and get_trio_scope(node.body[0].value.value, "sleep", "sleep_until")
221212
):
222213
self.error(TRIO301, node.lineno, node.col_offset)
223214

tests/trio301.py

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,69 @@
22
import trio as noerror
33

44

5-
async def sleep():
6-
return
5+
async def foo():
6+
# only trigger on while loop with body being exactly one sleep[_until] statement
7+
while ...: # error: 4
8+
await trio.sleep()
79

10+
while ...: # error: 4
11+
await trio.sleep_until()
812

9-
async def foo():
10-
await trio.sleep() # ok
11-
await sleep()
12-
await noerror.sleep()
13-
await trio.Event()
13+
# nested
14+
15+
while ...: # safe
16+
while ...: # error: 8
17+
await trio.sleep()
18+
await trio.sleep()
1419

20+
while ...: # safe
21+
while ...: # error: 8
22+
await trio.sleep()
23+
24+
### the rest are all safe
25+
26+
# don't trigger on bodies with more than one statement
1527
while ...:
16-
await trio.sleep() # error: 8
17-
await trio.sleep() # error: 8
18-
await sleep()
19-
await noerror.sleep()
20-
await trio.Event()
28+
await trio.sleep()
29+
await trio.sleep()
2130

22-
for _ in "":
23-
await trio.sleep() # error: 8
24-
await sleep()
31+
while ...: # safe
32+
...
33+
await trio.sleep()
34+
35+
while ...:
36+
await trio.sleep()
37+
await trio.sleep_until()
38+
39+
# check library name
40+
while ...:
2541
await noerror.sleep()
26-
await trio.Event()
2742

28-
async for _ in trio.blah:
29-
await trio.sleep() # error: 8
43+
async def sleep():
44+
...
45+
46+
while ...:
3047
await sleep()
31-
await noerror.sleep()
32-
await trio.Event()
3348

49+
# check function name
3450
while ...:
35-
await trio.sleep() # error: 8
51+
await trio.sleepies()
3652

37-
async def blah():
38-
await trio.sleep()
53+
# don't trigger on [async] for
54+
for _ in "":
55+
await trio.sleep()
3956

40-
await trio.sleep() # error: 8
57+
async for _ in trio.blah:
58+
await trio.sleep()
4159

4260
while ...:
43-
while ...:
44-
await trio.sleep() # error: 12
45-
await trio.sleep() # error: 8
61+
62+
async def blah():
63+
await trio.sleep()
4664

4765
while ...:
4866
if ...:
49-
await trio.sleep() # error: 12
67+
await trio.sleep()
5068

51-
while await trio.sleep(): # error: 10
69+
while await trio.sleep():
5270
...

0 commit comments

Comments
 (0)
0