o
    Zhٿ                     @   s  d dl Z 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&Z0e!j#dRd,G dSdT dTe&Z1e!j#dUd,G dVdW dWe&Z2e!j#dXd,G dYdZ dZe&Z3e!j#dXd,G d[d\ d\e&Z4e!j#d]d,G d^d_ d_e&Z5e!j#ed`G dadb dbe&Z6e!j#dcd,G ddde dee&Z7e!j#dfd,G dgdh dhe&Z8e!j#did,G djdk dke&Z9e!j#dld,G dmdn dne&Z:e!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>ZAe!j#dd,G dd de>ZBe!j#dd,G dd de>ZCe!j#dd,G dd de>ZDe!j#dd,G dd de>ZEd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   st  | j }|dkr	dS |dkrt| }| jd d \}}|d ur |S |j dkrC|dk r+dS |jd d	ks9|jd
 dkrA|dk r?dS dS dS |dkr\|dksZt| jdkr\| jd j dkr\dS |dkrhtt| |dS |dkrndS |dkr~|dkr~|dk r|dS dS |dkrt| jdkrdS |S |dkrd| jv rdS |dk rdS t| jS |dkr| jdkr|dk rdS d S |d!krd!S |d"v rd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 |S d/|v rd0|vsd1|v s|d2v r#|dk r!dS d3S |d0kr*d4S |d5kr1dS |d6kr8d7S |S )8Nlambdeflambdaatom   dictorsetmaker      literal   :r   **r    
   dict displaydict literalset display()r    r   tuple)version[list{}keywordyieldyield expressionoperator...Ellipsis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
expressionstarredr   fstringf-string expression)type_get_comprehension_typechildrenlen_get_rhs_name_remove_parensvaluestr)noder.   type_comprehensionfirstsecondrG    rc   J/var/www/html/lang_env/lib/python3.10/site-packages/parso/python/errors.pyrZ      s   
/









rZ   c                 c   sJ    | j D ]}|jdkr|j D ]}|jdks|dkrq|V  qq|V  qdS )zB
    Iterates over all statements and splits up  simple_stmt.
    Zsimple_stmtnewline;NrX   rV   )scopechildZchild2rc   rc   rd   _iter_stmtsm   s   


rj   c                 C   sp   | j d d \}}|jdkr|j d jtv r|dkrdS dS |jdkr6|j d jtv r6|j d d	kr4d
S dS d S )Nr   r   r#   r/   zlist comprehensionzgenerator expressionr   rF   r$   zdict comprehensionzset comprehensionrX   rV   _COMP_FOR_TYPES)r   ra   rb   rc   rc   rd   rW   {   s   rW   c                 C   s   |   }dd |D dgkS )Nc                 S   s   g | ]}|j qS rc   r\   .0nrc   rc   rd   
<listcomp>   s    z%_is_future_import.<locals>.<listcomp>
__future__)Zget_from_names)import_fromZ
from_namesrc   rc   rd   _is_future_import   s   rt   c                 C   sJ   z| j }W n
 ty   Y | S w t|dkr#|d dkr#t| j d S | S )z_
    Returns the inner part of an expression like `(foo)`. Also removes nested
    parens.
    r    r   r+   r#   )rX   AttributeErrorrY   r[   )r   rX   rc   rc   rd   r[      s   
r[   c                 C   s:   | j dur| j } | jdks| jd dkr| S | j dusdS )za
    Returns an ancestor node of an expression, skipping all levels of parens
    bottom-up.
    Nr   r   r+   parentrV   rX   r^   rc   rc   rd   _skip_parens_bottom_up   s   

