a
    lcS                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ dZdZdZdZd	Zd
Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZG d%d& d&ZG d'd( d(eZ G d)d* d*e	Z!e j"d+d,G d-d. d.e!Z#G d/d0 d0eZ$G d1d2 d2e	Z%e j"d+d,G d3d4 d4e%Z&e j"d5d6G d7d8 d8e%Z'e j"d9d6G d:d; d;e%Z(e j"d<d6G d=d> d>e%Z)e j"d?d6G d@dA dAe%Z*e j"dBd,G dCdD dDe%Z+e j"dEd,G dFdG dGe%Z,e j"dHd6G dIdJ dJe%Z-e j"dKd6G dLdM dMe%Z.e j"dNd6e j"dOd6G dPdQ dQe%Z/e j"dRd,G dSdT dTe%Z0e j"dUd,G dVdW dWe%Z1e j"dXd,G dYdZ dZe%Z2e j"dXd,G d[d\ d\e%Z3e j"d]d,G d^d_ d_e%Z4e j"ed`G dadb dbe%Z5e j"dcd,G ddde dee%Z6e j"dfd,G dgdh dhe%Z7e j"did,G djdk dke%Z8e j"dld,G dmdn dne%Z9e j"dod,e j"dpd,G dqdr dre%Z:e j"dsd,G dtdu due%Z;e j"dvd,G dwdx dxe%Z<G dydz dze%Z=e j"d{d,G d|d} d}e=Z>e j"d~d,G dd de=Z?e j"dd,G dd de=Z@e j"dd,G dd de=ZAe j"dd,G dd de=ZBe j"dd,G dd de=ZCe j"dd,G dd de=ZDdS )    N)contextmanager)
NormalizerNormalizerConfigIssueRule)_get_token_collection)Zif_stmt
while_stmtfor_stmttry_stmtZ	with_stmt)testlist_star_exprtestlist_compexprlist   d   )nested_scopes
generatorsdivisionabsolute_importwith_statementprint_functionunicode_literalsgenerator_stop)comp_forsync_comp_forc                 C   sd  | j }|dkrdS |dkr
t| }| jd d \}}|d urB|S |j dkr~|dk rXdS |jd d	kst|jd
 dkrxdS dS n|dkr|dkst| jdkr| jd j dkrdS |dkrtt| |dS |dkrdS |dkr|dkrdS |dkr`t| jdkr`dS nV|dkr@d| jv r$dS |dk r2dS t| jS n |dkrZ| jdkrZdS |dkrhdS |dv rvdS |d krdS |d!krd"S |d#v r
| jd
 d$krd%S | jd& j d'kr`| jd& }|jd
 dkrd(S |jd
 dkrd)S |jd
 d*kr`d+S nVd,|v rd-|vs2d.|v s2|d/v r6dS |d-krDd0S |d1krRdS |d2kr`d3S |S )4Nlambdeflambdaatom   dictorsetmaker      literal   :r   **dict displayset display()r    r   tuple)version[list{}keywordyieldyield expressionoperator...Ellipsis
comparisonstringnumberstrings
yield_exprtestconditional expressionZ	atom_exprpowerawaitawait expressiontrailerfunction call	subscript.	attributeexpr	star_expr_testtermfactorstarredr   fstringf-string expression)type_get_comprehension_typechildrenlen_get_rhs_name_remove_parensvaluestr)noder+   type_comprehensionfirstsecondrC    r^   O/var/www/html/django/DPS/env/lib/python3.9/site-packages/parso/python/errors.pyrU      s    












