o
    MThٿ                     @   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)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   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	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)noder0   type_comprehensionfirstsecondrJ    rf   V/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/parso/python/errors.pyr]      s   
/









r]   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r[   rY   )scopechildchild2rf   rf   rg   _iter_stmtsm   s   


ro   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%   r1   zlist comprehensionzgenerator expressionr    rI   r&   zdict comprehensionzset comprehensionr[   rY   _COMP_FOR_TYPES)r   rd   re   rf   rf   rg   rZ   {   s   rZ   c                 C   s   |   }dd |D dgkS )Nc                 S   s   g | ]}|j qS rf   r_   .0nrf   rf   rg   
<listcomp>   s    z%_is_future_import.<locals>.<listcomp>
__future__)get_from_names)import_from
from_namesrf   rf   rg   _is_future_import   s   r{   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%   )r[   AttributeErrorr\   r^   )r   r[   rf   rf   rg   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-   parentrY   r[   ra   rf   rf   rg   _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 )paramr8   NrY   rs   rf   rf   rg   	<genexpr>   s   & z_iter_params.<locals>.<genexpr>)r[   )parent_noderf   rf   rg   _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>   Try   N)ro   get_root_noderY   r{   )ry   found_docstringstmtrf   rf   rg   _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   r1   )rY   r[   !_iter_definition_exprs_from_lists)rm   r   
check_exprrf   rg   r      s   



z5_iter_definition_exprs_from_lists.<locals>.check_exprr   )rY   _STAR_EXPR_PARENTSr[   )r   rm   rf   r   rg   r      s   
r   c                 C   s@   g }| j d dd D ]}|jdv r|t|7 }q
|| q
|S )Nr   )r   testlist)r[   rY   r   append)	expr_stmtexprslist_rf   rf   rg   _get_expr_stmt_definition_exprs   s   
r   c                 C   s   | j d }tt|S Nr%   )r[   r2   r   )r
   r   rf   rf   rg   _get_for_stmt_definition_exprs   s   
r   c                 C   s   | j d jtv S r   rp   )argumentrf   rf   rg   _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   rt   rm   rf   rf   rg   r      s    z%_any_fstring_error.<locals>.<genexpr>rW   T)rY   anyr[   search_ancestor)r0   ra   rf   rf   rg   _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)	ra   blocksparent_context_used_name_dict_global_names_local_params_names_nonlocal_names_nonlocal_names_in_subscopes_add_syntax_error)selfra   add_syntax_errorr   rf   rf   rg   __init__   s   
z_Context.__init__c                 C   s   |   o
| jjjdv S )N)async_funcdef
async_stmt)is_functionra   r~   rY   r   rf   rf   rg   is_async_funcdef  s   z_Context.is_async_funcdefc                 C   s   | j jdkS )Nfuncdef)ra   rY   r   rf   rf   rg   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 )NrJ   global_stmtnonlocal_stmtr   c                 S   s   g | ]}|j jqS rf   )namer_   )rt   r   rf   rf   rg   rv         z%_Context.add_name.<locals>.<listcomp>)r~   rY   r   r   r   r   extend
get_paramsr   
setdefaultr_   )r   r   parent_typerf   rf   rg   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 rf   rr   rs   rf   rf   rg   
<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   global_name_strsnonlocal_nameglobal_namemessage
error_namenonlocals_not_handledsearchrf   rf   rg   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   rb   rf   rg   raise_B     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)ra   rY   r   reversedr   getr_   r   r~   r   is_definitionr[   )
r   globals_or_nonlocalsrb   r   paramsfound_global_or_nonlocalr   r~   r   r   rf   r   rg   r   A  s>   


z_Context._analyze_namesc                 c   s"    | j | d V  | j   d S r   )r   r   popr   ra   rf   rf   rg   	add_blockn  s   z_Context.add_blockc                 C   s   t || j| dS )N)r   )r   r   r   rf   rf   rg   add_contextt  r   z_Context.add_contextc                 C   s   |  j | 7  _ d S r   )r   r   )r   child_contextrf   rf   rg   close_child_contextw     z_Context.close_child_contextr   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   rf   rf   rf   rg   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_infor0   )r   argskwargs	__class__rf   rg   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)r~   rY   r   r   )ra   r   create_contextr   rf   rg   r     s   

z.ErrorFinder.initialize.<locals>.create_contextr   )r   r   context_indentation_countr   rf   r   rg   
initialize  s   	
zErrorFinder.initializec                    sD   |j dkr| |
 	 W d    dS 1 sw   Y  t |S )Nr    )rY   