ry   c                 C   s   dd | j D S )Nc                 s   s(    | ]}|j d ks|j dkr|V  qdS )paramr6   NrV   rn   rc   rc   rd   	<genexpr>   s   & z_iter_params.<locals>.<genexpr>)rX   )Zparent_noderc   rc   rd   _iter_params      r}   c                 C   sT   d}t |  D ]}|jdkr|sqd}|| kr dS |jdkr%t|r%q dS dS )z@
    Checks if the import is the first statement of a file.
    Fr<   Trs   N)rj   Zget_root_noderV   rt   )rs   Zfound_docstringstmtrc   rc   rd   _is_future_import_first   s   r   c                 #   sR     fdd | j tv r | jd d d D ]	} |E d H  qd S  | E d H  d S )Nc                 3   st    | j dkr5| jd dkr)| jd }|j dkr t|E d H  d S  |E d H  d S | jd dkr5|V  d S | V  d S )Nr   r   r+   r#   r   r/   )rV   rX   !_iter_definition_exprs_from_lists)ri   r   
check_exprrc   rd   r      s   



z5_iter_definition_exprs_from_lists.<locals>.check_exprr   )rV   _STAR_EXPR_PARENTSrX   )r   ri   rc   r   rd   r      s   
r   c                 C   s@   g }| j d dd D ]}|jdv r|t|7 }q
|| q
|S )Nr   )r   testlist)rX   rV   r   append)	expr_stmtexprslist_rc   rc   rd   _get_expr_stmt_definition_exprs   s   
r   c                 C   s   | j d }tt|S Nr#   )rX   r0   r   )r	   r   rc   rc   rd   _get_for_stmt_definition_exprs   s   
r   c                 C   s   | j d jtv S r   rk   )argumentrc   rc   rd   _is_argument_comprehension   r~   r   c                 C   sJ   | dk s|d u r
dS |j dkrtdd |jD S |j dkr dS |dS )Nr    	   F
error_nodec                 s   s    | ]}|j d kV  qdS )Zfstring_startNr{   ro   ri   rc   rc   rd   r|      s    z%_any_fstring_error.<locals>.<genexpr>rT   T)rV   anyrX   search_ancestor)r.   r^   rc   rc   rd   _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)	r^   blocksparent_context_used_name_dict_global_names_local_params_names_nonlocal_names_nonlocal_names_in_subscopes_add_syntax_error)selfr^   Zadd_syntax_errorr   rc   rc   rd   __init__   s   
z_Context.__init__c                 C   s   |   o
| jjjdv S )N)Zasync_funcdefZ
async_stmt)is_functionr^   rw   rV   r   rc   rc   rd   is_async_funcdef  s   z_Context.is_async_funcdefc                 C   s   | j jdkS )Nfuncdef)r^   rV   r   rc   rc   rd   r     s   z_Context.is_functionc                 C   s   |j j}|dkr
d S |dkr| j| d S |dkr"| j| d S |dkr6| jdd |j  D  d S | j	|j
g | d S )NrG   Zglobal_stmtnonlocal_stmtr   c                 S   s   g | ]}|j jqS rc   )namer\   )ro   rz   rc   rc   rd   rq         z%_Context.add_name.<locals>.<listcomp>)rw   rV   r   r   r   r   extend
get_paramsr   
setdefaultr\   )r   r   Zparent_typerc   rc   rd   add_name  s   z_Context.add_namec              	   C   s   |  | jd |  | jd dd | jD }| jD ])}z||j }W n	 ty+   Y qw d|j }|j|jk r:|}n|}| || qg }| jD ]/}|j}|| jv rSqH||v s\| j	du rhd|j }| || qH| 
 rr|j| jvrw|| qH| 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 rc   rm   rn   rc   rc   rd   
<dictcomp>&  r   z%_Context.finalize.<locals>.<dictcomp>z name '%s' is nonlocal and globalNz"no binding for nonlocal '%s' found)_analyze_namesr   r   r\   KeyError	start_posr   r   r   r   r   r   r   )r   Zglobal_name_strsZnonlocal_nameZglobal_namemessageZ
error_nameZnonlocals_not_handledsearchrc   rc   rd   finalize  s6   






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r=|j	|kr=q%|
 r[|jdkrX|jd jd	krX|rR| |d
  nd}nd}|se||  nq%|D ]}	|	j	j jkrv|df qhqd S )Nc                    s     |  jf  d S r   )r   r\   r   	base_namer   r_   rc   rd   raise_B     z'_Context._analyze_names.<locals>.raise_r   FTrz   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)r^   rV   r   reversedr   getr\   r   rw   r   is_definitionrX   )
