
    %^gh                       d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ ddl\m]Z] e ed       G d	 d
e]d                       Z^ G d de^      Z_ G d de^      Z`d$dZa G d de^      Zb G d deb      Zcd$dZd G d deb      Zed$dZf G d de^      Zgd%dZh G d deb      Zid&dZj G d d eb      Zkd'd!Zl G d" d#eb      Zmy)(zGeneric node traverser visitor    )annotations)
mypyc_attrtrait)LREVEAL_TYPE
AssertStmtAssertTypeExprAssignmentExprAssignmentStmt	AwaitExprBlock	BreakStmt	BytesExprCallExprCastExprClassDefComparisonExprComplexExprConditionalExprContinueStmt	DecoratorDelStmtDictExprDictionaryComprehensionEllipsisExprEnumCallExpr
ExpressionExpressionStmt	FloatExprForStmtFuncBaseFuncDefFuncItemGeneratorExpr
GlobalDeclIfStmtImport	ImportAll
ImportFrom	IndexExprIntExpr
LambdaExprListComprehensionListExpr	MatchStmt
MemberExprMypyFileNamedTupleExprNameExprNewTypeExprNodeNonlocalDeclOperatorAssignmentStmtOpExprOverloadedFuncDefParamSpecExprPassStmt	RaiseStmt
ReturnStmt
RevealExprSetComprehensionSetExpr	SliceExprStarExprStrExpr	SuperExprTryStmt	TupleExpr	TypeAliasTypeAliasExprTypeAliasStmtTypeApplicationTypedDictExprTypeVarExprTypeVarTupleExpr	UnaryExpr	WhileStmtWithStmt	YieldExprYieldFromExpr)	AsPatternClassPatternMappingPattern	OrPatternSequencePatternSingletonPatternStarredPatternValuePattern)NodeVisitorT)allow_interpreted_subclassesc                     e Zd ZdZd=dZd>dZd?dZd@dZdAdZdBdZ	dCdZ
dDd	ZdEd
ZdFdZdGdZdHdZdIdZdJdZdKdZdLdZdMdZdNdZdOdZdPdZdQdZdRdZdSdZdTdZdUdZdVdZdWdZdXdZdYdZ dZdZ!d[d Z"d\d!Z#d]d"Z$d^d#Z%d_d$Z&d`d%Z'dad&Z(dbd'Z)dcd(Z*ddd)Z+ded*Z,dfd+Z-dgd,Z.dhd-Z/did.Z0djd/Z1dkd0Z2dld1Z3dmd2Z4dnd3Z5dod4Z6dpd5Z7dqd6Z8drd7Z9dsd8Z:dtd9Z;dud:Z<dvd;Z=y<)wTraverserVisitora)  A parse tree visitor that traverses the parse tree during visiting.

    It does not perform any actions outside the traversal. Subclasses
    should override visit methods to perform actions during
    traversal. Calling the superclass method allows reusing the
    traversal implementation.
    c                     y N selfs    .lib/python3.12/site-packages/mypy/traverser.py__init__zTraverserVisitor.__init__m   s        c                H    |j                   D ]  }|j                  |         y r_   )defsaccept)rb   ods      rc   visit_mypy_filez TraverserVisitor.visit_mypy_filer   s    AHHTN re   c                H    |j                   D ]  }|j                  |         y r_   )bodyrh   )rb   blockss      rc   visit_blockzTraverserVisitor.visit_blockv   s    AHHTN re   c                   |j                   ]|j                   D ]"  }|j                  }||j                  |        $ |j                   D ]  }| j                  |j                          |j
                  j                  |        y r_   )	argumentsinitializerrh   	visit_varvariablerm   )rb   ri   arginits       rc   
