@@ -1389,25 +1389,16 @@ def _find_orelse_keyword(
1389
1389
if not self ._data or not node .orelse :
1390
1390
return None , None
1391
1391
1392
- end_lineno = node .orelse [0 ].lineno
1393
-
1394
- def find_keyword (begin : int , end : int ) -> Tuple [Optional [int ], Optional [int ]]:
1395
- # pylint: disable-next=unsubscriptable-object
1396
- data = "\n " .join (self ._data [begin :end ])
1397
-
1398
- try :
1399
- tokens = list (generate_tokens (StringIO (data ).readline ))
1400
- except tokenize .TokenError :
1401
- # If we cut-off in the middle of multi-line if statements we
1402
- # generate a TokenError here. We just keep trying
1403
- # until the multi-line statement is closed.
1404
- return find_keyword (begin , end + 1 )
1405
- for t in tokens [::- 1 ]:
1406
- if t .type == token .NAME and t .string in {"else" , "elif" }:
1407
- return node .lineno + t .start [0 ] - 1 , t .start [1 ]
1408
- raise AssertionError () # pragma: no cover # Shouldn't be reached.
1409
-
1410
- return find_keyword (node .lineno - 1 , end_lineno )
1392
+ start = node .orelse [0 ].lineno
1393
+
1394
+ # pylint: disable-next=unsubscriptable-object
1395
+ for index , line in enumerate (self ._data [start ::- 1 ]):
1396
+ if line .rstrip ().startswith ("else" ):
1397
+ return start - index + 1 , line .index ("else" )
1398
+ if line .rstrip ().startswith ("elif" ):
1399
+ return start - index + 1 , line .index ("elif" )
1400
+
1401
+ return None , None
1411
1402
1412
1403
def visit_if (self , node : "ast.If" , parent : NodeNG ) -> nodes .If :
1413
1404
"""visit an If node by returning a fresh instance of it"""
0 commit comments