r   Zglobals_or_nonlocalsr_   r   paramsZfound_global_or_nonlocalr   rw   r   rz   rc   r   rd   r   A  s>   


z_Context._analyze_namesc                 c   s"    | j | d V  | j   d S r   )r   r   popr   r^   rc   rc   rd   	add_blockn  s   z_Context.add_blockc                 C   s   t || j| dS )N)r   )r   r   r   rc   rc   rd   add_contextt  r~   z_Context.add_contextc                 C   s   |  j | 7  _ d S r   )r   r   )r   Zchild_contextrc   rc   rd   close_child_contextw     z_Context.close_child_contextr   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   rc   rc   rc   rd   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__rc   rd   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)rw   rV   r   r   )r^   r   create_contextr   rc   rd   r     s   

z.ErrorFinder.initialize.<locals>.create_contextr   )r   r   context_indentation_countr   rc   r   rd   
initialize  s   	
zErrorFinder.initializec                    sD   |j dkr| |
 	 W d    dS 1 sw   Y  t |S )Nr    )rV   
visit_noder   visitr   r   rc   rd   r     s
   
 zErrorFinder.visitc                 c   s    |  | |jtv r5| j| t| jjtkr | |d d V  W d    d S 1 s.w   Y  d S |jdkrO|  j	d7  _	| j	t