visit_funczTraverserVisitor.visit_funcz   sg    ;;"{{#KK% #
 {{s||, # 	
dre   c                &    | j                  |       y r_   rx   rb   ri   s     rc   visit_func_defzTraverserVisitor.visit_func_def       re   c                    |j                   D ]  }|j                  |         |j                  r|j                  j                  |        y y r_   )itemsrh   implrb   ri   items      rc   visit_overloaded_func_defz*TraverserVisitor.visit_overloaded_func_def   s8    GGDKK 66FFMM$ re   c                   |j                   D ]  }|j                  |         |j                  D ]  }|j                  |         |j                  r|j                  j                  |        |j                  j                         D ]  }|j                  |         |j                  j                  |        |j                  r|j                  j                  |        y y r_   )
decoratorsrh   base_type_exprs	metaclasskeywordsvaluesrg   analyzed)rb   ri   rj   basevs        rc   visit_class_defz TraverserVisitor.visit_class_def   s    AHHTN %%DKK &;;KKt$""$AHHTN %	d::JJd# re   c                    |j                   j                  |        |j                  j                  |        |j                  D ]  }|j                  |         y r_   )funcrh   varr   )rb   ri   	decorators      rc   visit_decoratorz TraverserVisitor.visit_decorator   s>    	d	TIT" &re   c                :    |j                   j                  |        y r_   exprrh   r{   s     rc   visit_expression_stmtz&TraverserVisitor.visit_expression_stmt       	dre   c                ~    |j                   j                  |        |j                  D ]  }|j                  |         y r_   )rvaluerh   lvalues)rb   ri   ls      rc   visit_assignment_stmtz&TraverserVisitor.visit_assignment_stmt   s+    	AHHTN re   c                p    |j                   j                  |        |j                  j                  |        y r_   )r   rh   lvaluer{   s     rc   visit_operator_assignment_stmtz/TraverserVisitor.visit_operator_assignment_stmt   s"    		re   c                    |j                   j                  |        |j                  j                  |        |j                  r|j                  j                  |        y y r_   r   rh   rm   	else_bodyr{   s     rc   visit_while_stmtz!TraverserVisitor.visit_while_stmt   s@    	d	d;;KKt$ re   c                    |j                   j                  |        |j                  j                  |        |j                  j                  |        |j                  r|j                  j                  |        y y r_   )indexrh   r   rm   r   r{   s     rc   visit_for_stmtzTraverserVisitor.visit_for_stmt   sP    	t	d	d;;KKt$ re   c                T    |j                   |j                   j                  |        y y r_   r   r{   s     rc   visit_return_stmtz"TraverserVisitor.visit_return_stmt   !    66FFMM$ re   c                    |j                   |j                   j                  |        |j                  |j                  j                  |        y y r_   )r   rh   msgr{   s     rc   visit_assert_stmtz"TraverserVisitor.visit_assert_stmt   s;    66FFMM$55EELL re   c                T    |j                   |j                   j                  |        y y r_   r   r{   s     rc   visit_del_stmtzTraverserVisitor.visit_del_stmt   r   re   c                    |j                   D ]  }|j                  |         |j                  D ]  }|j                  |         |j                  r|j                  j                  |        y y r_   r   )rb   ri   ebs       rc   visit_if_stmtzTraverserVisitor.visit_if_stmt   sR    AHHTN AHHTN ;;KKt$ re   c                    |j                   |j                   j                  |        |j                  |j                  j                  |        y y r_   )r   rh   	from_exprr{   s     rc   visit_raise_stmtz!TraverserVisitor.visit_raise_stmt   s=    66FFMM$;;"KKt$ #re   c                   |j                   j                  |        t        t        |j                              D ]B  }|j                  |   }||j                  |        |j
                  |   j                  |        D |j                  D ]  }||j                  |         |j                  |j                  j                  |        |j                  |j                  j                  |        y y r_   )	rm   rh   rangelentypeshandlersvarsr   finally_body)rb   ri   itpr   s        rc   visit_try_stmtzTraverserVisitor.visit_try_stmt   s    	ds177|$AB~		$JJqM  &	 %
 A}  ;;"KKt$>>%NN!!$' &re   c                   t        t        |j                              D ]C  }|j                  |   j                  |        |j                  |   }|3|j                  |        E |j
                  j                  |        y r_   )r   r   r   rh   targetrm   )rb   ri   r   targs       rc   visit_with_stmtz TraverserVisitor.visit_with_stmt   s`    s166{#AFF1IT"88A;DD!	 $
 	
dre   c                <   |j                   j                  |        t        t        |j                              D ]`  }|j                  |   j                  |        |j
                  |   }||j                  |        |j                  |   j                  |        b y r_   )subjectrh   r   r   patternsguardsbodies)rb   ri   r   guards       rc   visit_match_stmtz!TraverserVisitor.visit_match_stmt   sv    			s1::'AJJqM  &HHQKE T"HHQKt$ (re   c                p    |j                   j                  |        |j                  j                  |        y r_   )namerh   valuer{   s     rc   visit_type_alias_stmtz&TraverserVisitor.visit_type_alias_stmt   s"    	d	tre   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_member_exprz"TraverserVisitor.visit_member_expr   r   re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_yield_from_exprz&TraverserVisitor.visit_yield_from_expr   r   re   c                T    |j                   r|j                   j                  |        y y r_   r   r{   s     rc   visit_yield_exprz!TraverserVisitor.visit_yield_expr  s    66FFMM$ re   c                    |j                   j                  |        |j                  D ]  }|j                  |         |j                  r|j                  j                  |        y y r_   )calleerh   argsr   rb   ri   as      rc   visit_call_exprz TraverserVisitor.visit_call_expr  sI    	AHHTN ::JJd# re   c                    |j                   j                  |        |j                  j                  |        |j                  |j                  j                  |        y y r_   )leftrh   rightr   r{   s     rc   visit_op_exprzTraverserVisitor.visit_op_expr  sC    	d	t::!JJd# "re   c                H    |j                   D ]  }|j                  |         y r_   )operandsrh   )rb   ri   operands      rc   visit_comparison_exprz&TraverserVisitor.visit_comparison_expr  s    zzGNN4  "re   c                    |j                   |j                   j                  |        |j                  |j                  j                  |        |j                  |j                  j                  |        y y r_   )begin_indexrh   	end_indexstrider{   s     rc   visit_slice_exprz!TraverserVisitor.visit_slice_expr  sY    ==$MM  &;;"KKt$88HHOOD!  re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_cast_exprz TraverserVisitor.visit_cast_expr  r   re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_assert_type_exprz'TraverserVisitor.visit_assert_type_expr!  r   re   c                ~    |j                   t        k(  r*|j                  J |j                  j                  |        y y r_   )kindr   r   rh   r{   s     rc   visit_reveal_exprz"TraverserVisitor.visit_reveal_expr$  s3    66[ 66%%%FFMM$ re   c                p    |j                   j                  |        |j                  j                  |        y r_   )r   rh   r   r{   s     rc   visit_assignment_exprz&TraverserVisitor.visit_assignment_expr,  s"    		tre   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_unary_exprz!TraverserVisitor.visit_unary_expr0  r   re   c                H    |j                   D ]  }|j                  |         y r_   r   rh   r   s      rc   visit_list_exprz TraverserVisitor.visit_list_expr3      GGDKK re   c                H    |j                   D ]  }|j                  |         y r_   r   r   s      rc   visit_tuple_exprz!TraverserVisitor.visit_tuple_expr7  r   re   c                t    |j                   D ])  \  }}||j                  |        |j                  |        + y r_   r   )rb   ri   kr   s       rc   visit_dict_exprz TraverserVisitor.visit_dict_expr;  s/    GGDAq}HHTN re   c                H    |j                   D ]  }|j                  |         y r_   r   r   s      rc   visit_set_exprzTraverserVisitor.visit_set_exprA  r   re   c                    |j                   j                  |        |j                  j                  |        |j                  r|j                  j                  |        y y r_   )r   rh   r   r   r{   s     rc   visit_index_exprz!TraverserVisitor.visit_index_exprE  s@    	d	t::JJd# re   c                   t        |j                  |j                  |j                        D ]@  \  }}}|j	                  |        |j	                  |        |D ]  }|j	                  |         B |j
                  j	                  |        y r_   )zipindices	sequences	condlistsrh   	left_exprrb   ri   r   sequence
