-
Notifications
You must be signed in to change notification settings - Fork 0
/
UtilFuncs.py
40 lines (27 loc) · 1.04 KB
/
UtilFuncs.py
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
30
31
32
33
34
35
36
37
38
39
from typing import List, Union
import libcst as cst
from libcst import matchers as m
def delete_duplicates(arr: List):
return list(set(arr))
def split_attribute(node: Union[cst.Attribute, cst.Name, cst.BaseExpression]) -> List[str]:
if m.matches(node, m.Attribute()):
node = cst.ensure_type(node, cst.Attribute)
res = split_attribute(node.value)
res.append(node.attr.value)
return res
elif m.matches(node, m.Call()):
node = cst.ensure_type(node, cst.Call)
res = split_attribute(node.func)
if m.matches(node.func, m.Name()):
node_func = cst.ensure_type(node.func, cst.Name)
res.append(node_func.value)
return res
else:
return [node.value]
def get_function_decorators(node: cst.FunctionDef) -> List[str]:
decorator_names = []
for el in node.decorators:
if m.matches(el.decorator, m.Name()):
name = cst.ensure_type(el.decorator, cst.Name)
decorator_names.append(name.value)
return decorator_names