krO| |jd d d V  |jdkr`|  j	d8  _	d S |jdv rt| j}|j| _| j| d S d S )Nz!too many statically nested blocksZsuiter#   ztoo many levels of indentationr   r   )Z_check_type_rulesrV   _BLOCK_STMTSr   r   rY   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorrX   r   r   )r   r^   r   rc   rc   rd   r     s.   






zErrorFinder.visit_nodec                    s   |j dkre|jdv r&t|  d }|jdkrd}nd}| || dS |jdr/d}n.t	d	|j}|d u rOd
}| j
dkrN|jt| j
jv rNd| }nt|ddkr[d}nd}| || dS |jdkry|j}|j dv ry| j|| _t |S )N
error_leaf)INDENTZERROR_DEDENTrF   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   )rV   
token_typer0   get_next_leaf_split_prefixr   r\   
startswithrematchr.   r   Zalways_break_tokensrY   groupr   rw   r   r   r   
visit_leaf)r   leafspacingr   r   rw   r   rc   rd   r     s>   





zErrorFinder.visit_leafc                 C      |  |dd|  d S )N  IndentationError: 	add_issue)r   r   r   rc   rc   rd   r     r   z"ErrorFinder._add_indentation_errorc                 C   r   )N  SyntaxError: r   )r   r^   r   rc   rc   rd   r     r   zErrorFinder._add_syntax_errorc                 C   s&   |j d }|||f}| j|| d S )Nr   )r   r   r   )r   r^   coder   liner   rc   rc   rd   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   r^   rc   rc   rd   r     s   
zErrorFinder.finalize)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   __classcell__rc   rc   r   rd   r   {  s    	
)r   c                           e Zd ZdZ fddZ  ZS )IndentationRuler   c                    s   t  ||}d| S )Nr   )r   _get_messager   r   r^   r   rc   rd   r     s   zIndentationRule._get_messager   r   r   r   r   r   rc   rc   r   rd   r         r   r   r{   c                   @       e Zd ZdZdd Zdd ZdS )_ExpectIndentedBlockzexpected an indented blockc                 C   s   |  }t| d S )NrF   )r   r0   r   )r   r^   r   rc   rc   rd   get_node  s   z_ExpectIndentedBlock.get_nodec                 C   s   |j d jdkS )NrF   re   rg   r   rc   rc   rd   is_issue  s   z_ExpectIndentedBlock.is_issueNr   r   r   r   r  r  rc   rc   rc   rd   r    s    r  c                   @   s   e Zd ZeZdS )ErrorFinderConfigN)r   r   r   r   Znormalizer_classrc   rc   rc   rd   r    s    r  c                       r   )
SyntaxRuler   c                    s4   t  ||}d|vrt| jj|rd| }d| S )Nzf-stringr   r   )r   r   r   _normalizerr.   r   r   rc   rd   r     s   zSyntaxRule._get_messager   rc   rc   r   rd   r    r   r  c                   @   $   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   rc   rc   rd   r       z_InvalidSyntaxRule.get_nodec                 C   s8   |  jdk}|rt| jj|r| j|| jd d S |S )Nr   r   )r   rV   r   r  r.   r   fstring_message)r   r^   errorrc   rc   rd   r    s   z_InvalidSyntaxRule.is_issueN)r   r   r   r   r  r  r  rc   rc   rc   rd   r
    s
    r
  rD   rm   c                   @   r  )_AwaitOutsideAsyncz'await' outside async functionc                 C   s   | j j  S r   )r  r   r   r   r   rc   rc   rd   r  -     z_AwaitOutsideAsync.is_issuec                 C      |j S r   rw   r   rc   rc   rd   get_error_node0  s   z!_AwaitOutsideAsync.get_error_nodeN)r   r   r   r   r  r  rc   rc   rc   rd   r  )      r  breakc                   @      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   rV   )r   r   in_loopblockrc   rc   rd   r  9  s   
z_BreakOutsideLoop.is_issueNr   r   r   r   r  rc   rc   rc   rd   r  5      r  continuec                   @      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r5|jd }|dkr5|j|jkr5| j jdk r5| j|| jd  dS q|s:dS d S )	NFr  Tr
   finallyr   r   )	r  r   r   rV   rX   r   r.   r   message_in_finally)r   r   r  r  Z
last_blockrc   rc   rd   r  F  s   


z_ContinueChecks.is_issueN)r   r   r   r   r"  r  rc   rc   rc   rd   r  A      r  fromc                   @   r  )_YieldFromCheckz"'yield from' inside async functionc                 C   s   |j j S r   r  r  rc   rc   rd   r  \  r  z_YieldFromCheck.get_nodec                 C   s   |j jdko| jj S )NZ	yield_arg)rw   rV   r  r   r   r  rc   rc   rd   r  _  s   
z_YieldFromCheck.is_issueNr  rc   rc   rc   rd   r%  X  r  r%  r   c                   @   r  )_NameCheckszcannot assign to __debug__zcannot assign to Nonec                 C   s,   | j j| |jdkr| rdS d S d S )N	__debug__T)r  r   r   r\   r   r  rc   rc   rd   r  i  s   z_NameChecks.is_issueN)r   r   r   r   Zmessage_noner  rc   rc   rc   rd   r&  d  r#  r&  r<   c                   @   s(   e Zd Zejdk rdZndZdd ZdS )_StringChecksr&   z0bytes can only contain ASCII literal characters.z/bytes can only contain ASCII literal charactersc              
   C   s  |j  }d|v rtdd |jD rdS d|vr| }d|v r*|d}tj}ntj}z"t	
  t	d || W d    W d S 1 sHw   Y  W d S  tym } z| j|dt| d	 W Y d }~d S d }~w ty } z| j|d
t| d	 W Y d }~d S d }~ww d S )Nbc                 s   s     | ]}t |d kr|V  qdS )   N)ordro   crc   rc   rd   r|   z  s    z)_StringChecks.is_issue.<locals>.<genexpr>Trzutf-8ignorez(unicode error) r   z(value error) )string_prefixlowerr   r\   Z_get_payloadencodecodecsescape_decodeunicode_escape_decodewarningscatch_warningsfilterwarningsUnicodeDecodeErrorr   r]   
ValueError)r   r   r0  payloadfuncerc   rc   rd   r  w  s0   




&$$z_StringChecks.is_issueN)r   r   r   sysr   r   r  rc   rc   rc   rd   r(  p  s
    
r(  *c                   @   r  )
_StarCheckz"named arguments must follow bare *c                 C   sP   |j }|jdkr$|r&|j|j|d d  }dd |D }t|dkS d S d S )N
parametersr#   c                 S   s   g | ]}|d vr|j s|qS )),r,   )
star_countr   rc   rc   rd   rq     s    z'_StarCheck.is_issue.<locals>.<listcomp>r   )rw   rV   rX   indexrY   )r   r   r   afterrc   rc   rd   r    s   z_StarCheck.is_issueNr  rc   rc   rc   rd   r@    r  r@  r%   c                   @   r  )_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   )rw   rV   Zget_next_siblingrl   )r   r   r   rc   rc   rd   r    s   z_StarStarCheck.is_issueNr  rc   rc   rc   rd   rF    s    rF  r4   returnc                   @   r	  )_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                 C   r  r   r  r  rc   rc   rd   r       z_ReturnAndYieldChecks.get_nodec                 C   sv   | j jjjdkr| j| |d|j d d S | j j r3t| j jj	 r5|jdkr7|j
jdkr9dS d S d S d S d S )Nr   z'%s' outside functionr   rG  Zreturn_stmtT)r  r   r^   rV   r   r  r\   r   r   Ziter_yield_exprsrw   r  rc   rc   rd   r    s   z_ReturnAndYieldChecks.is_issueN)r   r   r   r   Zmessage_async_yieldr  r  rc   rc   rc   rd   rH    s
    rH  r>   c                   @   r  )_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 C   s   |j dkrdS d|j v S )NrT   Fr)  )rV   r0  r1  )r   r<   rc   rc   rd   _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)rX   rK  )r   r^   ra   Zfirst_is_bytesr<   rc   rc   rd   r    s   

z_BytesAndStringMix.is_issueN)r   r   r   r   rK  r  rc   rc   rc   rd   rJ    s    rJ  Zimport_as_namesc                   @   r  )_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 d S )NrF   rB  r,   T)rX   rw   r   rc   rc   rd   r    s   z_TrailingImportComma.is_issueNr  rc   rc   rc   rd   rL    s    rL  rs   c                   @   r  )_ImportStarInFunctionz%import * only allowed at module levelc                 C   s   |  o
| jjjd uS r   )Zis_star_importr  r   r   r   rc   rc   rd   r    r   z_ImportStarInFunction.is_issueNr  rc   rc   rc   rd   rM    r  rM  c                   @   r  )_FutureImportRulez?from __future__ imports must occur at the beginning of the filec                 C   s   t |rNt|s
dS | D ]A\}}|j}tt}| jjdkr$|d |dkr0| j	|dd q|dkr>d}| j	||d q||vrMd	| }| j	||d qd S 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)
rt   r   	get_pathsr\   r0   ALLOWED_FUTURESr  r.   r   r   )r   r^   	from_nameZfuture_namer   Zallowed_futuresmr   rc   rc   rd   r    s&   
z_FutureImportRule.is_issueNr  rc   rc   rc   rd   rN    r  rN  rM   c                   @   r  )_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r1|jdkr(|jd dks1| j|dd	 d S ||rM| j jdkrD| j|d
d	 d S | j|dd	 d S |jjdkrf|jjd jtv rh| j|| j	d	 d S d S d S )Nc                 S   sD   | j d ur | j } | jdkrdS | jg tdR vrdS | j d usdS )Ndel_stmtTr   F)rw   rV   r   rx   rc   rc   rd   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.   rw   ry   rV   r   rX   r   rl   message_iterable_unpacking)r   r^   rY  ancestorrc   rc   rd   r     s&   	z_StarExprRule.is_issueN)r   r   r   r[  r  rc   rc   rc   rd   rW    r  rW  )typesc                   @      e Zd Zdd ZdS )_StarExprParentRulec                    s    fdd  ||j rQdd |jD }dd |D }t|dkr7| jjdk r*d}nd	}| j|d |d
 d S |rS||d }|dkrUd}| j|d |d
 d S d S d S d S )Nc                    sD   |d u rdS |j }|dkrdS |dkr| j|jd jk S  | |jS )NFrG   r   rF   )rV   r   rX   rw   )r^   r\  r_   r   rc   rd   r   $  s   z3_StarExprParentRule.is_issue.<locals>.is_definitionc                 S   s   g | ]}|d kr|qS )rB  rc   r,  rc   rc   rd   rq   2  s    z0_StarExprParentRule.is_issue.<locals>.<listcomp>c                 S   s   g | ]	}|j d kr|qS )rM   r{   r,  rc   rc   rd   rq   3  s    r#   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentr   r      z1too many expressions in star-unpacking assignment)rw   rX   rY   r  r.   r   rD  )r   r^   r   rS   r   countrc   r`  rd   r  #  s"   	z_StarExprParentRule.is_issueNr   r   r   r  rc   rc   rc   rd   r_  !      r_  r   c                   @   r  )_AnnotatorRulezillegal target for annotationc                 C   r  r   r  r   rc   rc   rd   r  G  rI  z_AnnotatorRule.get_nodec                 C   s   d }|j jd }t|}z|j}W n	 ty   Y n$w d|v s*|jdkr-|d dkr-d}n|jdkr:|d dkr:d}|d }|d u r^|jd	ksZ|jd
