o
    ˷eS                     @   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)if_stmt
while_stmtfor_stmttry_stmt	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   s:  | j }|dkr	dS |dkrt| }| jd d \}}|d ur |S |j dkr=|dk r+dS |jd d	ks9|jd
 dkr;dS dS |dkrV|dksTt| jdkrV| jd j dkrVdS |dkrbtt| |dS |dkrhdS |dkrr|dkrrdS |dkrt| jdkrdS |S |dkrd| jv rdS |dk rdS t| jS |dkr| jdkrd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rd+S |S d,|v rd-|vsd.|v s|d/v rdS |d-krd0S |d1krd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	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secondrF    ra   J/var/www/ideatree/venv/lib/python3.10/site-packages/parso/python/errors.pyrX      s   
)







rX   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.
    simple_stmtnewline;NrV   rT   )scopechildchild2ra   ra   rb   _iter_stmts`   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    rE   r&   zdict comprehensionzset comprehensionrV   rT   _COMP_FOR_TYPES)r   r_   r`   ra   ra   rb   rU   n   s   rU   c                 C   s   |   }dd |D dgkS )Nc                 S   s   g | ]}|j qS ra   rZ   .0nra   ra   rb   
<listcomp>   s    z%_is_future_import.<locals>.<listcomp>
__future__)get_from_names)import_from
from_namesra   ra   rb   _is_future_import}   s   rv   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%   )rV   AttributeErrorrW   rY   )r   rV   ra   ra   rb   rY      s   
rY   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*   parentrT   rV   r\   ra   ra   rb   _skip_parens_bottom_up   s   

r{   c                 C   s   dd | j D S )Nc                 s   s(    | ]}|j d ks|j dkr|V  qdS )paramr5   NrT   rn   ra   ra   rb   	<genexpr>   s   & z_iter_params.<locals>.<genexpr>)rV   )parent_nodera   ra   rb   _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:   Trt   N)rj   get_root_noderT   rv   )rt   found_docstringstmtra   ra   rb   _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.   )rT   rV   !_iter_definition_exprs_from_lists)rh   r   
check_exprra   rb   r      s   



z5_iter_definition_exprs_from_lists.<locals>.check_exprr   )rT   _STAR_EXPR_PARENTSrV   )r   rh   ra   r   rb   r      s   
r   c                 C   s@   g }| j d dd D ]}|jdv r|t|7 }q
|| q
|S )Nr   )r   testlist)rV   rT   r   append)	expr_stmtexprslist_ra   ra   rb   _get_expr_stmt_definition_exprs   s   
r   c                 C   s   | j d }tt|S Nr%   )rV   r/   r   )r
   r   ra   ra   rb   _get_for_stmt_definition_exprs   s   
r   c                 C   s   | j d jtv S r   rk   )argumentra   ra   rb   _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 )fstring_startNr}   ro   rh   ra   ra   rb   r~      s    z%_any_fstring_error.<locals>.<genexpr>rR   T)rT   anyrV   search_ancestor)r-   r\   ra   ra   rb   _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\   add_syntax_errorr   ra   ra   rb   __init__   s   
z_Context.__init__c                 C   s   |   o
| jjjdv S )N)async_funcdef
async_stmt)is_functionr\   ry   rT   r   ra   ra   rb   is_async_funcdef   s   z_Context.is_async_funcdefc                 C   s   | j jdkS )Nfuncdef)r\   rT   r   ra   ra   rb   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 )NrF   global_stmtnonlocal_stmtr   c                 S   s   g | ]}|j jqS ra   )namerZ   )ro   r|   ra   ra   rb   rq         z%_Context.add_name.<locals>.<listcomp>)ry   rT   r   r   r   r   extend
get_paramsr   
setdefaultrZ   )r   r   parent_typera   ra   rb   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 ra   rm   rn   ra   ra   rb   
<dictcomp>  r   z%_Context.finalize.<locals>.<dictcomp>z name '%s' is nonlocal and globalNz"no binding for nonlocal '%s' found)_analyze_namesr   r   rZ   KeyError	start_posr   r   r   r   r   r   r   )r   global_name_strsnonlocal_nameglobal_namemessage
error_namenonlocals_not_handledsearchra   ra   rb   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   rZ   r   	base_namer   r]   ra   rb   raise_5     z'_Context._analyze_names.<locals>.raise_r   FTr|   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\   rT   r   reversedr   getrZ   r   ry   r   is_definitionrV   )
r   globals_or_nonlocalsr]   r   paramsfound_global_or_nonlocalr   ry   r   r|   ra   r   rb   r   4  s>   