visit_noder   visitr   r   rf   rg   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_rulesrY   _BLOCK_STMTSr   r   r\   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorr[   r   r   )r   ra   r   rf   rf   rg   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_DEDENTrI   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   )rY   
token_typer2   get_next_leaf_split_prefixr   r_   
startswithrematchr0   r   always_break_tokensr\   groupr   r~   r   r   r   
visit_leaf)r   leafspacingr   r  r~   r   rf   rg   r
    s>   





zErrorFinder.visit_leafc                 C      |  |dd|  d S )N  IndentationError: 	add_issue)r   r  r   rf   rf   rg   r     r   z"ErrorFinder._add_indentation_errorc                 C   r  )N  SyntaxError: r  )r   ra   r   rf   rf   rg   r     r   zErrorFinder._add_syntax_errorc                 C   s&   |j d }|||f}| j|| d S )Nr   )r   r   r   )r   ra   coder   liner   rf   rf   rg   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   ra   rf   rf   rg   r     s   
zErrorFinder.finalize)r   r   r   __doc__r   r   r   r   r   r
  r   r   r  r   __classcell__rf   rf   r   rg   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   ra   r   rf   rg   r    s   zIndentationRule._get_messager   r   r   r  r  r  rf   rf   r   rg   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 )NrI   )r  r2   r  )r   ra   r  rf   rf   rg   get_node  s   z_ExpectIndentedBlock.get_nodec                 C   s   |j d jdkS )NrI   ri   rk   r   rf   rf   rg   is_issue  s   z_ExpectIndentedBlock.is_issueNr   r   r   r   r"  r#  rf   rf   rf   rg   r!    s    r!  c                   @   s   e Zd ZeZdS )ErrorFinderConfigN)r   r   r   r   normalizer_classrf   rf   rf   rg   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   _normalizerr0   r  r   rf   rg   r    s   zSyntaxRule._get_messager  rf   rf   r   rg   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   rf   rf   rg   r"       z_InvalidSyntaxRule.get_nodec                 C   s8   |  jdk}|rt| jj|r| j|| jd d S |S )Nr   r   )r  rY   r   r(  r0   r  fstring_message)r   ra   errorrf   rf   rg   r#    s   z_InvalidSyntaxRule.is_issueN)r   r   r   r   r,  r"  r#  rf   rf   rf   rg   r*    s
    r*  rG   rr   c                   @   r   )_AwaitOutsideAsyncz'await' outside async functionc                 C   s   | j j  S r   )r(  r   r   r   r  rf   rf   rg   r#  -     z_AwaitOutsideAsync.is_issuec                 C      |j S r   r~   r   rf   rf   rg   get_error_node0  s   z!_AwaitOutsideAsync.get_error_nodeN)r   r   r   r   r#  r3  rf   rf   rf   rg   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   rY   )r   r  in_loopblockrf   rf   rg   r#  9  s   
z_BreakOutsideLoop.is_issueNr   r   r   r   r#  rf   rf   rf   rg   r7  5      r7  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 )	NFr8  Tr   finallyr!   r   )	r(  r   r   rY   r[   r   r0   r  message_in_finally)r   r  r9  r:  
last_blockrf   rf   rg   r#  F  s   


z_ContinueChecks.is_issueN)r   r   r   r   rB  r#  rf   rf   rf   rg   r?  A      r?  fromc                   @   r   )_YieldFromCheckz"'yield from' inside async functionc                 C   s   |j j S r   r2  r/  rf   rf   rg   r"  \  r+  z_YieldFromCheck.get_nodec                 C   s   |j jdko| jj S )N	yield_arg)r~   rY   r(  r   r   r/  rf   rf   rg   r#  _  s   
z_YieldFromCheck.is_issueNr$  rf   rf   rf   rg   rF  X  r4  rF  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/  rf   rf   rg   r#  i  s   z_NameChecks.is_issueN)r   r   r   r   message_noner#  rf   rf   rf   rg   rH  d  rD  rH  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rt   crf   rf   rg   r   z  s    z)_StringChecks.is_issue.<locals>.<genexpr>Trzutf-8ignorez(unicode error) r   z(value error) )string_prefixlowerr   r_   _get_payloadencodecodecsescape_decodeunicode_escape_decodewarningscatch_warningsfilterwarningsUnicodeDecodeErrorr  r`   
ValueError)r   r  rS  payloadfuncerf   rf   rg   r#  w  s0   




&$$z_StringChecks.is_issueN)r   r   r   sysr   r   r#  rf   rf   rf   rg   rK  p  s
    
