
    e]                        d Z ddlmZ ddlZddlmZ ddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZ erdd	lmZ  G d
 de
j$                        ZddZy)z=Checker for anything related to the async protocol (PEP 492).    )annotationsN)TYPE_CHECKING)nodesutil)checkers)utils)decorated_with)PyLinterc                      e Zd ZdZdddddifddd	ddifd
ZddZ ej                  d      dd       Z ej                  d      dd       Z	y)AsyncCheckerasynczYield inside async functionyield-inside-async-functionzQUsed when an `yield` or `yield from` statement is found inside an async function.
minversion      zFAsync context manager '%s' doesn't implement __aenter__ and __aexit__.not-async-context-managerzxUsed when an async context manager is used with an object that does not implement the async context management protocol.)E1700E1701c                ^    | j                   j                  j                  | _        dg| _        y )Nzcontextlib.asynccontextmanager)linterconfigmixin_class_rgx_mixin_class_rgx_async_generators)selfs    7/usr/lib/python3/dist-packages/pylint/checkers/async.pyopenzAsyncChecker.open*   s%     $ 2 2 B B"B!C    c                    |j                  t        j                        D ]Y  }|j                         |u st        j
                  d d dk(  st        |t        j                        sG| j                  d|       [ y )N   r   r   )node)	nodes_of_classr   Yieldscopesysversion_info
isinstance	YieldFromadd_message)r   r"   childs      r   visit_asyncfunctiondefz#AsyncChecker.visit_asyncfunctiondef.   sf    ((5 	LE{{}$  !$.*UEOO2T  !>U K		Lr   c                @   |j                   D ]  \  }}t        j                  |      }|t        |t        j
                        r8t        |t        j                        rt        || j                        rjit        |t        j                  j                        r!t        |j                  | j                        r%	 |j                  d       |j                  d       | j3                  d||j0                  f        y # t        j                  j                   $ r t        |t        j"                        rbt        j$                  |      sY Cd| j&                  j(                  j*                  v r(| j,                  j/                  |j0                        rY Y w xY w)N
__aenter__	__aexit__r   )r"   args)itemschecker_utils
safe_inferr(   r   UninferableBaser   AsyncFunctionDefr	   r   astroidbasesAsyncGeneratorparentgetattr
exceptionsNotFoundErrorInstancehas_known_basesr   r   ignored_checks_for_mixinsr   matchnamer*   )r   r"   ctx_mgr_inferreds        r   visit_asyncwithzAsyncChecker.visit_asyncwith6   sU   ** $	JGQ$//8H:h8L8L#M(E$:$:; "(D,B,BCHgmm&B&BC "(//43I3IJ$$\2$$[1 +$hmm=M  E$	& ))77 %!(G,<,<=  -<<XF$ 8#{{11KKL $ 5 5 ; ;HMM J$%s   <"DAFAFFN)returnNone)r"   znodes.AsyncFunctionDefrF   rG   )r"   znodes.AsyncWithrF   rG   )
__name__
__module____qualname__rA   msgsr   r2   only_required_for_messagesr,   rE    r   r   r   r      s    D *).6"
 U'M6"
D"D .]--.KLL ML .]--.IJ% K%r   r   c                8    | j                  t        |              y )N)register_checkerr   )r   s    r   registerrP   _   s    
L01r   )r   r
   rF   rG   )__doc__
__future__r   r&   typingr   r6   r   r   pylintr   pylint.checkersr   r2   pylint.checkers.utilsr	   pylint.lintr
   BaseCheckerr   rP   rM   r   r   <module>rY      sC   
 D " 
      2 0$E8'' EP2r   