rU   c                 c   sH   | j D ]<}|jdkr<|j D ]}|jdks|dkr2q|V  qq|V  qdS )zB
    Iterates over all statements and splits up  simple_stmt.
    Zsimple_stmtnewline;NrS   rQ   )scopechildZchild2r^   r^   r_   _iter_stmts`   s    



re   c                 C   sr   | j d d \}}|jdkr>|j d jtv r>|dkr8dS dS n0|jdkrn|j d jtv rn|j d d	krjd
S dS d S )Nr   r   r#   r,   zlist comprehensionzgenerator expressionr   rB   r$   zdict comprehensionzset comprehensionrS   rQ   _COMP_FOR_TYPES)r   r\   r]   r^   r^   r_   rR   n   s    rR   c                 C   s   |   }dd |D dgkS )Nc                 S   s   g | ]
}|j qS r^   rW   .0nr^   r^   r_   
<listcomp>       z%_is_future_import.<locals>.<listcomp>
__future__)Zget_from_names)import_fromZ
from_namesr^   r^   r_   _is_future_import}   s    rp   c                 C   sH   z
| j }W n ty   Y n(0 t|dkrD|d dkrDt| j d S | S )z_
    Returns the inner part of an expression like `(foo)`. Also removes nested
    parens.
    r    r   r(   r#   )rS   AttributeErrorrT   rV   )r   rS   r^   r^   r_   rV      s    
rV   c                 C   s2   | j dur.| j } | jdks(| jd dkr | S q dS )za
    Returns an ancestor node of an expression, skipping all levels of parens
    bottom-up.
    Nr   r   r(   parentrQ   rS   rY   r^   r^   r_   _skip_parens_bottom_up   s
    
ru   c                 C   s   dd | j D S )Nc                 s   s&   | ]}|j d ks|j dkr|V  qdS )paramr3   NrQ   ri   r^   r^   r_   	<genexpr>   rm   z_iter_params.<locals>.<genexpr>)rS   )Zparent_noder^   r^   r_   _iter_params   s    ry   c                 C   sT   d}t |  D ]>}|jdkr$|s$qd}|| kr6 dS |jdkrJt|rJq dS dS )z@
    Checks if the import is the first statement of a file.
    Fr8   Tro   N)re   Zget_root_noderQ   rp   )ro   Zfound_docstringstmtr^   r^   r_   _is_future_import_first   s    r{   c                 #   sN    fdd | j tv r<| jd d d D ]} |E d H  q&n | E d H  d S )Nc                 3   st   | j dkrj| jd dkrR| jd }|j dkr>t|E d H  d S  |E d H  d S n| jd dkrj|V  d S | V  d S )Nr   r   r(   r#   r   r,   )rQ   rS   !_iter_definition_exprs_from_lists)rd   r   
check_exprr^   r_   r~      s    


z5_iter_definition_exprs_from_lists.<locals>.check_exprr   )rQ   _STAR_EXPR_PARENTSrS   )r   rd   r^   r}   r_   r|      s
    
r|   c                 C   s@   g }| j d dd D ]&}|jdv r0|t|7 }q|| q|S )Nr   )r   testlist)rS   rQ   r|   append)	expr_stmtexprslist_r^   r^   r_   _get_expr_stmt_definition_exprs   s    
r   c                 C   s   | j d }tt|S Nr#   )rS   r-   r|   )r	   r   r^   r^   r_   _get_for_stmt_definition_exprs   s    
r   c                 C   s   | j d jtv S r   rf   )argumentr^   r^   r_   _is_argument_comprehension   s    r   c                 C   sN   | dk s|d u rdS |j dkr2tdd |jD S |j dkr@dS |dS d S )Nr    	   F
error_nodec                 s   s   | ]}|j d kV  qdS )Zfstring_startNrw   rj   rd   r^   r^   r_   rx      rm   z%_any_fstring_error.<locals>.<genexpr>rO   T)rQ   anyrS   search_ancestor)r+   rY   r^   r^   r_   _any_fstring_error   s    

r   c                   @   sZ   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Ze	dd Z
dd Zdd ZdS )_ContextNc                 C   s:   || _ g | _|| _i | _g | _g | _g | _g | _|| _d S N)	rY   blocksparent_context_used_name_dict_global_names_local_params_names_nonlocal_names_nonlocal_names_in_subscopes_add_syntax_error)selfrY   Zadd_syntax_errorr   r^   r^   r_   __init__   s    z_Context.__init__c                 C   s   |   o| jjjdv S )N)Zasync_funcdefZ
async_stmt)is_functionrY   rs   rQ   r   r^   r^   r_   is_async_funcdef   s    z_Context.is_async_funcdefc                 C   s   | j jdkS )Nfuncdef)rY   rQ   r   r^   r^   r_   r      s    z_Context.is_functionc                 C   s   |j j}|dkrd S |dkr*| j| nR|dkr@| j| n<|dkrf| jdd |j  D  n| j	|j
g | d S )NrC   Zglobal_stmtnonlocal_stmtr   c                 S   s   g | ]}|j jqS r^   )namerW   )rj   rv   r^   r^   r_   rl     rm   z%_Context.add_name.<locals>.<listcomp>)rs   rQ   r   r   r   r   extend
get_paramsr   
setdefaultrW   )r   r   Zparent_typer^   r^   r_   add_name  s    z_Context.add_namec              	   C   s   |  | jd |  | jd dd | jD }| jD ]V}z||j }W n tyZ   Y q2Y n0 d|j }|j|jk rx|}n|}| || q2g }| jD ]^}|j}|| jv rq||v s| j	du rd|j }| || q| 
 r|j| jvr|| q| j| S )zV
        Returns a list of nonlocal names that need to be part of that scope.
        globalnonlocalc                 S   s   i | ]}|j |qS r^   rh   ri   r^   r^   r_   
<dictcomp>  rm   z%_Context.finalize.<locals>.<dictcomp>z name '%s' is nonlocal and globalNz"no binding for nonlocal '%s' found)_analyze_namesr   r   rW   KeyError	start_posr   r   r   r   r   r   r   )r   Zglobal_name_strsZnonlocal_nameZglobal_namemessageZ
error_nameZnonlocals_not_handledsearchr^   r^   r_   finalize  s4    






z_Context.finalizec           
         s    fdd}g }j jdkr*j  }|D ] d}tj jg D ]}|j jkr^d}|j}|jdkrz|j	|krzqJ|
 r|jdkr|jd jd	kr|r| |d
  qqd}nd}|sJ||  qqJ|D ]}	|	j	j jkr|df qq.d S )Nc                    s     |  jf  d S r   )r   rW   r   	base_namer   rZ   r^   r_   raise_5  s    z'_Context._analyze_names.<locals>.raise_r   FTrv   r   r#   	annassignzannotated name '%s' can't be %sz.name '%s' is assigned to before %s declarationz)name '%s' is used prior to %s declarationzname '%s' is parameter and %s)rY   rQ   r   reversedr   getrW   r   rs   r   is_definitionrS   )
r   Zglobals_or_nonlocalsrZ   r   paramsZfound_global_or_nonlocalr   rs   r   rv   r^   r   r_   r   4  s8    

z_Context._analyze_namesc                 c   s    | j | d V  | j   d S r   )r   r   popr   rY   r^   r^   r_   	add_blocka  s    z_Context.add_blockc                 C   s   t || j| dS )N)r   )r   r   r   r^   r^   r_   add_contextg  s    z_Context.add_contextc                 C   s   |  j | 7  _ d S r   )r   r   )r   Zchild_contextr^   r^   r_   close_child_contextj  s    z_Context.close_child_context)N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r^   r^   r^   r_   r      s   
"-
r   c                       sl   e Zd ZdZ fddZdd Z fddZedd	 Z fd
dZ	dd Z
dd Zdd Zdd Z  ZS )ErrorFinderz1
    Searches for errors in the syntax tree.
    c                    s&   t  j|i | i | _| jj| _d S r   )superr   _error_dictZgrammarversion_infor+   )r   argskwargs	__class__r^   r_   r   r  s    zErrorFinder.__init__c                    s.    fdd  |p t |j_d_d S )Nc                    s2   | d u rd S  | j }| jdv r.t| j|S |S )N)classdefr   Z
file_input)rs   rQ   r   r   )rY   r   create_contextr   r^   r_   r   x  s    

z.ErrorFinder.initialize.<locals>.create_contextr   )r   r   context_indentation_countr   r^   r   r_   
initializew  s    	zErrorFinder.initializec                    sB   |j dkr6| | W d    dS 1 s,0    Y  t |S )Nr    )rQ   
visit_noder   visitr   r   r^   r_   r     s    
 zErrorFinder.visitc                 c   s   |  | |jtv rf| j|2 t| jjtkr>| |d d V  W d    n1 sX0    Y  d S |jdkr|  j	d7  _	| j	t
kr| |jd d d V  |jdkr|  j	d8  _	n$|jdv r| j}|j| _| j| d S )Nz!too many statically nested blocksZsuiter#   ztoo many levels of indentationr   r   )Z_check_type_rulesrQ   _BLOCK_STMTSr   r   rT   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorrS   r   r   )r   rY   r   r^   r^   r_   r     s$    

$



zErrorFinder.visit_nodec                    s   |j dkr|jdv rJt|  d }|jdkr8d}nd}| || nz|jdr\d}n\t	d	|j}|d u rd
}| j
dkr|jt| j
jv rd| }nt|ddkrd}nd}| || dS |jdkr|j}|j dv r| j|| _t |S )N
error_leaf)INDENTZERROR_DEDENTrB   r   zunexpected indentz3unindent does not match any outer indentation level\z6unexpected character after line continuation characterz\w{,2}("{1,3}|'{1,3})invalid syntaxr   
f-string: r#   z!EOL while scanning string literalz/EOF while scanning triple-quoted string literalr   r$   r   )rQ   
token_typer-   get_next_leaf_split_prefixr   rW   
startswithrematchr+   r   Zalways_break_tokensrT   groupr   rs   r   r   r   
visit_leaf)r   leafspacingr   r   rs   r   r^   r_   r     s:    





zErrorFinder.visit_leafc                 C   s   |  |dd|  d S )N  IndentationError: 	add_issue)r   r   r   r^   r^   r_   r     s    z"ErrorFinder._add_indentation_errorc                 C   s   |  |dd|  d S )N  SyntaxError: r   )r   rY   r   r^   r^   r_   r     s    zErrorFinder._add_syntax_errorc                 C   s&   |j d }|||f}| j|| d S )Nr   )r   r   r   )r   rY   coder   liner   r^   r^   r_   r     s    

zErrorFinder.add_issuec                 C   s8   | j   | j D ]\}}}| jt||| qd S r   )r   r   r   valuesZissuesr   r   )r   r   r   rY   r^   r^   r_   r     s    
zErrorFinder.finalize)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   __classcell__r^   r^   r   r_   r   n  s   	
)r   c                       s    e Zd ZdZ fddZ  ZS )IndentationRuler   c                    s   t  ||}d| S )Nr   )r   _get_messager   r   rY   r   r^   r_   r     s    zIndentationRule._get_messager   r   r   r   r   r   r^   r^   r   r_   r     s   r   r   rw   c                   @   s    e Zd ZdZdd Zdd ZdS )_ExpectIndentedBlockzexpected an indented blockc                 C   s   |  }t| d S )NrB   )r   r-   r   )r   rY   r   r^   r^   r_   get_node  s    z_ExpectIndentedBlock.get_nodec                 C   s   |j d jdkS )NrB   r`   rb   r   r^   r^   r_   is_issue  s    z_ExpectIndentedBlock.is_issueNr   r   r   r   r   r   r^   r^   r^   r_   r     s   r   c                   @   s   e Zd ZeZdS )ErrorFinderConfigN)r   r   r   r   Znormalizer_classr^   r^   r^   r_   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )
SyntaxRuler   c                    s4   t  ||}d|vr,t| jj|r,d| }d| S )Nzf-stringr   r   )r   r   r   _normalizerr+   r   r   r^   r_   r     s    zSyntaxRule._get_messager   r^   r^   r   r_   r     s   r   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )_InvalidSyntaxRuler   zf-string: invalid syntaxc                 C   s   |  S r   )r   r   r^   r^   r_   r     s    z_InvalidSyntaxRule.get_nodec                 C   s:   |  jdk}|r2t| jj|r2| j|| jd n|S d S )Nr   r   )r   rQ   r   r   r+   r   fstring_message)r   rY   errorr^   r^   r_   r     s    z_InvalidSyntaxRule.is_issueN)r   r   r   r   r   r   r   r^   r^   r^   r_   r     s   r   r@   rh   c                   @   s    e Zd ZdZdd Zdd ZdS )_AwaitOutsideAsyncz'await' outside async functionc                 C   s   | j j  S r   )r   r   r   r   r   r^   r^   r_   r      s    z_AwaitOutsideAsync.is_issuec                 C   s   |j S r   rs   r   r^   r^   r_   get_error_node#  s    z!_AwaitOutsideAsync.get_error_nodeN)r   r   r   r   r   r  r^   r^   r^   r_   r     s   r   breakc                   @   s   e Zd ZdZdd ZdS )_BreakOutsideLoopz'break' outside loopc                 C   s(   d}| j jjD ]}|jdv rd}q| S )NFr	   r   T)r   r   r   rQ   )r   r   in_loopblockr^   r^   r_   r   ,  s
    