rK  *c                   @   r6  )
_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   rf   rf   rg   rv     s    z'_StarCheck.is_issue.<locals>.<listcomp>r   )r~   rY   r[   indexr\   )r   r  r   afterrf   rf   rg   r#    s   z_StarCheck.is_issueNr;  rf   rf   rf   rg   rd    r<  rd  r'   c                   @   r6  )_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    )r~   rY   get_next_siblingrq   )r   r  r   rf   rf   rg   r#    s   z_StarStarCheck.is_issueNr;  rf   rf   rf   rg   rj    s    rj  r6   returnc                   @   r)  )_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                 C   r1  r   r2  r/  rf   rf   rg   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   rl  return_stmtT)r(  r   ra   rY   r  r"  r_   r   r   iter_yield_exprsr~   r/  rf   rf   rg   r#    s   z_ReturnAndYieldChecks.is_issueN)r   r   r   r   message_async_yieldr"  r#  rf   rf   rf   rg   rm    s
    rm  r@   c                   @   r   )_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 C   s   |j dkrdS d|j v S )NrW   FrL  )rY   rS  rT  )r   r>   rf   rf   rg   _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)r[   rs  )r   ra   rd   first_is_bytesr>   rf   rf   rg   r#    s   

z_BytesAndStringMix.is_issueN)r   r   r   r   rs  r#  rf   rf   rf   rg   rr    s    rr  import_as_namesc                   @   r6  )_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 )NrI   rf  r.   T)r[   r~   r   rf   rf   rg   r#    s   z_TrailingImportComma.is_issueNr;  rf   rf   rf   rg   rv    s    rv  ry   c                   @   r6  )_ImportStarInFunctionz%import * only allowed at module levelc                 C   s   |  o
| jjjd uS r   )is_star_importr(  r   r   r   rf   rf   rg   r#    r   z_ImportStarInFunction.is_issueNr;  rf   rf   rf   rg   rw    r<  rw  c                   @   r6  )_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)
r{   r   	get_pathsr_   r2   ALLOWED_FUTURESr(  r0   r   r  )r   ra   	from_namefuture_namer   allowed_futuresmr   rf   rf   rg   r#    s&   
z_FutureImportRule.is_issueNr;  rf   rf   rf   rg   ry    r<  ry  rP   c                   @   r6  )_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)r~   rY   r   r   rf   rf   rg   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(  r0   r~   r   rY   r   r[   r  rq   message_iterable_unpacking)r   ra   r  ancestorrf   rf   rg   r#     s&   	z_StarExprRule.is_issueN)r   r   r   r  r#  rf   rf   rf   rg   r    r<  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 )NFrJ   r   rI   )rY   r   r[   r~   )ra   r  rb   r   rf   rg   r   $  s   z3_StarExprParentRule.is_issue.<locals>.is_definitionc                 S   s   g | ]}|d kr|qS )rf  rf   rO  rf   rf   rg   rv   2  s    z0_StarExprParentRule.is_issue.<locals>.<listcomp>c                 S   s   g | ]	}|j d kr|qS )rP   r   rO  rf   rf   rg   rv   3  s    r%   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentr   r      z1too many expressions in star-unpacking assignment)r~   r[   r\   r(  r0   r  rh  )r   ra   r   rV   r   countrf   r  rg   r#  #  s"   	z_StarExprParentRule.is_issueNr   r   r   r#  rf   rf   rf   rg   r  !      r  r   c                   @   r   )_AnnotatorRulezillegal target for annotationc                 C   r1  r   r2  r   rf   rf   rg   r"  G  rn  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   rf  r   r-   r/   r1   r2   rI   r   rD   rJ   Tz,only single target (not %s) can be annotatedr   )r~   r[   r^   r|   rY   r  )r   ra   rb   lhsr[   rJ   r   rf   rf   rg   r#  J  s.   



z_AnnotatorRule.is_issueNr$  rf   rf   rf   rg   r  A  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   )r[   r(  r0   r^   rY   r  r   r~   )r   ra   rd   r   rf   rf   rg   r#  h  s   

z_ArgumentRule.is_issueNr  rf   rf   rf   rg   r  f  r  r  r   c                   @   r6  )_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 C   s   | j jjd u S r   )r(  r   r   r   rf   rf   rg   r#    r0  z!_NonlocalModuleLevelRule.is_issueNr;  rf   rf   rf   rg   r    r<  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 )Nrz  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)r(  r0   r   rf   rf   rg   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 )NFrf  r   r   r   T)rc  r'   rc  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)setr[   rY   r   r\   r  r_   r(  r0   formatadd)r   ra   arg_setkw_onlykw_unpacking_onlyr   rd   r   rf   rf   rg   r#    sD   




z_ArglistRule.is_issueN)r   r   r   propertyr   r#  rf   rf   rf   rg   r    s    
r  re  r   c                   @   r6  )_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 )NFr8   rc  Tz.duplicate argument '%s' in function definitionr   )	r  r   rY   r_   r   r  r  defaultrg  )r   ra   param_namesdefault_only	star_seenpr   rf   rf   rg   r#    s0   