conditionsconds         rc   visit_generator_exprz%TraverserVisitor.visit_generator_exprK  sk    +.qyy!++q{{+S'E8ZOOD!LL"D! # ,T
 	
4 re   c                L   t        |j                  |j                  |j                        D ]@  \  }}}|j	                  |        |j	                  |        |D ]  }|j	                  |         B |j
                  j	                  |        |j                  j	                  |        y r_   )r  r  r  r  rh   keyr   r  s         rc   visit_dictionary_comprehensionz/TraverserVisitor.visit_dictionary_comprehensionS  sy    +.qyy!++q{{+S'E8ZOOD!LL"D! # ,T
 	
T	tre   c                :    |j                   j                  |        y r_   	generatorrh   r{   s     rc   visit_list_comprehensionz)TraverserVisitor.visit_list_comprehension\      	4 re   c                :    |j                   j                  |        y r_   r  r{   s     rc   visit_set_comprehensionz(TraverserVisitor.visit_set_comprehension_  r  re   c                    |j                   j                  |        |j                  j                  |        |j                  j                  |        y r_   )r	  rh   if_expr	else_exprr{   s     rc   visit_conditional_exprz'TraverserVisitor.visit_conditional_exprb  s6    	d				4 re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_type_applicationz'TraverserVisitor.visit_type_applicationg  r   re   c                &    | j                  |       y r_   rz   r{   s     rc   visit_lambda_exprz"TraverserVisitor.visit_lambda_exprj  r}   re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_star_exprz TraverserVisitor.visit_star_exprm  r   re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_await_exprz!TraverserVisitor.visit_await_exprp  r   re   c                :    |j                   j                  |        y r_   )callrh   r{   s     rc   visit_super_exprz!TraverserVisitor.visit_super_exprs  r   re   c                    |j                   |j                   j                  |        |j                  |j                  j                  |        y y r_   )patternrh   r   r{   s     rc   visit_as_patternz!TraverserVisitor.visit_as_patternv  s=    99 IIT"66FFMM$ re   c                H    |j                   D ]  }|j                  |         y r_   r   rh   rb   ri   ps      rc   visit_or_patternz!TraverserVisitor.visit_or_pattern|      AHHTN re   c                :    |j                   j                  |        y r_   r   r{   s     rc   visit_value_patternz$TraverserVisitor.visit_value_pattern  r   re   c                H    |j                   D ]  }|j                  |         y r_   r(  r)  s      rc   visit_sequence_patternz'TraverserVisitor.visit_sequence_pattern  r,  re   c                T    |j                   |j                   j                  |        y y r_   )capturerh   r{   s     rc   visit_starred_patternz&TraverserVisitor.visit_starred_pattern  s#    99 IIT" !re   c                    |j                   D ]  }|j                  |         |j                  D ]  }|j                  |         |j                  |j                  j                  |        y y r_   )keysrh   r   rest)rb   ri   r  r   s       rc   visit_mapping_patternz&TraverserVisitor.visit_mapping_pattern  sU    66CJJt XXELL 66FFMM$ re   c                    |j                   j                  |        |j                  D ]  }|j                  |         |j                  D ]  }|j                  |         y r_   )	class_refrh   positionalskeyword_values)rb   ri   r*  r   s       rc   visit_class_patternz$TraverserVisitor.visit_class_pattern  sH    	4 AHHTN !!AHHTN "re   c                H    |j                   D ]  }|j                  |         y r_   assignmentsrh   r   s      rc   visit_importzTraverserVisitor.visit_import      AHHTN re   c                H    |j                   D ]  }|j                  |         y r_   r>  r   s      rc   visit_import_fromz"TraverserVisitor.visit_import_from  rA  re   NreturnNoneri   r0   rE  rF  rn   r   rE  rF  )ri   r"   rE  rF  ri   r!   rE  rF  ri   r8   rE  rF  ri   r   rE  rF  ri   r   rE  rF  ri   r   rE  rF  ri   r
   rE  rF  ri   r6   rE  rF  ri   rN   rE  rF  ri   r   rE  rF  ri   r<   rE  rF  ri   r   rE  rF  ri   r   rE  rF  ri   r%   rE  rF  ri   r;   rE  rF  ri   rD   rE  rF  ri   rO   rE  rF  ri   r.   rE  rF  )ri   rH   rE  rF  ri   r/   rE  rF  ri   rQ   rE  rF  ri   rP   rE  rF  ri   r   rE  rF  ri   r7   rE  rF  ri   r   rE  rF  ri   r@   rE  rF  ri   r   rE  rF  ri   r   rE  rF  ri   r=   rE  rF  ri   r	   rE  rF  ri   rM   rE  rF  ri   r-   rE  rF  ri   rE   rE  rF  ri   r   rE  rF  ri   r?   rE  rF  ri   r)   rE  rF  ri   r#   rE  rF  ri   r   rE  rF  ri   r,   rE  rF  ri   r>   rE  rF  ri   r   rE  rF  ri   rI   rE  rF  ri   r+   rE  rF  ri   rA   rE  rF  ri   r   rE  rF  ri   rC   rE  rF  ri   rR   rE  rF  ri   rU   rE  rF  ri   rY   rE  rF  ri   rV   rE  rF  ri   rX   rE  rF  ri   rT   rE  rF  ri   rS   rE  rF  ri   r&   rE  rF  ri   r(   rE  rF  )>__name__