z_BreakOutsideLoop.is_issueNr   r   r   r   r   r^   r^   r^   r_   r  (  s   r  continuec                   @   s   e Zd ZdZdZdd ZdS )_ContinueChecksz'continue' not properly in loopz0'continue' not supported inside 'finally' clausec                 C   sx   d}| j jjD ]\}|jdv r d}|jdkr|jd }|dkr|j|jkr| j jdk r| j|| jd  dS q|stdS d S )	NFr  Tr
   finallyr   r   )	r   r   r   rQ   rS   r   r+   r   message_in_finally)r   r   r  r  Z
last_blockr^   r^   r_   r   9  s     




z_ContinueChecks.is_issueN)r   r   r   r   r  r   r^   r^   r^   r_   r  4  s   r  fromc                   @   s    e Zd ZdZdd Zdd ZdS )_YieldFromCheckz"'yield from' inside async functionc                 C   s   |j j S r   r  r  r^   r^   r_   r   O  s    z_YieldFromCheck.get_nodec                 C   s   |j jdko| jj S )NZ	yield_arg)rs   rQ   r   r   r   r  r^   r^   r_   r   R  s    
z_YieldFromCheck.is_issueNr   r^   r^   r^   r_   r  K  s   r  r   c                   @   s   e Zd ZdZdZdd ZdS )_NameCheckszcannot assign to __debug__zcannot assign to Nonec                 C   s(   | j j| |jdkr$| r$dS d S )N	__debug__T)r   r   r   rW   r   r  r^   r^   r_   r   \  s    z_NameChecks.is_issueN)r   r   r   r   Zmessage_noner   r^   r^   r^   r_   r  W  s   r  r8   c                   @   s   e Zd ZdZdd ZdS )_StringChecksz0bytes can only contain ASCII literal characters.c              
   C   s  |j  }d|v r*tdd |jD r*dS d|vr| }d|v rV|d}tj}ntj}z>t	
 " t	d || W d    n1 s0    Y  W nt ty } z"| j|dt| d	 W Y d }~nDd }~0  ty } z"| j|d