v rX|jdkrX|jd dks\dS d S d S d}| j|j || d d S )Nr   rB  r   r+   r-   r/   r0   rF   r   rB   rG   Tz,only single target (not %s) can be annotatedr   )rw   rX   r[   ru   rV   r   )r   r^   r_   lhsrX   rG   r   rc   rc   rd   r  J  s.   



z_AnnotatorRule.is_issueNr  rc   rc   rc   rd   re  A  s    re  r   c                   @   r^  )_ArgumentRulec                 C   s   |j d }| jjdk rt|}|j d dkr>|jdkr>|jdkr,| jjdk r)d}nd}n| jjdk r5d	}nd}| j||d
 t|rQ|jjdkrS| j|dd
 d S d S 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   )rX   r  r.   r[   rV   r   r   rw   )r   r^   ra   r   rc   rc   rd   r  h  s   

z_ArgumentRule.is_issueNrc  rc   rc   rc   rd   rg  f  rd  rg  r   c                   @   r  )_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 C   s   | j jjd u S r   )r  r   r   r   rc   rc   rd   r    r  z!_NonlocalModuleLevelRule.is_issueNr  rc   rc   rc   rd   ri    r  ri  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 )NrO  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)r  r.   r   rc   rc   rd   r     s   z_ArglistRule.messagec                 C   s
  t  }d}d}|jD ]x}|dkrq