__module____qualname____doc__rd   rk   rp   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r  r  r  r   r#  r&  r+  r.  r0  r3  r7  r<  r@  rC  r`   re   rc   r]   r]   b   s)   

 $#
%%  %%(% $$!"$!!!!
 # re   r]   Nc                      e Zd ZdZdQdZdR fdZdS fdZdT fdZdU fdZdV fdZ	dW fdZ
dX fd	ZdY fd
ZdZ fdZd[ fdZd\ fdZd] fdZd^ fdZd_ fdZd` fdZda fdZdb fdZdc fdZdd fdZde fdZdf fdZdg fdZdh fdZdi fdZdj fdZdk fdZdl fdZdm fdZ dn fdZ!do fd Z"dp fd!Z#dq fd"Z$dr fd#Z%ds fd$Z&dt fd%Z'du fd&Z(dv fd'Z)dw fd(Z*dx fd)Z+dy fd*Z,dz fd+Z-d{ fd,Z.d| fd-Z/d} fd.Z0d~ fd/Z1d fd0Z2d fd1Z3d fd2Z4d fd3Z5d fd4Z6d fd5Z7d fd6Z8d fd7Z9d fd8Z:d fd9Z;d fd:Z<d fd;Z=d fd<Z>d fd=Z?d fd>Z@d fd?ZAd fd@ZBd fdAZCd fdBZDd fdCZEd fdDZFd fdEZGd fdFZHd fdGZId fdHZJd fdIZKd fdJZLd fdKZMd fdLZNd fdMZOd fdNZPd fdOZQd fdPZR xZSS )ExtendedTraverserVisitora\  This is a more flexible traverser.

    In addition to the base traverser it:
        * has visit_ methods for leaf nodes
        * has common method that is called for all nodes
        * allows to skip recursing into a node

    Note that this traverser still doesn't visit some internal
    mypy constructs like _promote expression and Var.
    c                     yNTr`   r{   s     rc   visitzExtendedTraverserVisitor.visit  s    re   c                H    | j                  |      sy t        | 	  |       y r_   )r  superrk   rb   ri   	__class__s     rc   rk   z(ExtendedTraverserVisitor.visit_mypy_file      zz!}"re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r@  r  s     rc   r@  z%ExtendedTraverserVisitor.visit_import  s    zz!}Qre   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  rC  r  s     rc   rC  z*ExtendedTraverserVisitor.visit_import_from      zz!}!!$re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_import_allr  s     rc   r  z)ExtendedTraverserVisitor.visit_import_all      zz!} #re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r|   r  s     rc   r|   z'ExtendedTraverserVisitor.visit_func_def      zz!}q!re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z2ExtendedTraverserVisitor.visit_overloaded_func_def      zz!})!,re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_class_def  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_global_declr  s     rc   r  z*ExtendedTraverserVisitor.visit_global_decl  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_nonlocal_declr  s     rc   r  z,ExtendedTraverserVisitor.visit_nonlocal_decl      zz!}#A&re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_decorator  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_type_aliasr  s     rc   r  z)ExtendedTraverserVisitor.visit_type_alias  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  rp   )rb   rn   r  s     rc   rp   z$ExtendedTraverserVisitor.visit_block  s    zz% E"re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z.ExtendedTraverserVisitor.visit_expression_stmt      zz!}%a(re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z.ExtendedTraverserVisitor.visit_assignment_stmt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z7ExtendedTraverserVisitor.visit_operator_assignment_stmt      zz!}.q1re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_while_stmt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z'ExtendedTraverserVisitor.visit_for_stmt	  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z*ExtendedTraverserVisitor.visit_return_stmt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z*ExtendedTraverserVisitor.visit_assert_stmt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z'ExtendedTraverserVisitor.visit_del_stmt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z&ExtendedTraverserVisitor.visit_if_stmt      zz!}a re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_break_stmtr  s     rc   r  z)ExtendedTraverserVisitor.visit_break_stmt"  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_continue_stmtr  s     rc   r  z,ExtendedTraverserVisitor.visit_continue_stmt'  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_pass_stmtr  s     rc   r  z(ExtendedTraverserVisitor.visit_pass_stmt,  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_raise_stmt1  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z'ExtendedTraverserVisitor.visit_try_stmt6  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_with_stmt;  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_match_stmt@  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_int_exprr  s     rc   r  z'ExtendedTraverserVisitor.visit_int_exprG  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_str_exprr  s     rc   r  z'ExtendedTraverserVisitor.visit_str_exprL  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_bytes_exprr  s     rc   r  z)ExtendedTraverserVisitor.visit_bytes_exprQ  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_float_exprr  s     rc   r  z)ExtendedTraverserVisitor.visit_float_exprV  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_complex_exprr  s     rc   r  z+ExtendedTraverserVisitor.visit_complex_expr[      zz!}"1%re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_ellipsisr  s     rc   r  z'ExtendedTraverserVisitor.visit_ellipsis`  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z(ExtendedTraverserVisitor.visit_star_expre  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_name_exprr  s     rc   r  z(ExtendedTraverserVisitor.visit_name_exprj  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z*ExtendedTraverserVisitor.visit_member_expro  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z.ExtendedTraverserVisitor.visit_yield_from_exprt  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_yield_expry  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_call_expr~  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z&ExtendedTraverserVisitor.visit_op_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z.ExtendedTraverserVisitor.visit_comparison_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_cast_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z/ExtendedTraverserVisitor.visit_assert_type_expr      zz!}&q)re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z*ExtendedTraverserVisitor.visit_reveal_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r#  r  s     rc   r#  z)ExtendedTraverserVisitor.visit_super_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z.ExtendedTraverserVisitor.visit_assignment_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_unary_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_list_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z(ExtendedTraverserVisitor.visit_dict_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_tuple_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z'ExtendedTraverserVisitor.visit_set_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_index_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z/ExtendedTraverserVisitor.visit_type_application  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z*ExtendedTraverserVisitor.visit_lambda_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z1ExtendedTraverserVisitor.visit_list_comprehension  s    zz!}(+re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z0ExtendedTraverserVisitor.visit_set_comprehension      zz!}'*re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z7ExtendedTraverserVisitor.visit_dictionary_comprehension  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r
  r  s     rc   r
  z-ExtendedTraverserVisitor.visit_generator_expr      zz!}$Q're   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_slice_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r  r  s     rc   r  z/ExtendedTraverserVisitor.visit_conditional_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_type_var_exprr  s     rc   r  z,ExtendedTraverserVisitor.visit_type_var_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_paramspec_exprr  s     rc   r  z-ExtendedTraverserVisitor.visit_paramspec_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_type_var_tuple_exprr  s     rc   r  z2ExtendedTraverserVisitor.visit_type_var_tuple_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_type_alias_exprr  s     rc   r  z.ExtendedTraverserVisitor.visit_type_alias_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_namedtuple_exprr  s     rc   r  z.ExtendedTraverserVisitor.visit_namedtuple_expr   r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_enum_call_exprr  s     rc   r  z-ExtendedTraverserVisitor.visit_enum_call_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_typeddict_exprr  s     rc   r  z-ExtendedTraverserVisitor.visit_typeddict_expr
  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_newtype_exprr  s     rc   r  z+ExtendedTraverserVisitor.visit_newtype_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r   r  s     rc   r   z)ExtendedTraverserVisitor.visit_await_expr  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r&  r  s     rc   r&  z)ExtendedTraverserVisitor.visit_as_pattern  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r+  r  s     rc   r+  z)ExtendedTraverserVisitor.visit_or_pattern   r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r.  r  s     rc   r.  z,ExtendedTraverserVisitor.visit_value_pattern%  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  visit_singleton_patternr  s     rc   r  z0ExtendedTraverserVisitor.visit_singleton_pattern*  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r0  r  s     rc   r0  z/ExtendedTraverserVisitor.visit_sequence_pattern/  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r3  r  s     rc   r3  z.ExtendedTraverserVisitor.visit_starred_pattern4  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r7  r  s     rc   r7  z.ExtendedTraverserVisitor.visit_mapping_pattern9  r  re   c                H    | j                  |      sy t        | 	  |       y r_   )r  r  r<  r  s     rc   r<  z,ExtendedTraverserVisitor.visit_class_pattern>  r  re   )ri   r4   rE  boolrG  r|  r}  )ri   r'   rE  rF  rI  rJ  rK  )ri   r$   rE  rF  )ri   r5   rE  rF  rL  )ri   rF   rE  rF  rH  rM  rN  rO  rP  rQ  rR  rS  rT  rU  )ri   r   rE  rF  )ri   r   rE  rF  )ri   r:   rE  rF  rV  rW  rX  rY  )ri   r*   rE  rF  )ri   rB   rE  rF  )ri   r   rE  rF  )ri   r   rE  rF  )ri   r   rE  rF  )ri   r   rE  rF  rr  )ri   r2   rE  rF  rZ  r[  r\  r]  r^  r_  ra  rb  rc  rt  rd  re  rf  rh  rg  ri  rj  rp  rq  rm  rn  rl  rk  r`  ro  )ri   rK   rE  rF  )ri   r9   rE  rF  )ri   rL   rE  rF  )ri   rG   rE  rF  )ri   r1   rE  rF  )ri   r   rE  rF  )ri   rJ   rE  rF  )ri   r3   rE  rF  rs  ru  rv  rw  )ri   rW   rE  rF  rx  ry  rz  r{  )Tr~  r  r  r  r  rk   r@  rC  r  r|   r   r   r  r  r   r  rp   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r#  r   r   r   r   r   r   r   r  r  r  r  r  r
  r   r  r  r  r  r  r  r  r  r  r   r&  r+  r.  r  r0  r3  r7  r<  __classcell__r  s   @rc   r  r    s   	# 
