@@ -768,7 +768,7 @@ def leave_Yield(
768768 # try can jump into any except or into the finally* at any point during it's
769769 # execution so we need to make sure except & finally can handle worst-case
770770 # * 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 ):
772772 if not self .async_function :
773773 return
774774 self .save_state (node , "try_state" , copy = True )
@@ -784,39 +784,41 @@ def visit_Try(self, node: cst.Try):
784784 Statement ("yield" , pos .line , pos .column ) # type: ignore
785785 )
786786
787- def leave_Try_body (self , node : cst .Try ):
787+ def leave_Try_body (self , node : cst .Try | cst . TryStar ):
788788 # save state at end of try for entering else
789789 self .try_state .try_checkpoint = self .uncheckpointed_statements
790790
791791 # check that all except handlers checkpoint (await or most likely raise)
792792 self .try_state .except_uncheckpointed_statements = set ()
793793
794- def visit_ExceptHandler (self , node : cst .ExceptHandler ):
794+ def visit_ExceptHandler (self , node : cst .ExceptHandler | cst . ExceptStarHandler ):
795795 # enter with worst case of try
796796 self .uncheckpointed_statements = (
797797 self .try_state .body_uncheckpointed_statements .copy ()
798798 )
799799
800800 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
803805 self .try_state .except_uncheckpointed_statements .update (
804806 self .uncheckpointed_statements
805807 )
806808 return updated_node
807809
808- def visit_Try_orelse (self , node : cst .Try ):
810+ def visit_Try_orelse (self , node : cst .Try | cst . TryStar ):
809811 # check else
810812 # if else runs it's after all of try, so restore state to back then
811813 self .uncheckpointed_statements = self .try_state .try_checkpoint
812814
813- def leave_Try_orelse (self , node : cst .Try ):
815+ def leave_Try_orelse (self , node : cst .Try | cst . TryStar ):
814816 # checkpoint if else checkpoints, and all excepts checkpoint
815817 self .uncheckpointed_statements .update (
816818 self .try_state .except_uncheckpointed_statements
817819 )
818820
819- def visit_Try_finalbody (self , node : cst .Try ):
821+ def visit_Try_finalbody (self , node : cst .Try | cst . TryStar ):
820822 if node .finalbody :
821823 self .try_state .added = (
822824 self .try_state .body_uncheckpointed_statements .difference (
@@ -835,14 +837,26 @@ def visit_Try_finalbody(self, node: cst.Try):
835837 ):
836838 self .uncheckpointed_statements .update (self .try_state .added )
837839
838- def leave_Try_finalbody (self , node : cst .Try ):
840+ def leave_Try_finalbody (self , node : cst .Try | cst . TryStar ):
839841 if node .finalbody :
840842 self .uncheckpointed_statements .difference_update (self .try_state .added )
841843
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 :
843847 self .restore_state (original_node )
844848 return updated_node
845849
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+
846860 def leave_If_test (self , node : cst .If | cst .IfExp ) -> None :
847861 if not self .async_function :
848862 return
0 commit comments