z_Context._analyze_namesc                 c   s"    | j | d V  | j   d S r   )r   r   popr   r\   ra   ra   rb   	add_blocka  s   z_Context.add_blockc                 C   s   t || j| dS )N)r   )r   r   r   ra   ra   rb   add_contextg  r   z_Context.add_contextc                 C   s   |  j | 7  _ d S r   )r   r   )r   child_contextra   ra   rb   close_child_contextj     z_Context.close_child_contextr   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   ra   ra   ra   rb   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_dictgrammarversion_infor-   )r   argskwargs	__class__ra   rb   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   
file_input)ry   rT   r   r   )r\   r   create_contextr   ra   rb   r   x  s   

z.ErrorFinder.initialize.<locals>.create_contextr   )r   r   context_indentation_countr   ra   r   rb   
initializew  s   	
zErrorFinder.initializec                    sD   |j dkr| |
 	 W d    dS 1 sw   Y  t |S )Nr    )rT   
visit_noder   visitr   r   ra   rb   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 blockssuiter%   ztoo many levels of indentationr   r   )_check_type_rulesrT   _BLOCK_STMTSr   r   rW   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorrV   r   r   )r   r\   r   ra   ra   rb   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)INDENTERROR_DEDENTrE   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   )rT   
token_typer/   get_next_leaf_split_prefixr   rZ   
startswithrematchr-   r   always_break_tokensrW   groupr   ry   r   r   r   
visit_leaf)r   leafspacingr   r  ry   r   ra   rb   r    s>   





zErrorFinder.visit_leafc                 C      |  |dd|  d S )N  IndentationError: 	add_issue)r   r  r   ra   ra   rb   r     r   z"ErrorFinder._add_indentation_errorc                 C   r  )N  SyntaxError: r  )r   r\   r   ra   ra   rb   r     r   zErrorFinder._add_syntax_errorc                 C   s&   |j d }|||f}| j|| d S )Nr   )r   r   r   )r   r\   coder   liner   ra   ra   rb   r    s   

zErrorFinder.add_issuec                 C   s8   | j   | j D ]\}}}| jt||| q
d S r   )r   r   r   valuesissuesr   r   )r   r  r   r\   ra   ra   rb   r     s   
zErrorFinder.finalize)r   r   r   __doc__r   r   r   r   r   r  r   r   r  r   __classcell__ra   ra   r   rb   r   n  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   ra   rb   r    s   zIndentationRule._get_messager   r   r   r  r  r  ra   ra   r   rb   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 )NrE   )r   r/   r   )r   r\   r  ra   ra   rb   get_node  s   z_ExpectIndentedBlock.get_nodec                 C   s   |j d jdkS )NrE   rd   rf   r   ra   ra   rb   is_issue  s   z_ExpectIndentedBlock.is_issueNr   r   r   r   r  r  ra   ra   ra   rb   r    s    r  c                   @   s   e Zd ZeZdS )ErrorFinderConfigN)r   r   r   r   normalizer_classra   ra   ra   rb   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   ra   rb   r    s   zSyntaxRule._get_messager  ra   ra   r   rb   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   ra   ra   rb   r       z_InvalidSyntaxRule.get_nodec                 C   s8   |  jdk}|rt| jj|r| j|| jd d S |S )Nr   r   )r   rT   r   r#  r-   r  fstring_message)r   r\   errorra   ra   rb   r    s   z_InvalidSyntaxRule.is_issueN)r   r   r   r   r'  r  r  ra   ra   ra   rb   r%    s
    r%  rC   rm   c                   @   r  )_AwaitOutsideAsyncz'await' outside async functionc                 C   s   | j j  S r   )r#  r   r   r   r  ra   ra   rb   r        z_AwaitOutsideAsync.is_issuec                 C      |j S r   ry   r   ra   ra   rb   get_error_node#  s   z!_AwaitOutsideAsync.get_error_nodeN)r   r   r   r   r  r.  ra   ra   ra   rb   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   rT   )r   r  in_loopblockra   ra   rb   r  ,  s   
