@@ -768,7 +768,7 @@ def leave_Yield(
768
768
# try can jump into any except or into the finally* at any point during it's
769
769
# execution so we need to make sure except & finally can handle worst-case
770
770
# * unless there's a bare except / except BaseException - not implemented.
771
- def visit_Try (self , node : cst .Try ):
771
+ def visit_Try (self , node : cst .Try | cst . TryStar ):
772
772
if not self .async_function :
773
773
return
774
774
self .save_state (node , "try_state" , copy = True )
@@ -784,39 +784,41 @@ def visit_Try(self, node: cst.Try):
784
784
Statement ("yield" , pos .line , pos .column ) # type: ignore
785
785
)
786
786
787
- def leave_Try_body (self , node : cst .Try ):
787
+ def leave_Try_body (self , node : cst .Try | cst . TryStar ):
788
788
# save state at end of try for entering else
789
789
self .try_state .try_checkpoint = self .uncheckpointed_statements
790
790
791
791
# check that all except handlers checkpoint (await or most likely raise)
792
792
self .try_state .except_uncheckpointed_statements = set ()
793
793
794
- def visit_ExceptHandler (self , node : cst .ExceptHandler ):
794
+ def visit_ExceptHandler (self , node : cst .ExceptHandler | cst . ExceptStarHandler ):
795
795
# enter with worst case of try
796
796
self .uncheckpointed_statements = (
797
797
self .try_state .body_uncheckpointed_statements .copy ()
798
798
)
799
799
800
800
def leave_ExceptHandler (
801
- self , original_node : cst .ExceptHandler , updated_node : cst .ExceptHandler
802
- ) -> cst .ExceptHandler :
801
+ self ,
802
+ original_node : cst .ExceptHandler | cst .ExceptStarHandler ,
803
+ updated_node : cst .ExceptHandler | cst .ExceptStarHandler ,
804
+ ) -> Any : # not worth creating a TypeVar to handle correctly
803
805
self .try_state .except_uncheckpointed_statements .update (
804
806
self .uncheckpointed_statements
805
807
)
806
808
return updated_node
807
809
808
- def visit_Try_orelse (self , node : cst .Try ):
810
+ def visit_Try_orelse (self , node : cst .Try | cst . TryStar ):
809
811
# check else
810
812
# if else runs it's after all of try, so restore state to back then
811
813
self .uncheckpointed_statements = self .try_state .try_checkpoint
812
814
813
- def leave_Try_orelse (self , node : cst .Try ):
815
+ def leave_Try_orelse (self , node : cst .Try | cst . TryStar ):
814
816
# checkpoint if else checkpoints, and all excepts checkpoint
815
817
self .uncheckpointed_statements .update (
816
818
self .try_state .except_uncheckpointed_statements
817
819
)
818
820
819
- def visit_Try_finalbody (self , node : cst .Try ):
821
+ def visit_Try_finalbody (self , node : cst .Try | cst . TryStar ):
820
822
if node .finalbody :
821
823
self .try_state .added = (
822
824
self .try_state .body_uncheckpointed_statements .difference (
@@ -835,14 +837,26 @@ def visit_Try_finalbody(self, node: cst.Try):
835
837
):
836
838
self .uncheckpointed_statements .update (self .try_state .added )
837
839
838
- def leave_Try_finalbody (self , node : cst .Try ):
840
+ def leave_Try_finalbody (self , node : cst .Try | cst . TryStar ):
839
841
if node .finalbody :
840
842
self .uncheckpointed_statements .difference_update (self .try_state .added )
841
843
842
- def leave_Try (self , original_node : cst .Try , updated_node : cst .Try ) -> cst .Try :
844
+ def leave_Try (
845
+ self , original_node : cst .Try | cst .TryStar , updated_node : cst .Try | cst .TryStar
846
+ ) -> cst .Try | cst .TryStar :
843
847
self .restore_state (original_node )
844
848
return updated_node
845
849
850
+ visit_TryStar = visit_Try
851
+ leave_TryStar = leave_Try
852
+ leave_TryStar_body = leave_Try_body
853
+ visit_TryStar_orelse = visit_Try_orelse
854
+ leave_TryStar_orelse = leave_Try_orelse
855
+ visit_TryStar_finalbody = visit_Try_finalbody
856
+ leave_TryStar_finalbody = leave_Try_finalbody
857
+ visit_ExceptStarHandler = visit_ExceptHandler
858
+ leave_ExceptStarHandler = leave_ExceptHandler
859
+
846
860
def leave_If_test (self , node : cst .If | cst .IfExp ) -> None :
847
861
if not self .async_function :
848
862
return
0 commit comments