t| d	 W Y d }~n
d }~0 0 d S )Nbc                 s   s   | ]}t |d kr|V  qdS )   N)ordrj   cr^   r^   r_   rx   j  rm   z)_StringChecks.is_issue.<locals>.<genexpr>Trzutf-8ignorez(unicode error) r   z(value error) )string_prefixlowerr   rW   Z_get_payloadencodecodecsescape_decodeunicode_escape_decodewarningscatch_warningsfilterwarningsUnicodeDecodeErrorr   rX   
ValueError)r   r   r  payloadfuncer^   r^   r_   r   g  s&    




**z_StringChecks.is_issueNr	  r^   r^   r^   r_   r  c  s   r  *c                   @   s   e Zd ZdZdd ZdS )
_StarCheckz"named arguments must follow bare *c                 C   sL   |j }|jdkrH|rH|j|j|d d  }dd |D }t|dkS d S )N
parametersr#   c                 S   s   g | ]}|d vr|j s|qS )),r)   )
star_countr   r^   r^   r_   rl     s   z'_StarCheck.is_issue.<locals>.<listcomp>r   )rs   rQ   rS   indexrT   )r   r   r   afterr^   r^   r_   r     s
    z_StarCheck.is_issueNr	  r^   r^   r^   r_   r*    s   r*  r%   c                   @   s   e Zd ZdZdd ZdS )_StarStarCheckz3dict unpacking cannot be used in dict comprehensionc                 C   s.   |j jdkr*|  }|d uo(|jtv S d S )Nr   )rs   rQ   Zget_next_siblingrg   )r   r   r   r^   r^   r_   r     s    z_StarStarCheck.is_issueNr	  r^   r^   r^   r_   r0    s   r0  r1   returnc                   @   s$   e Zd ZdZdZdd Zdd ZdS )_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                 C   s   |j S r   r  r  r^   r^   r_   r     s    z_ReturnAndYieldChecks.get_nodec                 C   sh   | j jjjdkr,| j| |d|j d n8| j j rdt| j jj	 rd|jdkrd|j
