/
subexpr.py
179 lines (130 loc) · 5.11 KB
/
subexpr.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
"""Find all subexpressions of an AST node."""
from typing import List
from mypy.nodes import (
Expression, Node, MemberExpr, YieldFromExpr, YieldExpr, CallExpr, OpExpr, ComparisonExpr,
SliceExpr, CastExpr, RevealExpr, UnaryExpr, ListExpr, TupleExpr, DictExpr, SetExpr,
IndexExpr, GeneratorExpr, ListComprehension, SetComprehension, DictionaryComprehension,
ConditionalExpr, TypeApplication, LambdaExpr, StarExpr, BackquoteExpr, AwaitExpr,
AssignmentExpr, AssertTypeExpr,
)
from mypy.traverser import TraverserVisitor
def get_subexpressions(node: Node) -> List[Expression]:
visitor = SubexpressionFinder()
node.accept(visitor)
return visitor.expressions
class SubexpressionFinder(TraverserVisitor):
def __init__(self) -> None:
self.expressions: List[Expression] = []
def visit_int_expr(self, o: Expression) -> None:
self.add(o)
def visit_name_expr(self, o: Expression) -> None:
self.add(o)
def visit_float_expr(self, o: Expression) -> None:
self.add(o)
def visit_str_expr(self, o: Expression) -> None:
self.add(o)
def visit_bytes_expr(self, o: Expression) -> None:
self.add(o)
def visit_unicode_expr(self, o: Expression) -> None:
self.add(o)
def visit_complex_expr(self, o: Expression) -> None:
self.add(o)
def visit_ellipsis(self, o: Expression) -> None:
self.add(o)
def visit_super_expr(self, o: Expression) -> None:
self.add(o)
def visit_type_var_expr(self, o: Expression) -> None:
self.add(o)
def visit_type_alias_expr(self, o: Expression) -> None:
self.add(o)
def visit_namedtuple_expr(self, o: Expression) -> None:
self.add(o)
def visit_typeddict_expr(self, o: Expression) -> None:
self.add(o)
def visit__promote_expr(self, o: Expression) -> None:
self.add(o)
def visit_newtype_expr(self, o: Expression) -> None:
self.add(o)
def visit_member_expr(self, e: MemberExpr) -> None:
self.add(e)
super().visit_member_expr(e)
def visit_yield_from_expr(self, e: YieldFromExpr) -> None:
self.add(e)
super().visit_yield_from_expr(e)
def visit_yield_expr(self, e: YieldExpr) -> None:
self.add(e)
super().visit_yield_expr(e)
def visit_call_expr(self, e: CallExpr) -> None:
self.add(e)
super().visit_call_expr(e)
def visit_op_expr(self, e: OpExpr) -> None:
self.add(e)
super().visit_op_expr(e)
def visit_comparison_expr(self, e: ComparisonExpr) -> None:
self.add(e)
super().visit_comparison_expr(e)
def visit_slice_expr(self, e: SliceExpr) -> None:
self.add(e)
super().visit_slice_expr(e)
def visit_cast_expr(self, e: CastExpr) -> None:
self.add(e)
super().visit_cast_expr(e)
def visit_assert_type_expr(self, e: AssertTypeExpr) -> None:
self.add(e)
super().visit_assert_type_expr(e)
def visit_reveal_expr(self, e: RevealExpr) -> None:
self.add(e)
super().visit_reveal_expr(e)
def visit_assignment_expr(self, e: AssignmentExpr) -> None:
self.add(e)
super().visit_assignment_expr(e)
def visit_unary_expr(self, e: UnaryExpr) -> None:
self.add(e)
super().visit_unary_expr(e)
def visit_list_expr(self, e: ListExpr) -> None:
self.add(e)
super().visit_list_expr(e)
def visit_tuple_expr(self, e: TupleExpr) -> None:
self.add(e)
super().visit_tuple_expr(e)
def visit_dict_expr(self, e: DictExpr) -> None:
self.add(e)
super().visit_dict_expr(e)
def visit_set_expr(self, e: SetExpr) -> None:
self.add(e)
super().visit_set_expr(e)
def visit_index_expr(self, e: IndexExpr) -> None:
self.add(e)
super().visit_index_expr(e)
def visit_generator_expr(self, e: GeneratorExpr) -> None:
self.add(e)
super().visit_generator_expr(e)
def visit_dictionary_comprehension(self, e: DictionaryComprehension) -> None:
self.add(e)
super().visit_dictionary_comprehension(e)
def visit_list_comprehension(self, e: ListComprehension) -> None:
self.add(e)
super().visit_list_comprehension(e)
def visit_set_comprehension(self, e: SetComprehension) -> None:
self.add(e)
super().visit_set_comprehension(e)
def visit_conditional_expr(self, e: ConditionalExpr) -> None:
self.add(e)
super().visit_conditional_expr(e)
def visit_type_application(self, e: TypeApplication) -> None:
self.add(e)
super().visit_type_application(e)
def visit_lambda_expr(self, e: LambdaExpr) -> None:
self.add(e)
super().visit_lambda_expr(e)
def visit_star_expr(self, e: StarExpr) -> None:
self.add(e)
super().visit_star_expr(e)
def visit_backquote_expr(self, e: BackquoteExpr) -> None:
self.add(e)
super().visit_backquote_expr(e)
def visit_await_expr(self, e: AwaitExpr) -> None:
self.add(e)
super().visit_await_expr(e)
def add(self, e: Expression) -> None:
self.expressions.append(e)