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