jdkrddS d S )Nr   z'%s' outside functionr   r1  Zreturn_stmtT)r   r   rY   rQ   r   r   rW   r   r   Ziter_yield_exprsrs   r  r^   r^   r_   r     s    z_ReturnAndYieldChecks.is_issueN)r   r   r   r   Zmessage_async_yieldr   r   r^   r^   r^   r_   r2    s   r2  r:   c                   @   s    e Zd ZdZdd Zdd ZdS )_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 C   s   |j dkrdS d|j v S )NrO   Fr  )rQ   r  r  )r   r8   r^   r^   r_   _is_bytes_literal  s    
z$_BytesAndStringMix._is_bytes_literalc                 C   s@   |j d }| |}|j dd  D ]}|| |kr" dS q"d S )Nr   r#   T)rS   r4  )r   rY   r\   Zfirst_is_bytesr8   r^   r^   r_   r     s
    

z_BytesAndStringMix.is_issueN)r   r   r   r   r4  r   r^   r^   r^   r_   r3    s   r3  Zimport_as_namesc                   @   s   e Zd ZdZdd ZdS )_TrailingImportCommaz:trailing comma not allowed without surrounding parenthesesc                 C   s&   |j d dkr"|jj d dkr"dS d S )NrB   r,  r)   T)rS   rs   r   r^   r^   r_   r     s    z_TrailingImportComma.is_issueNr	  r^   r^   r^   r_   r5    s   r5  ro   c                   @   s   e Zd ZdZdd ZdS )_ImportStarInFunctionz%import * only allowed at module levelc                 C   s   |  o| jjjd uS r   )Zis_star_importr   r   r   r   r^   r^   r_   r     s    z_ImportStarInFunction.is_issueNr	  r^   r^   r^   r_   r6    s   r6  c                   @   s   e Zd ZdZdd ZdS )_FutureImportRulez?from __future__ imports must occur at the beginning of the filec                 C   s   t |rt|sdS | D ]~\}}|j}tt}| jjdkrH|d |dkr`| j	|dd q|dkr|d}| j	||d q||vrd	| }| j	||d qd S )
NTr       annotationsZbracesznot a chancer   barry_as_FLUFLz-Seriously I'm not implementing this :) ~ Davez future feature %s is not defined)
rp   r{   	get_pathsrW   r-   ALLOWED_FUTURESr   r+   r   r   )r   rY   	from_nameZfuture_namer   Zallowed_futuresmr   r^   r^   r_   r     s     
z_FutureImportRule.is_issueNr	  r^   r^   r^   r_   r7    s   r7  rI   c                   @   s   e Zd ZdZdd ZdS )_StarExprRulez2iterable unpacking cannot be used in comprehensionc                 C   s   dd }| j jdkr|j}nt|}|jg tdR vrb|jdkrP|jd dksb| j|dd	 d S ||r| j jdkr| j|d
d	 n| j|dd	 d S |jjdkr|jjd jtv r| j|| j	d	 d S )Nc                 S   s<   | j d ur8| j } | jdkrdS | jg tdR vr dS q dS )Ndel_stmtTr   F)rs   rQ   r   rt   r^   r^   r_   check_delete_starred  s    

z4_StarExprRule.is_issue.<locals>.check_delete_starredr   r   r   r   r(   !can't use starred expression herer   zcannot delete starredr   r#   )
r   r+   rs   ru   rQ   r   rS   r   rg   message_iterable_unpacking)r   rY   rB  ancestorr^   r^   r_   r     s&    	z_StarExprRule.is_issueN)r   r   r   rD  r   r^   r^   r^   r_   r@    s   r@  )typesc                   @   s   e Zd Zdd ZdS )_StarExprParentRulec                    s    fdd  ||j rdd |jD }dd |D }t|dkrl| jjdk rTd}nd	}| j|d |d
 n0|r||d }|dkrd}| j|d |d
 d S )Nc                    sD   |d u rdS |j }|dkrdS |dkr8| j|jd jk S  | |jS )NFrC   r   rB   )rQ   r   rS   rs   )rY   rE  rZ   r   r^   r_   r     s    z3_StarExprParentRule.is_issue.<locals>.is_definitionc                 S   s   g | ]}|d kr|qS )r,  r^   r  r^   r^   r_   rl   "  rm   z0_StarExprParentRule.is_issue.<locals>.<listcomp>c                 S   s   g | ]}|j d kr|qS )rI   rw   r  r^   r^   r_   rl   #  rm   r#   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentr   r      z1too many expressions in star-unpacking assignment)rs   rS   rT   r   r+   r   r.  )r   rY   r   rN   r   countr^   rH  r_   r     s    z_StarExprParentRule.is_issueNr   r   r   r   r^   r^   r^   r_   rG    s   rG  r   c                   @   s    e Zd ZdZdd Zdd ZdS )_AnnotatorRulezillegal target for annotationc                 C   s   |j S r   r  r   r^   r^   r_   r   7  s    z_AnnotatorRule.get_nodec                 C   s   d }|j jd }t|}z
|j}W n ty4   Y nH0 d|v sT|jdkrZ|d dkrZd}n|jdkrt|d dkrtd}|d }|d u r|jd	ks|jd
v r|jdkr|jd dksdS nd}| j|j || d d S )Nr   r,  r   r(   r*   r,   r-   rB   r   r>   rC   Tz,only single target (not %s) can be annotatedr   )rs   rS   rV   rq   rQ   r   )r   rY   rZ   lhsrS   rC   r   r^   r^   r_   r   :  s.    

z_AnnotatorRule.is_issueNr   r^   r^   r^   r_   rL  1  s   rL  r   c                   @   s   e Zd Zdd ZdS )_ArgumentRulec                 C   s   |j d }| jjdk rt|}|j d dkr||jdkr||jdkrX| jjdk rRd}qnd}n| jjdk rjd	}nd}| j||d
 t|r|jjdkr| j|dd
 d S )Nr   r   r#   =r   r   z lambda cannot contain assignmentz=expression cannot contain assignment, perhaps you meant "=="?zkeyword can't be an expressionr   r   r   )rS   r   r+   rV   rQ   r   r   rs   )r   rY   r\   r   r^   r^   r_   r   X  s    

z_ArgumentRule.is_issueNrK  r^   r^   r^   r_   rN  V  s   rN  r   c                   @   s   e Zd ZdZdd ZdS )_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 C   s   | j jjd u S r   )r   r   r   r   r^   r^   r_   r   t  s    z!_NonlocalModuleLevelRule.is_issueNr	  r^   r^   r^   r_   rP  p  s   rP  Zarglistc                   @   s    e Zd Zedd Zdd ZdS )_ArglistRulec                 C   s   | j jdk rdS dS d S )Nr8  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)r   r+   r   r^   r^   r_   r   z  s    z_ArglistRule.messagec                 C   s
  t  }d}d}|jD ]}|dkr"q|jdkr|jd }t|rRt|jdkrR dS |dv r|dkrz|r~d	}| j||d
 qd}nTd}|jdkr|j|v rd}| jjdkr|d	|j7 }| j||d
 n|
|j q|rd}| j||d
 q|rd}| j||d
 qd S )NFr,  r   r   r   T)r)  r%   r)  z>iterable argument unpacking follows keyword argument unpackingr   r   zkeyword argument repeatedr   z: {}z6positional argument follows keyword argument unpackingz,positional argument follows keyword argument)setrS   rQ   r   rT   r   rW   r   r+   formatadd)r   rY   Zarg_setZkw_onlyZkw_unpacking_onlyr   r\   r   r^   r^   r_   r     s<    




z_ArglistRule.is_issueN)r   r   r   propertyr   r   r^   r^   r^   r_   rQ  x  s   
rQ  r+  r   c                   @   s   e Zd ZdZdd ZdS )_ParameterRulez-non-default argument follows default argumentc                 C   s   t  }d}d}t|D ]}|jdkr8|jdkrd}d}q|jj|v r`d}| j|j||jj d ||jj |s|jd u r|js|r dS q|jrd}d}qd}qd S )NFr3   r)  Tz.duplicate argument '%s' in function definitionr   )	rR  ry   rQ   rW   r   r   rT  defaultr-  )r   rY   Zparam_namesZdefault_onlyZ	star_seenpr   r^   r^   r_   r     s*    

