
    *eh                       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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ddl[m\Z\ e ed           G d	 d
e\d                                           Z] G d de]          Z^ G d de]          Z_d0dZ` G d de]          Za G d dea          Zbd0dZc G d dea          Zdd0dZe G d de]          Zfd1d!Zg G d" d#ea          Zhd2d'Zi G d( d)ea          Zjd3d+Zk G d, d-ea          Zld4d/ZmdS )5zGeneric node traverser visitor    )annotations)
mypyc_attrtrait)K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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dxdZdydZdzd
Zd{dZd|dZd}dZ	d~dZ
ddZddZddZddZddZddZdd Zdd"Zdd$Zdd&Zdd(Zdd*Zdd,Zdd.Zdd0Zdd2Zdd4Zdd6Zdd8Zdd:Zdd<Zdd>Z dd@Z!ddBZ"ddDZ#ddFZ$ddHZ%ddJZ&ddLZ'ddNZ(ddPZ)ddRZ*ddTZ+ddVZ,ddXZ-ddZZ.dd\Z/dd^Z0dd`Z1ddbZ2dddZ3ddfZ4ddhZ5ddjZ6ddlZ7ddnZ8ddpZ9ddrZ:ddtZ;ddvZ<dwS )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.
    returnNonec                    d S N selfs    .lib/python3.11/site-packages/mypy/traverser.py__init__zTraverserVisitor.__init__l   s        or0   c                D    |j         D ]}|                    |            d S r`   )defsaccept)rc   rg   ds      rd   visit_mypy_filez TraverserVisitor.visit_mypy_fileq   s.     	 	AHHTNNNN	 	rf   blockr   c                D    |j         D ]}|                    |            d S r`   )bodyrj   )rc   rm   ss      rd   visit_blockzTraverserVisitor.visit_blocku   s.     	 	AHHTNNNN	 	rf   r"   c                    |j         L|j         D ] }|j        }||                    |            !|j         D ]}|                     |j                   |j                            |            d S r`   )	argumentsinitializerrj   	visit_varvariablero   )rc   rg   arginits       rd   