|jdkrk|jd }t|r)t|jdkr) dS |dv r@|dkr=|r<d	}| j||d
 q
d}q
d}|jdkrj|j|v rdd}| jjdkr\|d	|j7 }| j||d
 q
|
|j q
|rwd}| j||d
 q
|rd}| j||d
 q
d S )NFrB  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)setrX   rV   r   rY   r   r\   r  r.   formatadd)r   r^   Zarg_setkw_onlyZkw_unpacking_onlyr   ra   r   rc   rc   rd   r    sD   




z_ArglistRule.is_issueN)r   r   r   propertyr   r  rc   rc   rc   rd   rj    s    
rj  rA  r   c                   @   r  )_ParameterRulez-non-default argument follows default argumentc                 C   s   t  }d}d}t|D ]F}|jdkr|jdkrd}d}q|jj|v r0d}| j|j||jj d ||jj |sQ|jd u rG|jsG|rF dS q|jrOd}d}qd}qd S )NFr6   r?  Tz.duplicate argument '%s' in function definitionr   )	rk  r}   rV   r\   r   r   rm  defaultrC  )r   r^   Zparam_namesZdefault_onlyZ	star_seenpr   rc   rc   rd   r    s0   

z_ParameterRule.is_issueNr  rc   rc   rc   rd   rp    s    rp  r
   c                   @   r  )_TryStmtRulezdefault 'except:' must be lastc                 C   sR   d }|j dd d D ]}|dv r d S |dkr|}q
