@@ -117,31 +117,36 @@ def _dedent_lambda_at_token(self, token: Token):
117
117
yield Token .new_borrow_pos (self .DEDENT_type , "N/A" , token )
118
118
119
119
def _current_token_is_just_after_lambda_header (self ):
120
- # TODO: handle newlines etc. in between tokens
121
- return (
122
- len (self .processed_tokens ) > 0
123
- and self .processed_tokens [- 2 ].type == "COLON"
124
- and self .processed_tokens [- 3 ].type == "RPAR"
125
- and self .processed_tokens [- 4 ].type == "LPAR"
126
- and (
127
- self .processed_tokens [- 5 ].type == "FUNC"
128
- or (
129
- self .processed_tokens [- 5 ].type == "NAME"
130
- and self .processed_tokens [- 6 ].type == "FUNC"
131
- )
132
- )
133
- ) or (
134
- len (self .processed_tokens ) > 0
135
- and self .processed_tokens [- 2 ].type == "COLON"
136
- and self .processed_tokens [- 3 ].type == "TYPE_HINT"
137
- and self .processed_tokens [- 4 ].value == "->"
138
- and self .processed_tokens [- 5 ].type == "RPAR"
139
- and self .processed_tokens [- 6 ].type == "LPAR"
140
- and (
141
- self .processed_tokens [- 7 ].type == "FUNC"
142
- or (
143
- self .processed_tokens [- 7 ].type == "NAME"
144
- and self .processed_tokens [- 8 ].type == "FUNC"
145
- )
146
- )
147
- )
120
+ extra_rpars = [0 ]
121
+ pattern_functions = [
122
+ lambda t : t .type == "COLON" ,
123
+ lambda t : t .type == "RPAR" ,
124
+ lambda t : t .type == "LPAR" and extra_rpars [0 ] == 0 ,
125
+ lambda t : t .type == "FUNC" ,
126
+ ]
127
+
128
+ def lpar_accept_function (token : Token ) -> bool :
129
+ if token .type == "RPAR" :
130
+ extra_rpars [0 ] += 1
131
+ elif token .type == "LPAR" :
132
+ if extra_rpars [0 ] <= 0 :
133
+ return False
134
+ extra_rpars [0 ] -= 1
135
+ return True
136
+
137
+ accept_functions = [
138
+ lambda t : t .type == "_NL" ,
139
+ lambda t : t .type in ["_NL" , "TYPE_HINT" ] or t .value == "->" ,
140
+ lpar_accept_function ,
141
+ lambda t : t .type in ["_NL" , "NAME" ],
142
+ ]
143
+ i = 0
144
+ for processed_token in reversed (self .processed_tokens ):
145
+ if i >= len (pattern_functions ):
146
+ return True
147
+ if pattern_functions [i ](processed_token ):
148
+ i += 1
149
+ continue
150
+ if not accept_functions [i ](processed_token ):
151
+ return False
152
+ return i >= len (pattern_functions )
0 commit comments