z_ParameterRule.is_issueNr;  rf   rf   rf   rg   r    s    r  r   c                   @   r6  )_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"   )elserA  exceptr   )r[   r  r   )r   r   default_exceptexcept_clauserf   rf   rg   r#    s   z_TryStmtRule.is_issueNr;  rf   rf   rf   rg   r    r<  r  rW   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_contentsr[   )r   format_specdepthrf   rf   rg   _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   r8   r  r"   fstring_conversion)srQ  ar   fstring_format_spec)	r  message_nestedr[   get_codemessage_exprrY   r_   message_conversionr  )r   fstring_exprr  rO   
children_2
conversionr   r  rf   rf   rg   _check_fstring_expr  s"   






z _FStringRule._check_fstring_exprc                 C   s   |  |jdd  d S )Nr%   rI   r  )r   rW   rf   rf   rg   r#    s   z_FStringRule.is_issuer   c                 C   s$   |D ]}|j dkr| || qd S )Nr  )rY   r  )r   r[   r  fstring_contentrf   rf   rg   r    s
   
z$_FStringRule._check_fstring_contents)r   )r   r   r   _fstring_grammarr  r  r  r  r  r#  r  rf   rf   rf   rg   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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,   r3   r4   )r-   r1   rA   r7   r   r-   r/   r1   r2   r5   r6   r8   r9   r:   r;   r<   r=   z+assignment to yield expression not possibler   rB   rC   rD   r   rG   rH   r   r'   rU   rI   rJ   rK   rL   rM   rN   rW   rX   )r   r   r   rO   rP   rQ   rR   r   rV   r  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rY   r[   rZ   r(  r0   r\   _check_assignmentr_   r`   r  r~   r   r   join)r   ra   is_deletionis_namedexpris_aug_assignr-  rb   rd   re   rm   r   rJ   r  r  rf   rf   rg   r    s   

















z&_CheckAssignmentRule._check_assignmentN)FFF)r   r   r   r  rf   rf   rf   rg   r    s    r  r   c                   @   r6  )_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)r[   rY   r  r~   r(  r   r   )r   ra   r  rf   rf   rg   r#    s   


z_CompForRule.is_issueNr;  rf   rf   rf   rg   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%   r  r   r!   r   r   )r  r   r   rD   rJ   rI   r-   FT)targetr   )
r[   rY   r(  r0   r  r^   r  extended_messager  r]   )r   ra   	augassignr  before_equalr  rf   rf   rg   r#    s*   



z_ExprStmtRule.is_issueN)r   r   r   r   r  r#  rf   rf   rf   rg   r    s    r  	with_itemc                   @   r  )_WithItemRulec                 C   s   |  |jd  d S Nr   )r  r[   )r   r  rf   rf   rg   r#    s   z_WithItemRule.is_issueNr  rf   rf   rf   rg   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  r[   rY   r  )r   r  rm   rf   rf   rg   r#    s   

z_DelStmtRule.is_issueNr  rf   rf   rf   rg   r    r  r  r  c                   @   r  )_ExprListRulec                 C   s$   |j d d d D ]}| | qd S r  )r[   r  )r   r  rO   rf   rf   rg   r#    s   z_ExprListRule.is_issueNr  rf   rf   rf   rg   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  rf   rf   rg   r#    s   

z_ForStmtRule.is_issueNr  rf   rf   rf   rg   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"   r}   )ra   r~   rf   rf   rg   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%   )rY   r[   r   r   )r   comp)r   rf   rg   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   r[   rY   rq   )ra   has_ancestorsrm   )r  rf   rg   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   )rY   r_   )rt   rO   rf   rf   rg   rv   $  s    z+_NamedExprRule.is_issue.<locals>.<listcomp>r   zGassignment expression cannot rebind comprehension iteration variable %rT)r  )	r[   r  r2   r(  r   ra   rY   r_   r  )r   r  rd   r  r   r  
search_allnamelistrf   )r   r  rg   r#    s(   
	z_NamedExprRule.is_issueNr  rf   rf   rf   rg   r    s    r  )FrW  rb  rZ  r  
contextlibr   parso.normalizerr   r   r   r   parso.python.tokenizer   r   r   r   r   r  rq   r]   ro   rZ   r{   r^   r   r   r   r   r   r   r   r   r   r   r  register_ruler!  r%  r'  r*  r.  r7  r?  rF  rH  rK  rd  rj  rm  rr  rv  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rf   rf   rf   rg   <module>   s   V	
 t








#





	


$

$


5


( 


"