|d ur&| j|| jd q
d S )Nr    )elser!  exceptr   )rX   r   r   )r   r
   Zdefault_exceptZexcept_clauserc   rc   rd   r    s   z_TryStmtRule.is_issueNr  rc   rc   rc   rd   rs    r  rs  rT   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_contentsrX   )r   format_specdepthrc   rc   rd   _check_format_spec  r   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r4|jdkr4|jd }n|}|jdkrM|jd }|jd	vrM| j || jd |jd
 }|jdkra| ||d  d S d S )Nr   r   r#   r   r6   rh  r    Zfstring_conversion)sr.  ar   Zfstring_format_spec)	r   message_nestedrX   get_codemessage_exprrV   r\   message_conversionr{  )r   fstring_exprrz  rL   Z
children_2
conversionr   ry  rc   rc   rd   _check_fstring_expr  s"   






z _FStringRule._check_fstring_exprc                 C   s   |  |jdd  d S )Nr#   rF   rw  )r   rT   rc   rc   rd   r    s   z_FStringRule.is_issuer   c                 C   s$   |D ]}|j dkr| || qd S )Nr  )rV   r  )r   rX   rz  Zfstring_contentrc   rc   rd   rx    s
   
z$_FStringRule._check_fstring_contents)r   )r   r   r   Z_fstring_grammarr  r~  r  r{  r  r  rx  rc   rc   rc   rd   rv    s    rv  c                   @   s   e Zd ZdddZdS )_CheckAssignmentRuleFc                 C   s  d }|j }|dkrd}n|dkr|jd d \}}t|}|d u r|j dkrJ| jjdk r1d}n|jd d	krF| jjd
k rBd}nd}nd}n|dkrj|dkrj| jjdk r\d}n| jjd
k rfd}nd}n|dkrt|jdkr| jjdk rd}nd}n|dv r|j dkrd}n|j dkr|r|dkrd}n|dkrd}|jd d d D ]
}	| |	||| qn_| |||| nU|dkr|jdkrd}nH| jjdk rd}n>t|j}n7|dkr|jdkr| jjd
k rd}n$d}n |dkrd}n|dv r
d}n|dkrd }
| j	||
d! n|d"kr!d#}n|d$v rz|jd% d&kr1d'}n|jd( d)krF| jjd
k rCd}nd*}n|jd+ }|j d,ksSJ |jd% dkr^d-}n|rl|jd% dkrld.}n|ry|jd% d/kryd0}n|d1kr| jjdk rd}nd2}n|d3v r|jd d d D ]}	| |	||| qnrd4|v r|d5ksd6|v s|d7v r| jjd
k rd}nTd*}nQ|d5kr|r| jjd8krd9}n7| j	|d:d! n/| jjd8kr|j
}nt|}|j tvr|s|j dkr|jd% dksd;}
| j	||
d! | |jd  |d urF|r%d<| }
n| jjdk r.d=nd>}d?||r8d@ndA|g}
| j	||
d! d S d S )BNr   r   r   r   r   r   r"   r#   r$   r&   r(   r)   r*   r1   r2   )r+   r/   r?   r5   r   r+   r-   r/   r0   r3   r4   r6   r7   r8   r9   r:   r;   z+assignment to yield expression not possibler   r@   rA   rB   r   rD   rE   r   r%   rR   rF   rG   rH   rI   rJ   rK   rT   rU   )r   r   r   rL   rM   rN   rO   r   rS   rZ  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rV   rX   rW   r  r.   rY   _check_assignmentr\   r]   r   rw   ry   r   join)r   r^   is_deletionis_namedexpris_aug_assignr  r_   ra   rb   ri   r   rG   r\  r  rc   rc   rd   r    s   

