%
$"
-
#
%
'
#
$#
)
)
2
$
"
%
%
"
!
$
'
#
$
"
#
$"
"
$
$
&
"
#
#
%
)
$
#
!
)
#
*
%
$
)
$
#
#
$
"
$
*
%
,
+
2
(
$
*
'
(
-
)
)
(
(
&
$$
$
'
+
*
)
)
' 're   r  c                      e Zd ZddZddZy)ReturnSeekerc                    d| _         y NFfoundra   s    rc   rd   zReturnSeeker.__init__E  s	    
re   c                    |j                   3t        |j                   t              r|j                   j                  dk(  ry d| _        y )NrF  T)r   
isinstancer2   r   r  r{   s     rc   r   zReturnSeeker.visit_return_stmtH  s1    66>Z9affkkV>S
re   NrD  rR  )r~  r  r  rd   r   r`   re   rc   r   r   D  s    re   r   c                P    t               }| j                  |       |j                  S )znFind if a function has a non-trivial return statement.

    Plain 'return' and 'return None' don't count.
    )r   rh   r  fdefseekers     rc   has_return_statementr  N  s!    
 ^FKK<<re   c                  (     e Zd ZddZd fdZ xZS )FuncCollectorBasec                    d| _         y r  )inside_funcra   s    rc   rd   zFuncCollectorBase.__init__Y  s
     re   c                Z    | j                   sd| _         t        | 	  |       d| _         y y NTF)r  r  r|   )rb   defnr  s     rc   r|   z FuncCollectorBase.visit_func_def\  s.    #DG"4($D  re   rD  )r  r!   rE  rF  )r~  r  r  rd   r|   r  r  s   @rc   r  r  X  s    !% %re   r  c                  (     e Zd Zd fdZddZ xZS )YieldSeekerc                0    t         |           d| _        y r  r  rd   r  rb   r  s    rc   rd   zYieldSeeker.__init__d      
re   c                    d| _         y r  r  r{   s     rc   r   zYieldSeeker.visit_yield_exprh  	    
re   rD  r\  )r~  r  r  rd   r   r  r  s   @rc   r  r  c      re   r  c                P    t               }| j                  |       |j                  S r_   )r  rh   r  r  s     rc   has_yield_expressionr  l      ]FKK<<re   c                  (     e Zd Zd fdZddZ xZS )YieldFromSeekerc                0    t         |           d| _        y r  r  r  s    rc   rd   zYieldFromSeeker.__init__s  r  re   c                    d| _         y r  r  r{   s     rc   r   z%YieldFromSeeker.visit_yield_from_exprw  r  re   rD  r[  )r~  r  r  rd   r   r  r  s   @rc   r   r   r  r  re   r   c                P    t               }| j                  |       |j                  S r_   )r   rh   r  r  s     rc   has_yield_from_expressionr$  {  s     FKK<<re   c                  (     e Zd Zd fdZddZ xZS )AwaitSeekerc                0    t         |           d| _        y r  r  r  s    rc   rd   zAwaitSeeker.__init__  r  re   c                    d| _         y r  r  r{   s     rc   r   zAwaitSeeker.visit_await_expr  r  re   rD  rs  )r~  r  r  rd   r   r  r  s   @rc   r&  r&    r  re   r&  c                P    t               }| j                  |       |j                  S r_   )r&  rh   r  )r   r
  s     rc   has_await_expressionr*    r  re   c                  (     e Zd Zd fdZddZ xZS )ReturnCollectorc                0    t         |           g | _        y r_   )r  rd   return_statementsr  s    rc   rd   zReturnCollector.__init__  s    35re   c                :    | j                   j                  |       y r_   )r.  append)rb   stmts     rc   r   z!ReturnCollector.visit_return_stmt  s    %%d+re   rD  )r1  r<   rE  rF  )r~  r  r  rd   r   r  r  s   @rc   r,  r,    s    6,re   r,  c                P    t               }| j                  |       |j                  S r_   )r,  rh   r.  noder   s     rc   all_return_statementsr5    s!    AKKNre   c                  4     e Zd Zd fdZd fdZddZ xZS )YieldCollectorc                >    t         |           d| _        g | _        y r  )r  rd   in_assignmentyield_expressionsr  s    rc   rd   zYieldCollector.__init__  s    "?Are   c                @    d| _         t        | 	  |       d| _         y r  r9  r  r   rb   r1  r  s     rc   r   z$YieldCollector.visit_assignment_stmt       !%d+"re   c                R    | j                   j                  || j                  f       y r_   )r:  r0  r9  rb   r   s     rc   r   zYieldCollector.visit_yield_expr  s!    %%tT-?-?&@Are   rD  r1  r
   rE  rF  )r   rP   rE  rF  )r~  r  r  rd   r   r   r  r  s   @rc   r7  r7    s    B
#
Bre   r7  c                P    t               }| j                  |       |j                  S r_   )r7  rh   r:  r3  s     rc   all_yield_expressionsrC    s!    AKKNre   c                  4     e Zd Zd fdZd fdZddZ xZS )YieldFromCollectorc                >    t         |           d| _        g | _        y r  )r  rd   r9  yield_from_expressionsr  s    rc   rd   zYieldFromCollector.__init__  s    "HJ#re   c                @    d| _         t        | 	  |       d| _         y r  r<  r=  s     rc   r   z(YieldFromCollector.visit_assignment_stmt  r>  re   c                R    | j                   j                  || j                  f       y r_   )rG  r0  r9  r@  s     rc   r   z(YieldFromCollector.visit_yield_from_expr  s!    ##**D$2D2D+EFre   rD  rA  )r   rQ   rE  rF  )r~  r  r  rd   r   r   r  r  s   @rc   rE  rE    s    K
#
Gre   rE  )r	  r    rE  r  )r   r   rE  r  )r4  r4   rE  zlist[ReturnStmt])r4  r4   rE  zlist[tuple[YieldExpr, bool]])nr  
__future__r   mypy_extensionsr   r   
mypy.nodesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   mypy.patternsrR   rS   rT   rU   rV   rW   rX   rY   mypy.visitorrZ   r]   r  r   r  r  r  r  r   r$  r&  r*  r,  r5  r7  rC  rE  r`   re   rc   <module>rO     sf   $ " -M M M M M M M M M M M M M M M M M M M M\	 	 	 % .|{4( | / |~	^'/ ^'B# %( %# ' " ,' ,B& BG* Gre   