z_BreakOutsideLoop.is_issueNr   r   r   r   r  ra   ra   ra   rb   r2  (      r2  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 )	NFr3  Tr   finallyr!   r   )	r#  r   r   rT   rV   r   r-   r  message_in_finally)r   r  r4  r5  
last_blockra   ra   rb   r  9  s   


z_ContinueChecks.is_issueN)r   r   r   r   r=  r  ra   ra   ra   rb   r:  4      r:  fromc                   @   r  )_YieldFromCheckz"'yield from' inside async functionc                 C   s   |j j S r   r-  r*  ra   ra   rb   r  O  r&  z_YieldFromCheck.get_nodec                 C   s   |j jdko| jj S )N	yield_arg)ry   rT   r#  r   r   r*  ra   ra   rb   r  R  s   
z_YieldFromCheck.is_issueNr  ra   ra   ra   rb   rA  K  r/  rA  r   c                   @   r9  )_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   rZ   r   r*  ra   ra   rb   r  \  s   z_NameChecks.is_issueN)r   r   r   r   message_noner  ra   ra   ra   rb   rC  W  r?  rC  r:   c                   @   r1  )_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 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   cra   ra   rb   r~   j  s    z)_StringChecks.is_issue.<locals>.<genexpr>Trzutf-8ignorez(unicode error) r   z(value error) )string_prefixlowerr   rZ   _get_payloadencodecodecsescape_decodeunicode_escape_decodewarningscatch_warningsfilterwarningsUnicodeDecodeErrorr  r[   
ValueError)r   r  rN  payloadfuncera   ra   rb   r  g  s0   




&$$z_StringChecks.is_issueNr6  ra   ra   ra   rb   rF  c  r7  rF  *c                   @   r1  )
_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   ra   ra   rb   rq     s    z'_StarCheck.is_issue.<locals>.<listcomp>r   )ry   rT   rV   indexrW   )r   r  r   afterra   ra   rb   r    s   z_StarCheck.is_issueNr6  ra   ra   ra   rb   r^    r7  r^  r'   c                   @   r1  )_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    )ry   rT   get_next_siblingrl   )r   r  r   ra   ra   rb   r    s   z_StarStarCheck.is_issueNr6  ra   ra   ra   rb   rd    s    rd  r3   returnc                   @   r$  )_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                 C   r,  r   r-  r*  ra   ra   rb   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   rf  return_stmtT)r#  r   r\   rT   r  r  rZ   r   r   iter_yield_exprsry   r*  ra   ra   rb   r    s   z_ReturnAndYieldChecks.is_issueN)r   r   r   r   message_async_yieldr  r  ra   ra   ra   rb   rg    s
    rg  r<   c                   @   r  )_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 C   s   |j dkrdS d|j v S )NrR   FrG  )rT   rN  rO  )r   r:   ra   ra   rb   _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)rV   rm  )r   r\   r_   first_is_bytesr:   ra   ra   rb   r    s   