visit_funczTraverserVisitor.visit_funcy   s}    ;"{ & &#KK%%%{ - -s|,,,,	drf   r!   c                0    |                      |           d S r`   ry   rc   rg   s     rd   visit_func_defzTraverserVisitor.visit_func_def       rf   r8   c                    |j         D ]}|                    |            |j        r|j                            |            d S d S r`   )itemsrj   implrc   rg   items      rd   visit_overloaded_func_defz*TraverserVisitor.visit_overloaded_func_def   sV    G 	 	DKK6 	 FMM$	  	 rf   r   c                   |j         D ]}|                    |            |j        D ]}|                    |            |j        r|j                            |            |j                                        D ]}|                    |            |j                            |            |j        r|j                            |            d S d S r`   )
decoratorsrj   base_type_exprs	metaclasskeywordsvaluesri   analyzed)rc   rg   rk   basevs        rd   visit_class_defz TraverserVisitor.visit_class_def   s     	 	AHHTNNNN% 	 	DKK; 	%Kt$$$""$$ 	 	AHHTNNNN	d: 	$Jd#####	$ 	$rf   r   c                    |j                             |            |j                            |            |j        D ]}|                    |            d S r`   )funcrj   varr   )rc   rg   	decorators      rd   visit_decoratorz TraverserVisitor.visit_decorator   s\    	d	T 	# 	#IT""""	# 	#rf   r   c                :    |j                             |            d S r`   exprrj   r|   s     rd   visit_expression_stmtz&TraverserVisitor.visit_expression_stmt       	drf   r
   c                x    |j                             |            |j        D ]}|                    |            d S r`   )rvaluerj   lvalues)rc   rg   ls      rd   visit_assignment_stmtz&TraverserVisitor.visit_assignment_stmt   sB    	 	 	AHHTNNNN	 	rf   r6   c                n    |j                             |            |j                            |            d S r`   )r   rj   lvaluer|   s     rd   visit_operator_assignment_stmtz/TraverserVisitor.visit_operator_assignment_stmt   s0    		rf   rM   c                    |j                             |            |j                            |            |j        r|j                            |            d S d S r`   r   rj   ro   	else_bodyr|   s     rd   visit_while_stmtz!TraverserVisitor.visit_while_stmt   sZ    	d	d; 	%Kt$$$$$	% 	%rf   r   c                    |j                             |            |j                            |            |j                            |            |j        r|j                            |            d S d S r`   )indexrj   r   ro   r   r|   s     rd   visit_for_stmtzTraverserVisitor.visit_for_stmt   sn    	t	d	d; 	%Kt$$$$$	% 	%rf   r<   c                L    |j         |j                             |            d S d S r`   r   r|   s     rd   visit_return_stmtz"TraverserVisitor.visit_return_stmt   ,    6FMM$ rf   r   c                    |j         |j                             |            |j        |j                            |            d S d S r`   )r   rj   msgr|   s     rd   visit_assert_stmtz"TraverserVisitor.visit_assert_stmt   sH    6FMM$5ELL rf   r   c                L    |j         |j                             |            d S d S r`   r   r|   s     rd   visit_del_stmtzTraverserVisitor.visit_del_stmt   r   rf   r%   c                    |j         D ]}|                    |            |j        D ]}|                    |            |j        r|j                            |            d S d S r`   r   )rc   rg   ebs       rd   visit_if_stmtzTraverserVisitor.visit_if_stmt   sv     	 	AHHTNNNN 	 	AHHTNNNN; 	%Kt$$$$$	% 	%rf   r;   c                    |j         |j                             |            |j        |j                            |            d S d S r`   )r   rj   	from_exprr|   s     rd   visit_raise_stmtz!TraverserVisitor.visit_raise_stmt   sJ    6FMM$;"Kt$$$$$ #"rf   rD   c                   |j                             |            t          t          |j                            D ]F}|j        |         }||                    |            |j        |                             |            G|j        D ]}||                    |            |j        |j                            |            |j        |j                            |            d S d S r`   )	ro   rj   rangelentypeshandlersvarsr   finally_body)rc   rg   itpr   s        rd   visit_try_stmtzTraverserVisitor.visit_try_stmt   s    	ds17||$$ 	' 	'AB~		$JqM  &&&& 	 	A};"Kt$$$>%N!!$''''' &%rf   rN   c                
   t          t          |j                            D ]F}|j        |                             |            |j        |         }||                    |            G|j                            |            d S r`   )r   r   r   rj   targetro   )rc   rg   r   targs       rd   visit_with_stmtz TraverserVisitor.visit_with_stmt   sy    s16{{## 	" 	"AF1IT"""8A;DD!!!	drf   r.   c                J   |j                             |            t          t          |j                            D ]f}|j        |                             |            |j        |         }||                    |            |j        |                             |            gd S r`   )subjectrj   r   r   patternsguardsbodies)rc   rg   r   guards       rd   visit_match_stmtz!TraverserVisitor.visit_match_stmt   s    		s1:'' 	% 	%AJqM  &&&HQKE T"""HQKt$$$$	% 	%rf   r/   c                :    |j                             |            d S r`   r   r|   s     rd   visit_member_exprz"TraverserVisitor.visit_member_expr   r   rf   rP   c                :    |j                             |            d S r`   r   r|   s     rd   visit_yield_from_exprz&TraverserVisitor.visit_yield_from_expr   r   rf   rO   c                L    |j         r|j                             |            d S d S r`   r   r|   s     rd   visit_yield_exprz!TraverserVisitor.visit_yield_expr   s0    6 	 FMM$	  	 rf   r   c                    |j                             |            |j        D ]}|                    |            |j        r|j                            |            d S d S r`   )calleerj   argsr   rc   rg   as      rd   visit_call_exprz TraverserVisitor.visit_call_expr   sh    	 	 	AHHTNNNN: 	$Jd#####	$ 	$rf   r7   c                    |j                             |            |j                            |            |j        |j                            |            d S d S r`   )leftrj   rightr   r|   s     rd   visit_op_exprzTraverserVisitor.visit_op_expr  sV    	d	t:!Jd##### "!rf   r   c                D    |j         D ]}|                    |            d S r`   )operandsrj   )rc   rg   operands      rd   visit_comparison_exprz&TraverserVisitor.visit_comparison_expr  s2    z 	! 	!GNN4    	! 	!rf   r@   c                    |j         |j                             |            |j        |j                            |            |j        |j                            |            d S d S r`   )begin_indexrj   	end_indexstrider|   s     rd   visit_slice_exprz!TraverserVisitor.visit_slice_expr  sh    =$M  &&&;"Kt$$$8HOOD!!!!!  rf   r   c                :    |j                             |            d S r`   r   r|   s     rd   visit_cast_exprz TraverserVisitor.visit_cast_expr  r   rf   r   c                :    |j                             |            d S r`   r   r|   s     rd   visit_assert_type_exprz'TraverserVisitor.visit_assert_type_expr  r   rf   r=   c                p    |j         t          k    r%|j        J |j                            |            d S d S r`   )kindr   r   rj   r|   s     rd   visit_reveal_exprz"TraverserVisitor.visit_reveal_expr  s>    6[  6%%%FMM$ Drf   r	   c                n    |j                             |            |j                            |            d S r`   )r   rj   valuer|   s     rd   visit_assignment_exprz&TraverserVisitor.visit_assignment_expr'  s0    		trf   rL   c                :    |j                             |            d S r`   r   r|   s     rd   visit_unary_exprz!TraverserVisitor.visit_unary_expr+  r   rf   r-   c                D    |j         D ]}|                    |            d S r`   r   rj   r   s      rd   visit_list_exprz TraverserVisitor.visit_list_expr.  2    G 	 	DKK	 	rf   rE   c                D    |j         D ]}|                    |            d S r`   r   r   s      rd   visit_tuple_exprz!TraverserVisitor.visit_tuple_expr2  r   rf   r   c                x    |j         D ]1\  }}||                    |            |                    |            2d S r`   r   )rc   rg   kr   s       rd   visit_dict_exprz TraverserVisitor.visit_dict_expr6  sF    G 	 	DAq}HHTNNNN	 	rf   r?   c                D    |j         D ]}|                    |            d S r`   r   r   s      rd   visit_set_exprzTraverserVisitor.visit_set_expr<  r   rf   r)   c                    |j                             |            |j                            |            |j        r|j                            |            d S d S r`   )r   rj   r   r   r|   s     rd   visit_index_exprz!TraverserVisitor.visit_index_expr@  sZ    	d	t: 	$Jd#####	$ 	$rf   r#   c                   t          |j        |j        |j                  D ]J\  }}}|                    |            |                    |            |D ]}|                    |            K|j                            |            d S r`   )zipindices	sequences	condlistsrj   	left_exprrc   rg   r   sequence
conditionsconds         rd   visit_generator_exprz%TraverserVisitor.visit_generator_exprF  s    +.qy!+q{+S+S 	" 	"'E8ZOOD!!!LL" " "D!!!!"	4     rf   r   c                D   t          |j        |j        |j                  D ]J\  }}}|                    |            |                    |            |D ]}|                    |            K|j                            |            |j                            |            d S r`   )r   r   r  r  rj   keyr   r  s         rd   visit_dictionary_comprehensionz/TraverserVisitor.visit_dictionary_comprehensionN  s    +.qy!+q{+S+S 	" 	"'E8ZOOD!!!LL" " "D!!!!"	T	trf   r,   c                :    |j                             |            d S r`   	generatorrj   r|   s     rd   visit_list_comprehensionz)TraverserVisitor.visit_list_comprehensionW      	4     rf   r>   c                :    |j                             |            d S r`   r  r|   s     rd   visit_set_comprehensionz(TraverserVisitor.visit_set_comprehensionZ  r  rf   r   c                    |j                             |            |j                            |            |j                            |            d S r`   )r  rj   if_expr	else_exprr|   s     rd   visit_conditional_exprz'TraverserVisitor.visit_conditional_expr]  sH    	d			4     rf   rH   c                :    |j                             |            d S r`   r   r|   s     rd   visit_type_applicationz'TraverserVisitor.visit_type_applicationb  r   rf   r+   c                0    |                      |           d S r`   r{   r|   s     rd   visit_lambda_exprz"TraverserVisitor.visit_lambda_expre  r~   rf   rA   c                :    |j                             |            d S r`   r   r|   s     rd   visit_star_exprz TraverserVisitor.visit_star_exprh  r   rf   r   c                :    |j                             |            d S r`   r   r|   s     rd   visit_await_exprz!TraverserVisitor.visit_await_exprk  r   rf   rC   c                :    |j                             |            d S r`   )callrj   r|   s     rd   visit_super_exprz!TraverserVisitor.visit_super_exprn  r   rf   rQ   c                    |j         |j                             |            |j        |j                            |            d S d S r`   )patternrj   namer|   s     rd   visit_as_patternz!TraverserVisitor.visit_as_patternq  sJ    9 IT"""6FMM$ rf   rT   c                D    |j         D ]}|                    |            d S r`   r   rj   rc   rg   ps      rd   visit_or_patternz!TraverserVisitor.visit_or_patternw  .     	 	AHHTNNNN	 	rf   rX   c                :    |j                             |            d S r`   r   r|   s     rd   visit_value_patternz$TraverserVisitor.visit_value_pattern{  r   rf   rU   c                D    |j         D ]}|                    |            d S r`   r'  r(  s      rd   visit_sequence_patternz'TraverserVisitor.visit_sequence_pattern~  r+  rf   rW   c                L    |j         |j                             |            d S d S r`   )capturerj   r|   s     rd   visit_starred_patternz&TraverserVisitor.visit_starred_pattern  s.    9 IT""""" ! rf   rS   c                    |j         D ]}|                    |            |j        D ]}|                    |            |j        |j                            |            d S d S r`   )keysrj   r   rest)rc   rg   r
  r   s       rd   visit_mapping_patternz&TraverserVisitor.visit_mapping_pattern  sx    6 	 	CJJtX 	 	ELL6FMM$ rf   rR   c                    |j                             |            |j        D ]}|                    |            |j        D ]}|                    |            d S r`   )	class_refrj   positionalskeyword_values)rc   rg   r)  r   s       rd   visit_class_patternz$TraverserVisitor.visit_class_pattern  sg    	4    	 	AHHTNNNN! 	 	AHHTNNNN	 	rf   r&   c                D    |j         D ]}|                    |            d S r`   assignmentsrj   r   s      rd   visit_importzTraverserVisitor.visit_import  .     	 	AHHTNNNN	 	rf   r(   c                D    |j         D ]}|                    |            d S r`   r=  r   s      rd   visit_import_fromz"TraverserVisitor.visit_import_from  r@  rf   Nr]   r^   rg   r0   r]   r^   rm   r   r]   r^   )rg   r"   r]   r^   rg   r!   r]   r^   rg   r8   r]   r^   rg   r   r]   r^   rg   r   r]   r^   rg   r   r]   r^   rg   r
   r]   r^   rg   r6   r]   r^   rg   rM   r]   r^   rg   r   r]   r^   rg   r<   r]   r^   rg   r   r]   r^   rg   r   r]   r^   rg   r%   r]   r^   rg   r;   r]   r^   rg   rD   r]   r^   rg   rN   r]   r^   rg   r.   r]   r^   rg   r/   r]   r^   rg   rP   r]   r^   rg   rO   r]   r^   rg   r   r]   r^   rg   r7   r]   r^   rg   r   r]   r^   rg   r@   r]   r^   rg   r   r]   r^   rg   r   r]   r^   rg   r=   r]   r^   rg   r	   r]   r^   rg   rL   r]   r^   rg   r-   r]   r^   rg   rE   r]   r^   rg   r   r]   r^   rg   r?   r]   r^   rg   r)   r]   r^   rg   r#   r]   r^   rg   r   r]   r^   rg   r,   r]   r^   rg   r>   r]   r^   rg   r   r]   r^   rg   rH   r]   r^   rg   r+   r]   r^   rg   rA   r]   r^   rg   r   r]   r^   rg   rC   r]   r^   rg   rQ   r]   r^   rg   rT   r]   r^   rg   rX   r]   r^   rg   rU   r]   r^   rg   rW   r]   r^   rg   rS   r]   r^   rg   rR   r]   r^   rg   r&   r]   r^   rg   r(   r]   r^   )=__name__
__module____qualname____doc__re   rl   rq   ry   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/  r2  r6  r;  r?  rB  ra   rf   rd   r\   r\   a   s           
      
 
 
 
          $ $ $ $# # # #      
   % % % %% % % %                 % % % %% % % %( ( ( (   % % % %             $ $ $ $$ $ $ $! ! ! !" " " "                           $ $ $ $! ! ! !   ! ! ! !! ! ! !! ! ! !
                               # # # #                  rf   r\   Nc                      e Zd ZdZdd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
d 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d 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d0Zd fd2Zd fd4Zd fd6Zd fd8Zd fd:Zd fd<Zd fd>Zd fd@Z d fdBZ!dÈ fdDZ"dĈ fdFZ#dň fdHZ$dƈ fdJZ%dǈ fdLZ&dȈ fdNZ'dɈ fdPZ(dʈ fdRZ)dˈ fdTZ*d̈ fdVZ+d͈ fdXZ,dΈ fdZZ-dψ fd\Z.dЈ fd^Z/dш fd`Z0d҈ fdbZ1dӈ fddZ2dԈ fdfZ3dՈ fdhZ4dֈ fdjZ5d׈ fdlZ6d؈ fdnZ7dو fdpZ8dڈ fdrZ9dۈ fdtZ:d܈ fdvZ;d݈ fdxZ<dވ fdzZ=d߈ fd|Z>d fd~Z?d fdZ@d fdZAd fdZBd fdZCd fdZDd fdZEd fdZFd fdZGd fdZHd fdZId fdZJd fdZKd fdZLd fdZMd fdZNd fdZOd fdZPd fdZQd fd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.
    rg   r4   r]   boolc                    dS NTra   r|   s     rd   visitzExtendedTraverserVisitor.visit  s    trf   r0   r^   c                x    |                      |          sd S t                                          |           d S r`   )r  superrl   rc   rg   	__class__s     rd   rl   z(ExtendedTraverserVisitor.visit_mypy_file  8    zz!}} 	F"""""rf   r&   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r?  r  s     rd   r?  z%ExtendedTraverserVisitor.visit_import  s8    zz!}} 	FQrf   r(   c                x    |                      |          sd S t                                          |           d S r`   )r  r  rB  r  s     rd   rB  z*ExtendedTraverserVisitor.visit_import_from  8    zz!}} 	F!!!$$$$$rf   r'   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_import_allr  s     rd   r  z)ExtendedTraverserVisitor.visit_import_all  8    zz!}} 	F  #####rf   r!   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r}   r  s     rd   r}   z'ExtendedTraverserVisitor.visit_func_def  8    zz!}} 	Fq!!!!!rf   r8   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z2ExtendedTraverserVisitor.visit_overloaded_func_def  8    zz!}} 	F))!,,,,,rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_class_def  r  rf   r$   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_global_declr  s     rd   r  z*ExtendedTraverserVisitor.visit_global_decl  r  rf   r5   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_nonlocal_declr  s     rd   r  z,ExtendedTraverserVisitor.visit_nonlocal_decl  8    zz!}} 	F##A&&&&&rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_decorator  r  rf   rF   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_type_aliasr  s     rd   r  z)ExtendedTraverserVisitor.visit_type_alias  r  rf   rm   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  rq   )rc   rm   r  s     rd   rq   z$ExtendedTraverserVisitor.visit_block  s:    zz%   	FE"""""rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z.ExtendedTraverserVisitor.visit_expression_stmt  8    zz!}} 	F%%a(((((rf   r
   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z.ExtendedTraverserVisitor.visit_assignment_stmt  r  rf   r6   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z7ExtendedTraverserVisitor.visit_operator_assignment_stmt  8    zz!}} 	F..q11111rf   rM   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_while_stmt  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z'ExtendedTraverserVisitor.visit_for_stmt  r  rf   r<   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z*ExtendedTraverserVisitor.visit_return_stmt	  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z*ExtendedTraverserVisitor.visit_assert_stmt  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z'ExtendedTraverserVisitor.visit_del_stmt  r  rf   r%   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z&ExtendedTraverserVisitor.visit_if_stmt  8    zz!}} 	Fa     rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_break_stmtr  s     rd   r  z)ExtendedTraverserVisitor.visit_break_stmt  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_continue_stmtr  s     rd   r  z,ExtendedTraverserVisitor.visit_continue_stmt"  r  rf   r:   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_pass_stmtr  s     rd   r  z(ExtendedTraverserVisitor.visit_pass_stmt'  r  rf   r;   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_raise_stmt,  r  rf   rD   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z'ExtendedTraverserVisitor.visit_try_stmt1  r  rf   rN   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_with_stmt6  r  rf   r.   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_match_stmt;  r  rf   r*   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_int_exprr  s     rd   r  z'ExtendedTraverserVisitor.visit_int_exprB  r  rf   rB   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_str_exprr  s     rd   r  z'ExtendedTraverserVisitor.visit_str_exprG  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_bytes_exprr  s     rd   r  z)ExtendedTraverserVisitor.visit_bytes_exprL  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_float_exprr  s     rd   r  z)ExtendedTraverserVisitor.visit_float_exprQ  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_complex_exprr  s     rd   r  z+ExtendedTraverserVisitor.visit_complex_exprV  8    zz!}} 	F""1%%%%%rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_ellipsisr  s     rd   r  z'ExtendedTraverserVisitor.visit_ellipsis[  r  rf   rA   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z(ExtendedTraverserVisitor.visit_star_expr`  r  rf   r2   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_name_exprr  s     rd   r  z(ExtendedTraverserVisitor.visit_name_expre  r  rf   r/   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z*ExtendedTraverserVisitor.visit_member_exprj  r  rf   rP   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z.ExtendedTraverserVisitor.visit_yield_from_expro  r  rf   rO   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_yield_exprt  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_call_expry  r  rf   r7   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z&ExtendedTraverserVisitor.visit_op_expr~  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z.ExtendedTraverserVisitor.visit_comparison_expr  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_cast_expr  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z/ExtendedTraverserVisitor.visit_assert_type_expr  8    zz!}} 	F&&q)))))rf   r=   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z*ExtendedTraverserVisitor.visit_reveal_expr  r  rf   rC   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r!  r  s     rd   r!  z)ExtendedTraverserVisitor.visit_super_expr  r  rf   r	   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z.ExtendedTraverserVisitor.visit_assignment_expr  r  rf   rL   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_unary_expr  r  rf   r-   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_list_expr  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z(ExtendedTraverserVisitor.visit_dict_expr  r  rf   rE   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_tuple_expr  r  rf   r?   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z'ExtendedTraverserVisitor.visit_set_expr  r  rf   r)   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_index_expr  r  rf   rH   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z/ExtendedTraverserVisitor.visit_type_application  r  rf   r+   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z*ExtendedTraverserVisitor.visit_lambda_expr  r  rf   r,   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z1ExtendedTraverserVisitor.visit_list_comprehension  s8    zz!}} 	F((+++++rf   r>   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z0ExtendedTraverserVisitor.visit_set_comprehension  8    zz!}} 	F''*****rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z7ExtendedTraverserVisitor.visit_dictionary_comprehension  r  rf   r#   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z-ExtendedTraverserVisitor.visit_generator_expr  8    zz!}} 	F$$Q'''''rf   r@   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r   r  s     rd   r   z)ExtendedTraverserVisitor.visit_slice_expr  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z/ExtendedTraverserVisitor.visit_conditional_expr  r  rf   rJ   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_type_var_exprr  s     rd   r  z,ExtendedTraverserVisitor.visit_type_var_expr  r  rf   r9   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_paramspec_exprr  s     rd   r  z-ExtendedTraverserVisitor.visit_paramspec_expr  r  rf   rK   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_type_var_tuple_exprr  s     rd   r  z2ExtendedTraverserVisitor.visit_type_var_tuple_expr  r  rf   rG   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_type_alias_exprr  s     rd   r  z.ExtendedTraverserVisitor.visit_type_alias_expr  r  rf   r1   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_namedtuple_exprr  s     rd   r  z.ExtendedTraverserVisitor.visit_namedtuple_expr  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_enum_call_exprr  s     rd   r  z-ExtendedTraverserVisitor.visit_enum_call_expr   r  rf   rI   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_typeddict_exprr  s     rd   r  z-ExtendedTraverserVisitor.visit_typeddict_expr  r  rf   r3   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_newtype_exprr  s     rd   r  z+ExtendedTraverserVisitor.visit_newtype_expr
  r  rf   r   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r  r  s     rd   r  z)ExtendedTraverserVisitor.visit_await_expr  r  rf   rQ   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r%  r  s     rd   r%  z)ExtendedTraverserVisitor.visit_as_pattern  r  rf   rT   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r*  r  s     rd   r*  z)ExtendedTraverserVisitor.visit_or_pattern  r  rf   rX   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r-  r  s     rd   r-  z,ExtendedTraverserVisitor.visit_value_pattern   r  rf   rV   c                x    |                      |          sd S t                                          |           d S r`   )r  r  visit_singleton_patternr  s     rd   r  z0ExtendedTraverserVisitor.visit_singleton_pattern%  r  rf   rU   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r/  r  s     rd   r/  z/ExtendedTraverserVisitor.visit_sequence_pattern*  r  rf   rW   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r2  r  s     rd   r2  z.ExtendedTraverserVisitor.visit_starred_pattern/  r  rf   rS   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r6  r  s     rd   r6  z.ExtendedTraverserVisitor.visit_mapping_pattern4  r  rf   rR   c                x    |                      |          sd S t                                          |           d S r`   )r  r  r;  r  s     rd   r;  z,ExtendedTraverserVisitor.visit_class_pattern9  r  rf   )rg   r4   r]   r  rD  ry  rz  )rg   r'   r]   r^   rF  rG  rH  )rg   r$   r]   r^   )rg   r5   r]   r^   rI  )rg   rF   r]   r^   rE  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  )rg   r   r]   r^   )rg   r   r]   r^   )rg   r:   r]   r^   rS  rT  rU  rV  )rg   r*   r]   r^   )rg   rB   r]   r^   )rg   r   r]   r^   )rg   r   r]   r^   )rg   r   r]   r^   )rg   r   r]   r^   ro  )rg   r2   r]   r^   rW  rX  rY  rZ  r[  r\  r^  r_  r`  rq  ra  rb  rc  re  rd  rf  rg  rm  rn  rj  rk  ri  rh  r]  rl  )rg   rJ   r]   r^   )rg   r9   r]   r^   )rg   rK   r]   r^   )rg   rG   r]   r^   )rg   r1   r]   r^   )rg   r   r]   r^   )rg   rI   r]   r^   )rg   r3   r]   r^   rp  rr  rs  rt  )rg   rV   r]   r^   ru  rv  rw  rx  )Tr{  r|  r}  r~  r  rl   r?  rB  r  r}   r   r   r  r  r   r  rq   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  r/  r2  r6  r;  __classcell__r  s   @rd   r  r    sa	       	 	   # # # # # #           
% % % % % %
$ $ $ $ $ $" " " " " "
- - - - - -
# # # # # #
% % % % % %
' ' ' ' ' '
# # # # # #
$ $ $ $ $ $# # # # # #
) ) ) ) ) )
) ) ) ) ) )
2 2 2 2 2 2
$ $ $ $ $ $
" " " " " "
% % % % % %
% % % % % %
" " " " " "
! ! ! ! ! !
$ $ $ $ $ $
' ' ' ' ' '
# # # # # #
$ $ $ $ $ $
" " " " " "
# # # # # #
$ $ $ $ $ $" " " " " "
" " " " " "
$ $ $ $ $ $
$ $ $ $ $ $
& & & & & &
" " " " " "
# # # # # #
# # # # # #
% % % % % %
) ) ) ) ) )
$ $ $ $ $ $
# # # # # #
! ! ! ! ! !
) ) ) ) ) )
# # # # # #
* * * * * *
% % % % % %
$ $ $ $ $ $
) ) ) ) ) )
$ $ $ $ $ $
# # # # # #
# # # # # #
$ $ $ $ $ $
" " " " " "
$ $ $ $ $ $
* * * * * *
% % % % % %
, , , , , ,
+ + + + + +
2 2 2 2 2 2
( ( ( ( ( (
$ $ $ $ $ $
* * * * * *
' ' ' ' ' '
( ( ( ( ( (
- - - - - -
) ) ) ) ) )
) ) ) ) ) )
( ( ( ( ( (
( ( ( ( ( (
& & & & & &
$ $ $ $ $ $$ $ $ $ $ $
$ $ $ $ $ $
' ' ' ' ' '
+ + + + + +
* * * * * *
) ) ) ) ) )
) ) ) ) ) )
' ' ' ' ' ' ' ' ' 'rf   r  c                      e Zd ZddZd	dZdS )
ReturnSeekerr]   r^   c                    d| _         d S NFfoundrb   s    rd   re   zReturnSeeker.__init__@  s    


rf   rg   r<   c                z    |j         *t          |j         t                    r|j         j        dk    rd S d| _        d S )Nr^   T)r   
isinstancer2   r$  r  r|   s     rd   r   zReturnSeeker.visit_return_stmtC  s7    6>Z99>afkV>S>SF


rf   NrC  rO  )r{  r|  r}  re   r   ra   rf   rd   r  r  ?  s<                rf   r  fdefr    r]   r  c                V    t                      }|                     |           |j        S )znFind if a function has a non-trivial return statement.

    Plain 'return' and 'return None' don't count.
    )r  rj   r  r  seekers     rd   has_return_statementr  I  s'    
 ^^FKK<rf   c                  (     e Zd ZddZd fdZ xZS )	FuncCollectorBaser]   r^   c                    d| _         d S r  )inside_funcrb   s    rd   re   zFuncCollectorBase.__init__T  s     rf   defnr!   c                x    | j         s1d| _         t                                          |           d| _         d S d S NTF)r  r  r}   )rc   r  r  s     rd   r}   z FuncCollectorBase.visit_func_defW  sF     	%#DGG""4((($D	% 	%rf   rC  )r  r!   r]   r^   )r{  r|  r}  re   r}   r  r  s   @rd   r
  r
  S  sQ        ! ! ! !% % % % % % % % % %rf   r
  c                  (     e Zd Zd fdZddZ xZS )	YieldSeekerr]   r^   c                V    t                                                       d| _        d S r  r  re   r  rc   r  s    rd   re   zYieldSeeker.__init___  $    


rf   rg   rO   c                    d| _         d S r  r   r|   s     rd   r   zYieldSeeker.visit_yield_exprc      


rf   rC  rY  )r{  r|  r}  re   r   r  r  s   @rd   r  r  ^  Q                    rf   r  c                V    t                      }|                     |           |j        S r`   )r  rj   r  r  s     rd   has_yield_expressionr  g  %    ]]FKK<rf   c                  (     e Zd Zd fdZddZ xZS )	YieldFromSeekerr]   r^   c                V    t                                                       d| _        d S r  r  r  s    rd   re   zYieldFromSeeker.__init__n  r  rf   rg   rP   c                    d| _         d S r  r   r|   s     rd   r   z%YieldFromSeeker.visit_yield_from_exprr  r  rf   rC  rX  )r{  r|  r}  re   r   r  r  s   @rd   r  r  m  r  rf   r  c                V    t                      }|                     |           |j        S r`   )r  rj   r  r  s     rd   has_yield_from_expressionr!  v  s'    FKK<rf   c                  (     e Zd Zd fdZddZ xZS )	AwaitSeekerr]   r^   c                V    t                                                       d| _        d S r  r  r  s    rd   re   zAwaitSeeker.__init__}  r  rf   rg   r   c                    d| _         d S r  r   r|   s     rd   r  zAwaitSeeker.visit_await_expr  r  rf   rC  rp  )r{  r|  r}  re   r  r  r  s   @rd   r#  r#  |  r  rf   r#  r   r   c                V    t                      }|                     |           |j        S r`   )r#  rj   r  )r   r  s     rd   has_await_expressionr'    r  rf   c                  (     e Zd Zd fdZddZ xZS )	ReturnCollectorr]   r^   c                V    t                                                       g | _        d S r`   )r  re   return_statementsr  s    rd   re   zReturnCollector.__init__  s'    35rf   stmtr<   c                :    | j                             |           d S r`   )r+  append)rc   r,  s     rd   r   z!ReturnCollector.visit_return_stmt  s    %%d+++++rf   rC  )r,  r<   r]   r^   )r{  r|  r}  re   r   r  r  s   @rd   r)  r)    sQ        6 6 6 6 6 6, , , , , , , ,rf   r)  noder4   list[ReturnStmt]c                V    t                      }|                     |           |j        S r`   )r)  rj   r+  r/  r   s     rd   all_return_statementsr3    s%    AKKNNNrf   c                  4     e Zd Zd
 fdZd fdZdd	Z xZS )YieldCollectorr]   r^   c                d    t                                                       d| _        g | _        d S r  )r  re   in_assignmentyield_expressionsr  s    rd   re   zYieldCollector.__init__  s/    "?Arf   r,  r
   c                f    d| _         t                                          |           d| _         d S r  r7  r  r   rc   r,  r  s     rd   r   z$YieldCollector.visit_assignment_stmt  1    !%%d+++"rf   r   rO   c                H    | j                             || j        f           d S r`   )r8  r.  r7  rc   r   s     rd   r   zYieldCollector.visit_yield_expr  s'    %%tT-?&@AAAAArf   rC  r,  r
   r]   r^   )r   rO   r]   r^   )r{  r|  r}  re   r   r   r  r  s   @rd   r5  r5    s}        B B B B B B
# # # # # #
B B B B B B B Brf   r5  list[tuple[YieldExpr, bool]]c                V    t                      }|                     |           |j        S r`   )r5  rj   r8  r2  s     rd   all_yield_expressionsrB    s%    AKKNNNrf   c                  4     e Zd Zd
 fdZd fdZdd	Z xZS )YieldFromCollectorr]   r^   c                d    t                                                       d| _        g | _        d S r  )r  re   r7  yield_from_expressionsr  s    rd   re   zYieldFromCollector.__init__  s/    "HJ###rf   r,  r
   c                f    d| _         t                                          |           d| _         d S r  r:  r;  s     rd   r   z(YieldFromCollector.visit_assignment_stmt  r<  rf   r   rP   c                H    | j                             || j        f           d S r`   )rF  r.  r7  r>  s     rd   r   z(YieldFromCollector.visit_yield_from_expr  s'    #**D$2D+EFFFFFrf   rC  r?  )r   rP   r]   r^   )r{  r|  r}  re   r   r   r  r  s   @rd   rD  rD    s}        K K K K K K
# # # # # #
G G G G G G G Grf   rD   list[tuple[YieldFromExpr, bool]]c                V    t                      }|                     |           |j        S r`   )rD  rj   rF  r2  s     rd   all_yield_from_expressionsrK    s%    AKKNNN##rf   )r  r    r]   r  )r   r   r]   r  )r/  r4   r]   r0  )r/  r4   r]   r@  )r/  r4   r]   rI  )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   mypy.patternsrQ   rR   rS   rT   rU   rV   rW   rX   mypy.visitorrY   r\   r  r  r  r
  r  r  r  r!  r#  r'  r)  r3  r5  rB  rD  rK  ra   rf   rd   <module>rQ     s   $ $ " " " " " " - - - - - - - -L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L LZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 % $ $ $ $ $ ...x x x x x{4( x x /. xv	^' ^' ^' ^' ^'/ ^' ^' ^'B    #      % % % % %( % % %    #          '          "      , , , , ,' , , ,   B B B B B& B B B   G G G G G* G G G$ $ $ $ $ $rf   