z_ParameterRule.is_issueNr	  r^   r^   r^   r_   rV    s   rV  r
   c                   @   s   e Zd ZdZdd ZdS )_TryStmtRulezdefault 'except:' must be lastc                 C   sP   d }|j dd d D ]6}|dv r$ qL|dkr2|}q|d ur| j|| jd qd S )Nr    )elser  exceptr   )rS   r   r   )r   r
   Zdefault_exceptZexcept_clauser^   r^   r_   r     s    z_TryStmtRule.is_issueNr	  r^   r^   r^   r_   rY    s   rY  rO   c                   @   s>   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dddZ
dS )_FStringRuleNz3f-string expression part cannot include a backslashz'f-string: expressions nested too deeplyzAf-string: invalid conversion character: expected 's', 'r', or 'a'c                 C   s   |  |jdd  | d S r   _check_fstring_contentsrS   )r   format_specdepthr^   r^   r_   _check_format_spec  s    z_FStringRule._check_format_specc                 C   s   |dkr| j || jd |jd }d| v r>| j || jd |jd }|jdkrh|jdkrh|jd }n|}|jdkr|jd }|jd	vr| j || jd |jd
 }|jdkr| ||d  d S )Nr   r   r#   r   r3   rO  r    Zfstring_conversion)sr  ar   Zfstring_format_spec)	r   message_nestedrS   get_codemessage_exprrQ   rW   message_conversionra  )r   fstring_exprr`  rH   Z