z_BytesAndStringMix.is_issueN)r   r   r   r   rm  r  ra   ra   ra   rb   rl    s    rl  import_as_namesc                   @   r1  )_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 )NrE   r`  r+   T)rV   ry   r   ra   ra   rb   r    s   z_TrailingImportComma.is_issueNr6  ra   ra   ra   rb   rp    s    rp  rt   c                   @   r1  )_ImportStarInFunctionz%import * only allowed at module levelc                 C   s   |  o
| jjjd uS r   )is_star_importr#  r   r   r   ra   ra   rb   r    r   z_ImportStarInFunction.is_issueNr6  ra   ra   ra   rb   rq    r7  rq  c                   @   r1  )_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"      annotationsbracesznot a chancer   barry_as_FLUFLz-Seriously I'm not implementing this :) ~ Davez future feature %s is not defined)
rv   r   	get_pathsrZ   r/   ALLOWED_FUTURESr#  r-   r   r  )r   r\   	from_namefuture_namer   allowed_futuresmr   ra   ra   rb   r    s&   
z_FutureImportRule.is_issueNr6  ra   ra   ra   rb   rs    r7  rs  rL   c                   @   r1  )_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)ry   rT   r   rz   ra   ra   rb   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-   ry   r{   rT   r   rV   r  rl   message_iterable_unpacking)r   r\   r  ancestorra   ra   rb   r    s&   	z_StarExprRule.is_issueN)r   r   r   r  r  ra   ra   ra   rb   r    r7  r  )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 )NFrF   r   rE   )rT   r   rV   ry   )r\   r  r]   r   ra   rb   r     s   z3_StarExprParentRule.is_issue.<locals>.is_definitionc                 S   s   g | ]}|d kr|qS )r`  ra   rJ  ra   ra   rb   rq   "  s    z0_StarExprParentRule.is_issue.<locals>.<listcomp>c                 S   s   g | ]	}|j d kr|qS )rL   r}   rJ  ra   ra   rb   rq   #  s    r%   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentr   r      z1too many expressions in star-unpacking assignment)ry   rV   rW   r#  r-   r  rb  )r   r\   r   rQ   r   countra   r  rb   r    s"   	z_StarExprParentRule.is_issueNr   r   r   r  ra   ra   ra   rb   r        r  r   c                   @   r  )_AnnotatorRulezillegal target for annotationc                 C   r,  r   r-  r   ra   ra   rb   r  7  rh  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   r`  r   r*   r,   r.   r/   rE   r   r@   rF   Tz,only single target (not %s) can be annotatedr   )ry   rV   rY   rw   rT   r  )r   r\   r]   lhsrV   rF   r   ra   ra   rb   r  :  s.   



z_AnnotatorRule.is_issueNr  ra   ra   ra   rb   r  1  s    r  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   )rV   r#  r-   rY   rT   r  r   ry   )r   r\   r_   r   ra   ra   rb   r  X  s   

z_ArgumentRule.is_issueNr  ra   ra   ra   rb   r  V  r  r  r   c                   @   r1  )_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 C   s   | j jjd u S r   )r#  r   r   r   ra   ra   rb   r  t  r+  z!_NonlocalModuleLevelRule.is_issueNr6  ra   ra   ra   rb   r  p  r7  r  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 )Nrt  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)r#  r-   r   ra   ra   rb   r   z  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 )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)setrV   rT   r   rW   r  rZ   r#  r-   formatadd)r   r\   arg_setkw_onlykw_unpacking_onlyr   r_   r   ra   ra   rb   r    sD   




z_ArglistRule.is_issueN)r   r   r   propertyr   r  ra   ra   ra   rb   r  x  s    
r  r_  r   c                   @   r1  )_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 )NFr5   r]  Tz.duplicate argument '%s' in function definitionr   )	r  r   rT   rZ   r   r  r  defaultra  )r   r\   param_namesdefault_only	star_seenpr   ra   ra   rb   r    s0   

z_ParameterRule.is_issueNr6  ra   ra   ra   rb   r    s    r  r   c                   @   r1  )_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   )rV   r  r   )r   r   default_exceptexcept_clausera   ra   rb   r    s   z_TryStmtRule.is_issueNr6  ra   ra   ra   rb   r    r7  r  rR   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_contentsrV   )r   format_specdepthra   ra   rb   _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   r5   r  r"   fstring_conversion)srL  ar   fstring_format_spec)	r  message_nestedrV   get_codemessage_exprrT   rZ   message_conversionr  )r   fstring_exprr  rK   
children_2
conversionr   r  ra   ra   rb   _check_fstring_expr  s"   






z _FStringRule._check_fstring_exprc                 C   s   |  |jdd  d S )Nr%   rE   r  )r   rR   ra   ra   rb   r    s   z_FStringRule.is_issuer   c                 C   s$   |D ]}|j dkr| || qd S )Nr  )rT   r  )r   rV   r  fstring_contentra   ra   rb   r    s
   
z$_FStringRule._check_fstring_contents)r   )r   r   r   _fstring_grammarr  r  r  r  r  r  r  ra   ra   ra   rb   r    s    r  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r@| jjdk r1d}n|jd d	kr<d
}nd}n|dkrV|dkrV| jjdk rRd}nd
}n|dkrot|jdkro| jjdk rkd}nud}nq|dv r|j dkr|d}nd|j dkr|r|dkrd}n|dkrd}|jd d d D ]
}	| |	||| qn;| |||| n1|dkr|jdkrd}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rd }n|d!v rL|jd" d#krd$}n|jd% d&krd}n|jd' }|j d(ks%J |jd" dkr0d)}n|r>|jd" dkr>d*}n|rK|jd" d+krKd,}n|d-kr^| jjdk r[d}nd.}n|d/v rx|jd d d D ]}	| |	||| qknhd0|v r|d1ksd2|v s|d3v rd}nQ|d1kr|r| jjd4krd5}n7| 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r|rd8| }
n| jjdk rd9nd:}d;||r d<nd=|g}
| j	||
d d S d S )>Nr   r   r   r   r    r!   r$   r%   r&   r(   r)   r0   r1   )r*   r.   r=   r4   r   r*   r,   r.   r/   r2   r3   r5   r6   r7   r8   r9   z+assignment to yield expression not possibler   r>   r?   r@   r   rC   rD   r   r'   rE   rF   rG   rH   rI   rJ   rR   rS   )r   r   r   rK   rL   rM   rN   r   rQ   r  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rT   rV   rU   r#  r-   rW   _check_assignmentrZ   r[   r  ry   r{   r   join)r   r\   is_deletionis_namedexpris_aug_assignr(  r]   r_   r`   rh   r   rF   r  r  ra   ra   rb   r    s   













