-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfind_command_issues.py
More file actions
29 lines (28 loc) · 1.09 KB
/
find_command_issues.py
File metadata and controls
29 lines (28 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import ast
from pathlib import Path
p=Path(r"C:/Users/User/Downloads/ForzeOS System.py")
s=p.read_text(encoding='utf-8')
issues=[]
class Visitor(ast.NodeVisitor):
def visit_Call(self,node):
# check keywords
for kw in node.keywords:
if kw.arg=='command':
val=kw.value
if isinstance(val, ast.Constant):
issues.append((node.lineno, ast.dump(val)))
elif isinstance(val, ast.Name):
# could be variable; record name
issues.append((node.lineno, 'NAME:'+val.id))
elif isinstance(val, ast.Lambda):
pass
elif isinstance(val, ast.Call):
# command=make_cmd(...) pattern -- it's a call returning a callable; mark as maybe ok
issues.append((node.lineno, 'CALL:'+ast.dump(val.func)))
else:
issues.append((node.lineno, type(val).__name__))
self.generic_visit(node)
Visitor().visit(ast.parse(s))
for lineno,desc in issues:
print(lineno, desc)
print('done')