children_2
conversionr   r_  r^   r^   r_   _check_fstring_expr  s     






z _FStringRule._check_fstring_exprc                 C   s   |  |jdd  d S )Nr#   rB   r]  )r   rO   r^   r^   r_   r     s    z_FStringRule.is_issuer   c                 C   s$   |D ]}|j dkr| || qd S )Nrh  )rQ   rj  )r   rS   r`  Zfstring_contentr^   r^   r_   r^    s    
z$_FStringRule._check_fstring_contents)r   )r   r   r   Z_fstring_grammarrf  rd  rg  ra  rj  r   r^  r^   r^   r^   r_   r\    s   r\  c                   @   s   e Zd ZdddZdS )_CheckAssignmentRuleFc                 C   s4  d }|j }|dkrd}n|dkr\|jd d \}}t|}|d u r|j dkr~| jjdk rdd}n|jd d	krxd
}nd}n|dkr|dkr| jjdk rd}nd
}n|dkrt|jdkr| jjdk rd}nd}n|dv r|j dkrd}nj|j dkrH|r|dkrd}n|dkrd}|jd d d D ]}	| |	||| q.n| |||| n||dkr|jdkrxd}n| jjdk rd}n
t|j}n>|dkr|jdkrd}n |dkrd}n|dv rd}n|dkrd}
| j	||
d n|dkrd }n|d!v r|jd" d#kr.d$}n||jd% d&krDd}nf|jd' }|j d(ks^J |jd" dkrtd)}n6|r|jd" dkrd*}n|r|jd" d+krd,}n*|d-kr| jjdk rd}nd.}n|d/v r|jd d d D ]}	| |	||| qnd0|v r|d1ks0d2|v s0|d3v r6d}n|d1kr|rj| jjd4krZd5}n| j	|d6d n^| jjd4kr|j
}nt|}|j tvr|s|j dkr|jd" dksd7}
| j	||
d | |jd  |d ur0|rd8| }
n0| jjdk rd9nd:}d;||rd<nd=|g}
| j	||
d d S )>Nr   r   r   r   r   r   r"   r#   r$   r&   r'   r.   r/   )r(   r,   r;   r2   r   r(   r*   r,   r-   r0   r1   r3   r4   r5   r6   r7   z+assignment to yield expression not possibler   r<   r=   r>   r   r@   rA   r   r%   rB   rC   rD   rE   rF   rG   rO   rP   )r   r   r   rH   rI   rJ   rK   r   rN   rC  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rQ   rS   rR   r   r+   rT   _check_assignmentrW   rX   r   rs   ru   r   join)r   rY   is_deletionis_namedexpris_aug_assignr   rZ   r\   r]   rd   r   rC   rE  rl  r^   r^   r_   ro    s    



