z&_CheckAssignmentRule._check_assignmentN)FFF)r   r   r   r  rc   rc   rc   rd   r    s    r  r   c                   @   r  )_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)rX   rV   r  rw   r  r   r   )r   r^   r  rc   rc   rd   r    s   


z_CompForRule.is_issueNr  rc   rc   rc   rd   r    r  r  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|s(|j d dd D ]	}| j||d q|rmt|j d }|jd	ksM|jd
v rO|j d jdkrO|j d j d dkrOdS | jjdkrWdS | j|| jjt	|j d | jjdd d S d S )Nr#   rh  r   r   r   r   )r  r   r   rB   rG   rF   r+   FT)targetr   )
rX   rV   r  r.   r  r[   r   extended_messagerl  rZ   )r   r^   Z	augassignr  Zbefore_equalr  rc   rc   rd   r    s*   



z_ExprStmtRule.is_issueN)r   r   r   r   r  r  rc   rc   rc   rd   r    s    r  	with_itemc                   @   r^  )_WithItemRulec                 C   s   |  |jd  d S Nr   )r  rX   )r   r  rc   rc   rd   r    s   z_WithItemRule.is_issueNrc  rc   rc   rc   rd   r    rd  r  rX  c                   @   r^  )_DelStmtRulec                 C   s*   |j d }|jdkr| j|dd d S d S )Nr#   r  T)r  rX   rV   r  )r   rX  ri   rc   rc   rd   r    s   

z_DelStmtRule.is_issueNrc  rc   rc   rc   rd   r    rd  r  r  c                   @   r^  )_ExprListRulec                 C   s$   |j d d d D ]}| | qd S r  )rX   r  )r   r  rL   rc   rc   rd   r    s   z_ExprListRule.is_issueNrc  rc   rc   rc   rd   r    rd  r  r	   c                   @   r^  )_ForStmtRulec                 C   s&   |j d }|jdkr| | d S d S )Nr#   r  r  )r   r	   r  rc   rc   rd   r    s   

z_ForStmtRule.is_issueNrc  rc   rc   rc   rd   r    rd  r  namedexpr_testc                   @   r^  )_NamedExprRulec                    s   |j d }dd }||rd}| j||d t   fddfdd	}||}|rY| jjjjd
kr<d}| j||d dd  D }|jdkrY|j|v rYd|j }| j||d | j|dd d S )Nr   c                 S   s6   	 | j }|d u r
|S |jdkr|jd | kr|S |} q)NTr   r    rv   )r^   rw   rc   rc   rd   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#   )rV   rX   r   r   )r   comp)r   rc   rd   process_comp_for  s
   


z1_NamedExprRule.is_issue.<locals>.process_comp_forc                    sH   d}	 |  dd} | d u r	 |S | jD ]}|jtv r" | d} nqq)NFTr   r   )r   rX   rV   rl   )r^   Zhas_ancestorsri   )r  rc   rd   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   )rV   r\   )ro   rL   rc   rc   rd   rq   $  s    z+_NamedExprRule.is_issue.<locals>.<listcomp>r   zGassignment expression cannot rebind comprehension iteration variable %rT)r  )	rX   r   r0   r  r   r^   rV   r\   r  )r   r  ra   r  r   r  Z
search_allnamelistrc   )r   r  rd   r    s(   
	z_NamedExprRule.is_issueNrc  rc   rc   rc   rd   r    s    r  )Fr3  r>  r6  r   
contextlibr   Zparso.normalizerr   r   r   r   Zparso.python.tokenizer   r   r   r   r   rT  rl   rZ   rj   rW   rt   r[   ry   r}   r   r   r   r   r   r   r   r   r   Zregister_ruler  r  r  r
  r  r  r  r%  r&  r(  r@  rF  rH  rJ  rL  rM  rN  rW  r_  re  rg  ri  rj  rp  rs  rv  r  r  r  r  r  r  r  r  rc   rc   rc   rd   <module>   s   V	
 t








#





	


$

$


5


( 


"