z&_CheckAssignmentRule._check_assignmentN)FFF)r   r   r   r  ra   ra   ra   rb   r    s    r  r   c                   @   r1  )_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)rV   rT   r  ry   r#  r   r   )r   r\   r  ra   ra   rb   r    s   


z_CompForRule.is_issueNr6  ra   ra   ra   rb   r    r7  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%   r  r   r!   r   r   )r  r   r   r@   rF   rE   r*   FT)targetr   )
rV   rT   r#  r-   r  rY   r  extended_messager  rX   )r   r\   	augassignr  before_equalr  ra   ra   rb   r    s*   



z_ExprStmtRule.is_issueN)r   r   r   r   r  r  ra   ra   ra   rb   r    s    r  	with_itemc                   @   r  )_WithItemRulec                 C   s   |  |jd  d S Nr   )r  rV   )r   r  ra   ra   rb   r    s   z_WithItemRule.is_issueNr  ra   ra   ra   rb   r    r  r  r  c                   @   r  )_DelStmtRulec                 C   s*   |j d }|jdkr| j|dd d S d S )Nr%   r  T)r  rV   rT   r  )r   r  rh   ra   ra   rb   r    s   

z_DelStmtRule.is_issueNr  ra   ra   ra   rb   r    r  r  r  c                   @   r  )_ExprListRulec                 C   s$   |j d d d D ]}| | qd S r  )rV   r  )r   r  rK   ra   ra   rb   r    s   z_ExprListRule.is_issueNr  ra   ra   ra   rb   r    r  r  r
   c                   @   r  )_ForStmtRulec                 C   s&   |j d }|jdkr| | d S d S )Nr%   r  r  )r   r
   r  ra   ra   rb   r    s   

z_ForStmtRule.is_issueNr  ra   ra   ra   rb   r    r  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"   rx   )r\   ry   ra   ra   rb   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%   )rT   rV   r   r   )r   comp)r   ra   rb   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   rV   rT   rl   )r\   has_ancestorsrh   )r  ra   rb   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   )rT   rZ   )ro   rK   ra   ra   rb   rq     s    z+_NamedExprRule.is_issue.<locals>.<listcomp>r   zGassignment expression cannot rebind comprehension iteration variable %rT)r  )	rV   r  r/   r#  r   r\   rT   rZ   r  )r   r  r_   r  r   r  
search_allnamelistra   )r   r  rb   r    s(   
	z_NamedExprRule.is_issueNr  ra   ra   ra   rb   r    s    r  )ErR  rU  r  
contextlibr   parso.normalizerr   r   r   r   parso.python.tokenizer   r   r   r   r   rz  rl   rX   rj   rU   rv   rY   r{   r   r   r   r   r   r   r   r   r   r  register_ruler  r   r"  r%  r)  r2  r:  rA  rC  rF  r^  rd  rg  rl  rp  rq  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ra   ra   ra   rb   <module>   s   J	
 t








 





	


$

$


5


(
x

"