z&_CheckAssignmentRule._check_assignmentN)FFF)r   r   r   ro  r^   r^   r^   r_   rk    s   rk  r   c                   @   s   e Zd ZdZdd ZdS )_CompForRulez>asynchronous comprehension outside of an asynchronous functionc                 C   s<   |j d }|jdkr| | |jj d dko:| jj  S )Nr#   	expr_listr   async)rS   rQ   ro  rs   r   r   r   )r   rY   ru  r^   r^   r_   r     s    


z_CompForRule.is_issueNr	  r^   r^   r^   r_   rt    s   rt  r   c                   @   s    e Zd ZdZde Zdd ZdS )_ExprStmtRulez+illegal expression for augmented assignmentz'{target}' is an c                 C   s   |j d }|dko|jdk}| jjdks,|sP|j d dd D ]}| j||d q<|rt|j d }|jd	ks|jd
v r|j d jdkr|j d j d dkrdS | jjdkrdS | j|| jjt	|j d | jjdd d S )Nr#   rO  r   r   r   r   )rs  r   r   r>   rC   rB   r(   FT)targetr   )
rS   rQ   r   r+   ro  rV   r   extended_messagerS  rU   )r   rY   Z	augassignrs  Zbefore_equalrx  r^   r^   r_   r     s.    

z_ExprStmtRule.is_issueN)r   r   r   r   ry  r   r^   r^   r^   r_   rw    s   rw  	with_itemc                   @   s   e Zd Zdd ZdS )_WithItemRulec                 C   s   |  |jd  d S Nr   )ro  rS   )r   rz  r^   r^   r_   r     s    z_WithItemRule.is_issueNrK  r^   r^   r^   r_   r{    s   r{  rA  c                   @   s   e Zd Zdd ZdS )_DelStmtRulec                 C   s&   |j d }|jdkr"| j|dd d S )Nr#   ru  T)rq  rS   rQ   ro  )r   rA  rd   r^   r^   r_   r     s    

z_DelStmtRule.is_issueNrK  r^   r^   r^   r_   r}    s   r}  ru  c                   @   s   e Zd Zdd ZdS )_ExprListRulec                 C   s$   |j d d d D ]}| | qd S r|  )rS   ro  )r   ru  rH   r^   r^   r_   r     s    z_ExprListRule.is_issueNrK  r^   r^   r^   r_   r    s   r  r	   c                   @   s   e Zd Zdd ZdS )_ForStmtRulec                 C   s"   |j d }|jdkr| | d S )Nr#   ru  r~  )r   r	   ru  r^   r^   r_   r     s    

z_ForStmtRule.is_issueNrK  r^   r^   r^   r_   r    s   r  namedexpr_testc                   @   s   e Zd Zdd ZdS )_NamedExprRulec                    s   |j d }dd }||r,d}| j||d t   fddfdd	}||}|r| jjjjd
krxd}| j||d dd  D }|jdkr|j|v rd|j }| j||d | j|dd d S )Nr   c                 S   s8   | j }|d u r|S |jdkr.|jd | kr.|S |} q d S )Nr   r    rr   )rY   rs   r^   r^   r_   search_namedexpr_in_comp_for  s    z=_NamedExprRule.is_issue.<locals>.search_namedexpr_in_comp_forzKassignment expression cannot be used in a comprehension iterable expressionr   c                    s6   | j dkr| }n| j dkr$| jd } t| d S )Nr   r   r#   )rQ   rS   r   r   )r   comp)r   r^   r_   process_comp_for  s
    


z1_NamedExprRule.is_issue.<locals>.process_comp_forc                    sF   d}|  dd} | d u rqB| jD ]}|jtv r  | d} qq q|S )NFr   r   T)r   rS   rQ   rg   )rY   Zhas_ancestorsrd   )r  r^   r_   search_all_comp_ancestors  s    

z:_NamedExprRule.is_issue.<locals>.search_all_comp_ancestorsr   zKassignment expression within a comprehension cannot be used in a class bodyc                 S   s   g | ]}|j d kr|jqS )r   )rQ   rW   )rj   rH   r^   r^   r_   rl     rm   z+_NamedExprRule.is_issue.<locals>.<listcomp>r   zGassignment expression cannot rebind comprehension iteration variable %rT)rr  )	rS   r   r-   r   r   rY   rQ   rW   ro  )r   r  r\   r  r   r  Z
search_allnamelistr^   )r   r  r_   r     s(    
	z_NamedExprRule.is_issueNrK  r^   r^   r^   r_   r    s   r  )Er  r!  r   
contextlibr   Zparso.normalizerr   r   r   r   Zparso.python.tokenizer   r   r   r   r   r=  rg   rU   re   rR   rp   rV   ru   ry   r{   r|   r   r   r   r   r   r   r   Zregister_ruler   r   r   r   r   r  r  r  r  r  r*  r0  r2  r3  r5  r6  r7  r@  rG  rL  rN  rP  rQ  rV  rY  r\  rk  rt  rw  r{  r}  r  r  r  r^   r^   r^   r_   <module>   s   J	
 t







 





	


$

$


5



(x

"




