
    cX                     H	   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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z G d d      Z G d de      Z  G d de	      Z!e jE                  d       G d  d!e!             Z# G d" d#e      Z$ G d$ d%e	      Z%e jE                  d       G d& d'e%             Z&e jE                  d()       G d* d+e%             Z'e jE                  d,)       G d- d.e%             Z(e jE                  d/)       G d0 d1e%             Z)e jE                  d2)       G d3 d4e%             Z*e jE                  d5       G d6 d7e%             Z+e jE                  d8       G d9 d:e%             Z,e jE                  d;)       G d< d=e%             Z-e jE                  d>)       G d? d@e%             Z.e jE                  dA)      e jE                  dB)       G dC dDe%                    Z/e jE                  dE       G dF dGe%             Z0e jE                  dH       G dI dJe%             Z1e jE                  dK       G dL dMe%             Z2e jE                  dK       G dN dOe%             Z3e jE                  dP       G dQ dRe%             Z4e jE                  eS       G dT dUe%             Z5e jE                  dV       G dW dXe%             Z6e jE                  dY       G dZ d[e%             Z7e jE                  d\       G d] d^e%             Z8e jE                  d_       G d` dae%             Z9e jE                  db      e jE                  dc       G dd dee%                    Z:e jE                  df       G dg dhe%             Z;e jE                  di       G dj dke%             Z< G dl dme%      Z=e jE                  dn       G do dpe=             Z>e jE                  dq       G dr dse=             Z?e jE                  dt       G du dve=             Z@e jE                  dw       G dx dye=             ZAe jE                  dz       G d{ d|e=             ZBe jE                  d}       G d~ de=             ZCe jE                  d       G d de=             ZDy)    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                    | j                   }|dk(  ry|dk(  rt        |       }| j                  d d \  }}||S |j                   dk(  r,|dk  ry|j                  d   d	k(  s|j                  d
   dk(  ryy|dk(  r:|dk(  s4t        | j                        dk(  r| j                  d   j                   dk(  ry|dk(  rt	        t        |       |      S |dk(  ry|dk(  r|dk(  ry|dk(  rt        | j                        dkD  ry|S |dk(  r*d| j                  v ry|dk  ryt        | j                        S |dk(  r| j                  dk(  ry|dk(  ry|dv ry|d k(  ry|d!k(  ry"|d#v ry| j                  d
   d$k(  ry%| j                  d&   j                   d'k(  rH| j                  d&   }|j                  d
   dk(  ry(|j                  d
   dk(  ry)|j                  d
   d*k(  ry+|S d,|v rd-|vsd.|v s|d/v ry0|d-k(  ry1|d2k(  ry|d3k(  ry4|S )5Nlambdeflambdaatom   dictorsetmaker      literal   :r   **dict literal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
expressionstarredr   fstringf-string expression)type_get_comprehension_typechildrenlen_get_rhs_name_remove_parensvaluestr)noder/   type_comprehensionfirstsecondrH   s          5/usr/lib/python3/dist-packages/parso/python/errors.pyr[   r[      s^   IIE		&/5bq)v$  [[,, ??1%,0Bd0J)(SL3'1,q1A1F1F/1Yc\ !5wGGc\c\fm!c\c$--014 R LQ 
)	djj %Vtzz?"	*	u!4	,		1	1	,	!	&'	(	(==w&%]]2##y0mmB'G"c)&!!!$+"!!!$+" L 
5[5e&&	+		&	&	)	$L    c              #      K   | j                   D ]@  }|j                  dk(  r+|j                   D ]  }|j                  dk(  s|dk(  r|  =| B yw)zB
    Iterates over all statements and splits up  simple_stmt.
    simple_stmtnewline;NrY   rW   )scopechildchild2s      rd   _iter_stmtsrn   `   s[       ::&.. ;;)+v}
 Ks   AAc                    | j                   d d \  }}|j                  dk(  r&|j                   d   j                  t        v r|dk(  ryy|j                  dk(  r3|j                   d   j                  t        v r|j                   d   d	k(  ry
yy )Nr!   r   r'   r0   zlist comprehensionzgenerator expressionr"   rG   r(   zdict comprehensionzset comprehensionrY   rW   _COMP_FOR_TYPES)r    rb   rc   s      rd   rX   rX   n   s    MM"1%ME6{{o%&//!*<*A*A_*TC<')	(	(V__R-@-E-E-X??1$'&re   c                 h    | j                         }|D cg c]  }|j                   c}dgk(  S c c}w )N
__future__)get_from_namesr]   )import_from
from_namesns      rd   _is_future_importrx   }   s1    
 ++-J'(AGG(\N::(s   /c                     	 | j                   }t        |      dk(  r |d   dk(  rt        | j                   d         S | S # t        $ r Y | S w xY w)z_
    Returns the inner part of an expression like `(foo)`. Also removes nested
    parens.
    r$   r   r,   r'   )rY   rZ   r\   AttributeError)r    rY   s     rd   r\   r\      s]    
4== x=A(1+"4!$--"233K   Ks   > 	A
Ac                     | j                   <| j                   } | j                  dk7  s| j                  d   dk7  r| S | j                   <y)za
    Returns an ancestor node of an expression, skipping all levels of parens
    bottom-up.
    Nr    r   r,   parentrW   rY   r_   s    rd   _skip_parens_bottom_upr      sI    
 ++
!{{99$--"2c"9K ++
! re   c                 (    d | j                   D        S )Nc              3   ^   K   | ]%  }|j                   d k(  s|j                   dk(  s"| ' yw)paramr7   NrW   ).0rw   s     rd   	<genexpr>z_iter_params.<locals>.<genexpr>   s&     Y!qvv/@AFFjDXAYs   #--)rY   )parent_nodes    rd   _iter_paramsr      s    Y{++YYre   c                     d}t        | j                               D ]9  }|j                  dk(  r|sd}|| k(  r y|j                  dk(  rt        |      r9 y y)z@
    Checks if the import is the first statement of a file.
    Fr<   Tru   N)rn   get_root_noderW   rx   )ru   found_docstringstmts      rd   _is_future_import_firstr      sa     OK5578 	99 ;99%*;D*A	re   c              #      K   fd| j                   t        v r(| j                  d d d   D ]  } |      E d {     y  |       E d {    y 7 7 w)Nc              3     K   | j                   dk(  rl| j                  d   dk(  rC| j                  d   }|j                   dk(  rt        |      E d {    y  |      E d {    y | j                  d   dk(  r y |  y 7 27 #w)Nr    r   r,   r'   r   r0   )rW   rY   !_iter_definition_exprs_from_lists)rl   r   
check_exprs     rd   r   z5_iter_definition_exprs_from_lists.<locals>.check_expr   s     ::~~a C' %q 1 %%8@OOO  *-888"c)## P 9s$   ABBB"B#"BBr!   )rW   _STAR_EXPR_PARENTSrY   )r   rl   r   s     @rd   r   r      s`       }}**&&ss+ 	)E!%(((	) h''' )'s!   8AAAAAAc                     g }| j                   d dd   D ]0  }|j                  dv r|t        |      z  } |j                  |       2 |S )Nr!   )r   testlist)rY   rW   r   append)	expr_stmtexprslist_s      rd   _get_expr_stmt_definition_exprsr      sW    E##ERE*  ::;;6u==ELL	 
 Lre   c                 H    | j                   d   }t        t        |            S Nr'   )rY   r1   r   )r   r   s     rd   _get_for_stmt_definition_exprsr      s#      #H1(;<<re   c                 @    | j                   d   j                  t        v S r   rp   )arguments    rd   _is_argument_comprehensionr      s    Q$$77re   c                     | dk  s|y|j                   dk(  rt        d |j                  D              S |j                   dk(  ry|j                  d      S )Nr$   	   F
error_nodec              3   :   K   | ]  }|j                   d k(    yw)fstring_startNr   )r   rl   s     rd   r   z%_any_fstring_error.<locals>.<genexpr>   s     LU5::0Ls   rU   T)rW   anyrY   search_ancestor)r/   r_   s     rd   _any_fstring_errorr      sR    4<yyL LdmmLLL	i	##I..re   c                   N    e Zd ZddZd Zd Zd Zd Zd Ze	d        Z
d	 Zd
 Zy)_ContextNc                     || _         g | _        || _        i | _        g | _        g | _        g | _        g | _        || _        y 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   s       rd   __init__z_Context.__init__   sH    	,!#% !,.)!1re   c                 j    | j                         xr" | j                  j                  j                  dv S )N)async_funcdef
async_stmt)is_functionr_   r}   rW   r   s    rd   is_async_funcdefz_Context.is_async_funcdef   s5     ! I		  %%)HH	Ire   c                 4    | j                   j                  dk(  S )Nfuncdef)r_   rW   r   s    rd   r   z_Context.is_function   s    yy~~**re   c                    |j                   j                  }|dk(  ry |dk(  r| j                  j                  |       y |dk(  r| j                  j                  |       y |dk(  rV| j
                  j                  |j                   j                         D cg c]  }|j                  j                   c}       y | j                  j                  |j                  g       j                  |       y c c}w )NrH   global_stmtnonlocal_stmtr   )r}   rW   r   r   r   r   extend
get_paramsnamer]   r   
setdefault)r   r   parent_typer   s       rd   add_namez_Context.add_name  s    kk&&)#-'%%d+O+  ''-I%$$++/3{{/E/E/GHe!!H   ++DJJ;BB4H Is   C0c                    | j                  | j                  d       | j                  | j                  d       | j                  D ci c]  }|j                  | }}| j                  D ]Q  }	 ||j                     }d|j                  z  }|j
                  |j
                  k  r|}n|}| j                  ||       S g }| j                  D ]  }|j                  }|| j                  v r||v s| j                  "d|j                  z  }| j                  ||       P| j                         r|j                  | j                  vsy|j                  |        | j                  |z   S c c}w # t        $ r Y w xY w)zV
        Returns a list of nonlocal names that need to be part of that scope.
        globalnonlocalz name '%s' is nonlocal and globalz"no binding for nonlocal '%s' found)_analyze_namesr   r   r]   KeyError	start_posr   r   r   r   r   r   r   )	r   rw   global_name_strsnonlocal_nameglobal_namemessage
error_namenonlocals_not_handledsearchs	            rd   finalizez_Context.finalize  s    	D..9D00*=040B0BC1AGGQJCC!11 	8M.}/B/BC 9;;L;LLG$$}'>'>>(
*
"":w7	8 !#!>> 		<M"((F111))T-@-@-H>ATATT&&}g>%%'!''t/C/CC%,,];		< ##&;;;3 D  s   E&-E++	E87E8c                    
 
 fd}g } j                   j                  dk(  r j                   j                         }|D ]  
d}t         j                  j                  
j                  g             D ]  }|j                  
j                  kD  rd}|j                  }|j                  dk(  r|j                  |k(  rI|j                         r<|j                  dk(  r*|j                  d   j                  dk(  r|r|
 |d	        nd
}nd}|r ||        n |D ]/  }	|	j                  j                  
j                  k(  s' |d      f 1  y )Nc                 H    j                  | j                  fz         y r   )r   r]   )r   	base_namer   r`   s    rd   raise_z'_Context._analyze_names.<locals>.raise_5  s!    ""9g%8P.PQre   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_   rW   r   reversedr   getr]   r   r}   r   is_definitionrY   )r   globals_or_nonlocalsr`   r   paramsfound_global_or_nonlocalr   r}   r   r   r   s   ` `       @rd   r   z_Context._analyze_names4  s?   	R 99>>Y&YY))+F- #	=I',$ !5!5!9!9)//2!NO >>I$7$77/3,;;')fkkT.A %%'{{k1 & 2 7 7; F3 )-I@A"RIG/7O9<   =::##y6:;<=C#	=re   c              #   ~   K   | j                   j                  |       d  | j                   j                          y wr   )r   r   popr   r_   s     rd   	add_blockz_Context.add_blocka  s)     4 s   ;=c                 2    t        || j                  |       S )N)r   )r   r   r   s     rd   add_contextz_Context.add_contextg  s    d44TJJre   c                 J    | xj                   |j                         z  c_         y r   )r   r   )r   child_contexts     rd   close_child_contextz_Context.close_child_contextj  s    ))]-C-C-EE)re   r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r    re   rd   r   r      sD    	2I+I" <D+=Z  
KFre   r   c                   d     e Zd ZdZ fdZd Z fdZed        Z fdZ	d Z
d Zd	 Zd
 Z xZS )ErrorFinderz1
    Searches for errors in the syntax tree.
    c                 h    t        |   |i | i | _        | j                  j                  | _        y r   )superr   _error_dictgrammarversion_infor/   )r   argskwargs	__class__s      rd   r   zErrorFinder.__init__r  s.    $)&)||00re   c                 l      fd |      xs t        | j                         _        d _        y )Nc                 |    | y  | j                         }| j                  dv rt        | j                  |      S |S )N)classdefr   
file_input)r}   rW   r   r   )r_   r   create_contextr   s     rd   r   z.ErrorFinder.initialize.<locals>.create_contextx  sA    |+DKK8NyyAAd&<&<nMM!!re   r   )r   r   context_indentation_count)r   r_   r   s   ` @rd   
initializezErrorFinder.initializew  s0    	" &d+Uxd>T>T/U"#re   c                     |j                   dk(  r| j                  |      5  	 d d d        yt        |   |      S # 1 sw Y   xY w)Nr    )rW   
visit_noder   visit)r   r_   r   s     rd   r  zErrorFinder.visit  sK    99$&  	 
 w}T"" s	   <Ac              #     K   | j                  |       |j                  t        v ra| j                  j	                  |      5  t        | j                  j                        t        k(  r| j                  |d       d  d d d        y |j                  dk(  rG| xj                  dz  c_	        | j                  t        k(  r| j                  |j                  d   d       d  |j                  dk(  r| xj                  dz  c_	        y |j                  dv r9| j                  }|j                  | _        | j                  j                  |       y y # 1 sw Y   y xY ww)Nz!too many statically nested blockssuiter'   ztoo many levels of indentationr   r   )_check_type_rulesrW   _BLOCK_STMTSr   r   rZ   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorrY   r   r   )r   r_   r   s      rd   r  zErrorFinder.visit_node  s    t$99$''- t||**+>**41TU YY'!##q(#&&*;;++DMM!,<>^_99##q(#YY11llG"11DLLL,,W5 2 s   ?E=E>CEEEc                     |j                   dk(  r|j                  dv rQt        |j                         j	                               d   }|j                  dk(  rd}nd}| j                  ||       y|j                  j                  d      rd}nt        j                  d	|j                        }|Bd
}| j                  dk\  rS|j                  t        | j                        j                  v r(d|z   }n"t        |j                  d            dk(  rd}nd}| j                  ||       y|j                  dk(  r:|j                   }|j                   dv r | j"                  j%                  |      | _        t&        | Q  |      S )N
error_leaf)INDENTERROR_DEDENTrG   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  )rW   
token_typer1   get_next_leaf_split_prefixr  r]   
startswithrematchr/   r   always_break_tokensrZ   groupr   r}   r   r   r   
visit_leaf)r   leafspacingr   r  r}   r   s         rd   r  zErrorFinder.visit_leaf  sW   99$"<< t113AACDRH??h.1GSG++GW=* ' ::((.VGHH%>

KE}"2 LLF2 $

.C $/11!2 '3W&<Gu{{1~.!3&IG&WG&&tW5ZZ3[[F{{55#||77? w!$''re   c                 0    | j                  |dd|z          y )N  IndentationError: 	add_issue)r   r  r   s      rd   r  z"ErrorFinder._add_indentation_error  s    w%9G%CDre   c                 0    | j                  |dd|z          y )N  SyntaxError: r"  )r   r_   r   s      rd   r   zErrorFinder._add_syntax_error  s    tS/G";<re   c                 d    |j                   d   }|||f}| j                  j                  ||       y )Nr   )r   r   r   )r   r_   coder   liner   s         rd   r#  zErrorFinder.add_issue  s4     ~~a gt$##D$/re   c                     | j                   j                          | j                  j                         D ],  \  }}}| j                  j                  t        |||             . y r   )r   r   r   valuesissuesr   r   )r   r(  r   r_   s       rd   r   zErrorFinder.finalize  sR    #'#3#3#:#:#< 	;D'4KKuT49:	;re   )r   r   r   __doc__r   r   r  r   r  r  r  r   r#  r   __classcell__r   s   @rd   r   r   n  sF    1
$# 6 6.'(RE=0;re   r   c                   "     e Zd ZdZ fdZ xZS )IndentationRuler   c                 .    t         |   ||      }d|z   S )Nr!  )r   _get_messager   r   r_   r   s      rd   r3  zIndentationRule._get_message  s    '&w5#g--re   r   r   r   r(  r3  r.  r/  s   @rd   r1  r1    s    D. .re   r1  r   r   c                       e Zd ZdZd Zd Zy)_ExpectIndentedBlockzexpected an indented blockc                 Z    |j                         }t        |j                               d   S )NrG   )r  r1   r  )r   r_   r  s      rd   get_nodez_ExpectIndentedBlock.get_node  s)    !!#D&&()"--re   c                 :    |j                   d   j                  dk(  S )NrG   rh   rj   r   s     rd   is_issuez_ExpectIndentedBlock.is_issue  s    }}R %%22re   Nr   r   r   r   r9  r;  r   re   rd   r7  r7    s    *G.3re   r7  c                       e Zd ZeZy)ErrorFinderConfigN)r   r   r   r   normalizer_classr   re   rd   r>  r>    s    "re   r>  c                   "     e Zd ZdZ fdZ xZS )
SyntaxRuler%  c                     t         |   ||      }d|vr%t        | j                  j                  |      rd|z   }d|z   S )Nzf-stringr  r&  )r   r3  r   _normalizerr/   r4  s      rd   r3  zSyntaxRule._get_message  sG    '&w5g%"4#3#3#;#;TB"W,G((re   r5  r/  s   @rd   rA  rA    s    D) )re   rA  c                        e Zd ZdZdZd Zd Zy)_InvalidSyntaxRuler  zf-string: invalid syntaxc                 "    |j                         S r   )r  r   s     rd   r9  z_InvalidSyntaxRule.get_node  s    !!##re   c                     |j                         j                  dk7  }|r>t        | j                  j                  |      r| j                  || j                         y |S )Nr  r   )r  rW   r   rC  r/   r#  fstring_message)r   r_   errors      rd   r;  z_InvalidSyntaxRule.is_issue  sQ    ""$))\9"4#3#3#;#;TBNN4)=)=N> Lre   N)r   r   r   r   rI  r9  r;  r   re   rd   rE  rE    s    G0O$	re   rE  rE   )r]   c                       e Zd ZdZd Zd Zy)_AwaitOutsideAsyncz'await' outside async functionc                 L    | j                   j                  j                          S r   )rC  r   r   r   r  s     rd   r;  z_AwaitOutsideAsync.is_issue   s     ##++<<>>>re   c                     |j                   S r   r}   r   s     rd   get_error_nodez!_AwaitOutsideAsync.get_error_node#  s    {{re   N)r   r   r   r   r;  rQ  r   re   rd   rL  rL    s    .G?re   rL  breakc                       e Zd ZdZd Zy)_BreakOutsideLoopz'break' outside loopc                 x    d}| j                   j                  j                  D ]  }|j                  dv sd} | S )NFr   r
   T)rC  r   r   rW   )r   r  in_loopblocks       rd   r;  z_BreakOutsideLoop.is_issue,  sD    %%--44 	Ezz77	 {re   Nr   r   r   r   r;  r   re   rd   rT  rT  (  s    $Gre   rT  continuec                       e Zd ZdZdZd Zy)_ContinueChecksz'continue' not properly in loopz0'continue' not supported inside 'finally' clausec                 f   d}| j                   j                  j                  D ]  }|j                  dv rd}|j                  dk(  s#|j                  d   }|dk(  s8|j
                  |j
                  kD  sR| j                   j                  dk  sl| j                  || j                          y |syy )	NFrV  Tr   finallyr#   rH  )	rC  r   r   rW   rY   r   r/   r#  message_in_finally)r   r  rW  rX  
last_blocks        rd   r;  z_ContinueChecks.is_issue9  s    %%--44 	!Ezz77zzZ'"^^B/
)+)=)==((0069NN41H1HNI 	!  re   N)r   r   r   r   r`  r;  r   re   rd   r\  r\  4  s    /GKre   r\  fromc                       e Zd ZdZd Zd Zy)_YieldFromCheckz"'yield from' inside async functionc                 .    |j                   j                   S r   rP  rN  s     rd   r9  z_YieldFromCheck.get_nodeO  s    {{!!!re   c                     |j                   j                  dk(  xr$ | j                  j                  j	                         S )N	yield_arg)r}   rW   rC  r   r   rN  s     rd   r;  z_YieldFromCheck.is_issueR  s6    {{;. <  ((99;	<re   Nr<  r   re   rd   rd  rd  K  s    2G"<re   rd  r   c                       e Zd ZdZdZd Zy)_NameCheckszcannot assign to __debug__zcannot assign to Nonec                     | j                   j                  j                  |       |j                  dk(  r|j	                         ryy y )N	__debug__T)rC  r   r   r]   r   rN  s     rd   r;  z_NameChecks.is_issue\  s>      ))$/::$););)= *>$re   N)r   r   r   r   message_noner;  r   re   rd   ri  ri  W  s    *G*Lre   ri  r<   c                       e Zd ZdZd Zy)_StringChecksz/bytes can only contain ASCII literal charactersc                 h   |j                   j                         }d|v rt        d |j                  D              ryd|vr|j	                         }d|v r"|j                  d      }t        j                  }nt        j                  }	 t        j                         5  t        j                  d        ||       d d d        y y # 1 sw Y   y xY w# t        $ r)}| j                  |dt        |      z          Y d }~y d }~wt        $ r)}| j                  |d	t        |      z          Y d }~y d }~ww xY w)
Nbc              3   >   K   | ]  }t        |      d kD  s|  yw)   N)ord)r   cs     rd   r   z)_StringChecks.is_issue.<locals>.<genexpr>j  s     >aQ#>s   Trzutf-8ignorez(unicode error) rH  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  rw  payloadfunces         rd   r;  z_StringChecks.is_issueg  s   **002->4::>>m# '')Gm#!..1++33H,,. "++H5M" " $" " & Jt-?#a&-HII Ht-=A-FGGHsB   C C9C CC C 	D1C<<D1D,,D1NrY  r   re   rd   rn  rn  c  s    ?GHre   rn  *c                       e Zd ZdZd Zy)
_StarCheckz"named arguments must follow bare *c                     |j                   }|j                  dk(  r[|rX|j                  |j                  j                  |      dz   d  }|D cg c]  }|dvr|j                  s| }}t        |      dk(  S y y c c}w )N
parametersr'   ),r-   r   )r}   rW   rY   index
star_countrZ   )r   r  r   afterrl   s        rd   r;  z_StarCheck.is_issue  s    ;;,&6OOFOO$9$9$$?!$C$DEE(- JuZ/8H8H  JE Ju:?"	 ,2&Js   A8NrY  r   re   rd   r  r    s    2G#re   r  r)   c                       e Zd ZdZd Zy)_StarStarCheckz3dict unpacking cannot be used in dict comprehensionc                     |j                   j                  dk(  r6|j                         j                         }|d uxr |j                  t        v S y )Nr"   )r}   rW   get_next_siblingrq   )r   r  r   s      rd   r;  z_StarStarCheck.is_issue  sJ    ;;//,,.??AH4'LHMM_,LL 0re   NrY  r   re   rd   r  r    s    
 DGMre   r  r5   returnc                        e Zd ZdZdZd Zd Zy)_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                     |j                   S r   rP  rN  s     rd   r9  z_ReturnAndYieldChecks.get_node      {{re   c                    | j                   j                  j                  j                  dk7  r0| j	                  | j                  |      d|j                  z         y | j                   j                  j                         rct        | j                   j                  j                  j                               r+|j                  dk(  r|j                  j                  dk(  ryy y y y )Nr   z'%s' outside functionrH  r  return_stmtT)rC  r   r_   rW   r#  r9  r]   r   r   iter_yield_exprsr}   rN  s     rd   r;  z_ReturnAndYieldChecks.is_issue  s    ##((--:NN4==.8ORVR\R\8\N]%%668((0055FFHIzzX%$++*:*:m*K +L% J 9re   N)r   r   r   r   message_async_yieldr9  r;  r   re   rd   r  r    s     7G9re   r  r>   c                       e Zd ZdZd Zd Zy)_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 Z    |j                   dk(  ryd|j                  j                         v S )NrU   Frp  )rW   rw  rx  )r   r<   s     rd   _is_bytes_literalz$_BytesAndStringMix._is_bytes_literal  s+    ;;)#f**00222re   c                     |j                   d   }| j                  |      }|j                   dd  D ]  }|| j                  |      k7  s y y )Nr   r'   T)rY   r  )r   r_   rb   first_is_bytesr<   s        rd   r;  z_BytesAndStringMix.is_issue  sP    a //6mmAB' 	F!7!7!??	re   N)r   r   r   r   r  r;  r   re   rd   r  r    s     7G3
re   r  import_as_namesc                       e Zd ZdZd Zy)_TrailingImportCommaz:trailing comma not allowed without surrounding parenthesesc                 d    |j                   d   dk(  r|j                  j                   d   dk7  ryy y )NrG   r  r-   T)rY   r}   r   s     rd   r;  z_TrailingImportComma.is_issue  s5    ==#(<(<R(@C(G )H#re   NrY  r   re   rd   r  r    s     KGre   r  ru   c                       e Zd ZdZd Zy)_ImportStarInFunctionz%import * only allowed at module levelc                 j    |j                         xr" | j                  j                  j                  d uS r   )is_star_importrC  r   r   r   s     rd   r;  z_ImportStarInFunction.is_issue  s.    ""$\)9)9)A)A)P)PX\)\\re   NrY  r   re   rd   r  r    s    5G]re   r  c                       e Zd ZdZd Zy)_FutureImportRulez?from __future__ imports must occur at the beginning of the filec                    t        |      rt        |      sy|j                         D ]  \  }}|j                  }t	        t
              }| j                  j                  dk\  r|j                  d       |dk(  r| j                  |d       d|dk(  rd}| j                  ||       ||vsd	|z  }| j                  ||        y y )
NTr$      annotationsbracesznot a chancerH  barry_as_FLUFLz-Seriously I'm not implementing this :) ~ Davez future feature %s is not defined)
rx   r   	get_pathsr]   r1   ALLOWED_FUTURESrC  r/   r   r#  )r   r_   	from_namefuture_namer   allowed_futuresmr   s           rd   r;  z_FutureImportRule.is_issue  s    T"*40*...*: :&	;"(("&"7##++v5#**=98#NN4N@--GANN4N30@4GGNN4N9:	 #re   NrY  r   re   rd   r  r    s    OG:re   r  rN   c                       e Zd ZdZd Zy)_StarExprRulez2iterable unpacking cannot be used in comprehensionc                 X   d }| j                   j                  dk\  r|j                  }nt        |      }|j                  g t
        dvr5|j                  dk(  r|j                  d   dk7  s| j                  |d       y  ||      rA| j                   j                  dk\  r| j                  |d	       y | j                  |d       y |j                  j                  d
k(  rH|j                  j                  d   j                  t        v r| j                  || j                         y y y )Nc                     | j                   A| j                   } | j                  dk(  ry| j                  g t        dvry| j                   Ay)Ndel_stmtTr    F)r}   rW   r   r~   s    rd   check_delete_starredz4_StarExprRule.is_issue.<locals>.check_delete_starred  sP    ++){{99
*99$A&8$A&$AA  ++) re   r   r"   r    r   r,   !can't use starred expression hererH  zcannot delete starredr   r'   )
rC  r/   r}   r   rW   r   rY   r#  rq   message_iterable_unpacking)r   r_   r  ancestors       rd   r;  z_StarExprRule.is_issue  s   	 ##v-{{H-d3H== G"4 G6F GG!&0X5F5Fq5IS5PNN4)LNM%''61t-DE  t-PQ;;.{{##A&++>tT-L-LM ? /re   N)r   r   r   r  r;  r   re   rd   r  r    s    !UNre   r  )typesc                       e Zd Zd Zy)_StarExprParentRulec                    fd ||j                         r|j                  D cg c]
  }|dk7  s	| }}|D cg c]  }|j                  dk(  s| }}t        |      dkD  r5| j                  j
                  dk  rd}nd}| j                  |d   |       y |r3|j                  |d	         }|d
k\  rd}| j                  |d	   |       y y y y c c}w c c}w )Nc                     |y|j                   }|dk(  ry|dk(  r&| j                  |j                  d   j                  k  S  | |j                        S )NFrH   r   rG   )rW   r   rY   r}   )r_   r  r`   r   s      rd   r   z3_StarExprParentRule.is_issue.<locals>.is_definition  sY    MME	!#~~(9(9"(=(G(GGG x77re   r  rN   r'   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentrH  r      z1too many expressions in star-unpacking assignment)r}   rY   rW   rZ   rC  r/   r#  r  )r   r_   rt  r   rT   r   countr   s          @rd   r;  z_StarExprParentRule.is_issue  s    	8 t{{+#}}9!SA9D9"&@Q!&&K*?q@G@7|a##++f4EGJGwqz7;

71:.C<QGNN71:wN?    ,9@s   
CCCCNr   r   r   r;  r   re   rd   r  r    s    @re   r  r   c                       e Zd ZdZd Zd Zy)_AnnotatorRulezillegal target for annotationc                     |j                   S r   rP  r   s     rd   r9  z_AnnotatorRule.get_node7  r  re   c                    d }|j                   j                  d   }t        |      }	 |j                  }d|v s|j                  dk(  r|d   dk(  rd}n|j                  dk(  r
|d   dk(  rd}|d   }|A|j                  d	k(  s1|j                  d
v r!j                  dk(  r|j                  d   dk7  syy y d}| j                  |j                   ||z         y # t        $ r Y qw xY w)Nr   r  r    r,   r.   r0   r1   rG   r   rB   rH   Tz,only single target (not %s) can be annotatedrH  )r}   rY   r\   rW   rz   r#  )r   r_   r`   lhsrY   rH   r   s          rd   r;  z_AnnotatorRule.is_issue:  s    kk""1%S!		#||H h#((f"4!9KV#s(:rlG=HH&xx#99	1((+s2 3	 ' EGNN3::wN?'  		s   C 	C"!C"Nr<  r   re   rd   r  r  1  s     .G@re   r  r   c                       e Zd Zd Zy)_ArgumentRulec                    |j                   d   }| j                  j                  dk  rt        |      }|j                   d   dk(  rn|j                  dk7  r_|j                  dk(  r| j                  j                  dk  rd}n!d}n| j                  j                  dk  rd	}nd}| j                  ||
       t        |      r.|j                  j                  dk(  r| j                  |d
       y y y )Nr   r#   r'   =r   r   z lambda cannot contain assignmentz=expression cannot contain assignment, perhaps you meant "=="?zkeyword can't be an expressionrH  r   r  )rY   rC  r/   r\   rW   r#  r   r}   )r   r_   rb   r   s       rd   r;  z_ArgumentRule.is_issueX  s    a ##f,"5)E==s"uzzV';zzY&##++f4@G]G ##++f4>G]GNN5'N2%d+0@0@J0NNN4)9N: 1O+re   Nr  r   re   rd   r  r  V  s    ;re   r  r   c                       e Zd ZdZd Zy)_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 F    | j                   j                  j                  d u S r   )rC  r   r   r   s     rd   r;  z!_NonlocalModuleLevelRule.is_issuet  s    ''66$>>re   NrY  r   re   rd   r  r  p  s    @G?re   r  arglistc                   "    e Zd Zed        Zd Zy)_ArglistRulec                 8    | j                   j                  dk  ryy)Nr  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)rC  r/   r   s    rd   r   z_ArglistRule.messagez  s    ##f,T?re   c                    t               }d}d}|j                  D ],  }|dk(  r
|j                  dk(  r|j                  d   }t        |      rt	        |j                        dk\  r y|dv r!|dk(  r|sYd	}| j                  ||
       od}rd}|j                  dk(  s|j                  |v rMd}| j                  j                  dk\  r|dj                  |j                        z  }| j                  ||
       |j                  |j                         |rd}| j                  ||
       |sd}| j                  ||
       / y )NFr  r   r   r!   T)r  r)   r  z>iterable argument unpacking follows keyword argument unpackingrH  r   zkeyword argument repeatedr   z: {}z6positional argument follows keyword argument unpackingz,positional argument follows keyword argument)setrY   rW   r   rZ   r#  r]   rC  r/   formatadd)r   r_   arg_setkw_onlykw_unpacking_onlyr   rb   r   s           rd   r;  z_ArglistRule.is_issue  s7   %! &	>H3}}
* ))!,-h7C<NRS<SK'|,'KG NN8WNE,0)"GzzV+ ;;'1&AG#//776A '6==+E E NN5'NB#KK4$VGNN8WN=LGNN8WN=M&	>re   N)r   r   r   propertyr   r;  r   re   rd   r  r  x  s    @ @*>re   r  r  r   c                       e Zd ZdZd Zy)_ParameterRulez-non-default argument follows default argumentc                    t               }d}d}t        |      D ]  }|j                  dk(  r|j                  dk(  rd}d}&|j                  j                  |v r6d}| j                  |j                  ||j                  j                  z         |j                  |j                  j                         |r|j                  |j                  s|s y|j                  rd}d}d} y )NFr7   r  Tz.duplicate argument '%s' in function definitionrH  )	r  r   rW   r]   r   r#  r  defaultr  )r   r_   param_namesdefault_only	star_seenpr   s          rd   r;  z_ParameterRule.is_issue  s    e	d# 	(Avv#77c> $I#(Lvv||{*Jqvvw/EFOOAFFLL)99$Q\\##\\ $I#(L#'L)	(re   NrY  r   re   rd   r  r    s     >G(re   r  r   c                       e Zd ZdZd Zy)_TryStmtRulezdefault 'except:' must be lastc                     d }|j                   dd d   D ]0  }|dv r y |dk(  r|}|| j                  || j                         2 y )Nr$   )elser_  exceptrH  )rY   r#  r   )r   r   default_exceptexcept_clauses       rd   r;  z_TryStmtRule.is_issue  s\    %..qt!t4 	EM 33(!.+~t||D	Ere   NrY  r   re   rd   r  r    s    .GEre   r  rU   c                   6    e Zd ZdZdZdZdZd Zd Zd Z	d	dZ
y)
_FStringRuleNz3f-string expression part cannot include a backslashz'f-string: expressions nested too deeplyzAf-string: invalid conversion character: expected 's', 'r', or 'a'c                 B    | j                  |j                  dd  |       y r   _check_fstring_contentsrY   )r   format_specdepths      rd   _check_format_specz_FStringRule._check_format_spec  s    $$[%9%9!"%=uEre   c                 <   |dk\  r| j                  || j                         |j                  d   }d|j                         v r| j                  || j                         |j                  d   }|j
                  dk(  r|j                  dk(  r|j                  d   }n|}|j
                  dk(  r:|j                  d   }|j                  d	vr| j                  || j                         |j                  d
   }|j
                  dk(  r| j                  ||dz          y y )Nr!   rH  r'   r  r7   r  r$   fstring_conversion)sru  ar   fstring_format_spec)	r#  message_nestedrY   get_codemessage_exprrW   r]   message_conversionr  )r   fstring_exprr  rM   
children_2
conversionr   r  s           rd   _check_fstring_exprz _FStringRule._check_fstring_expr  s   A:NN<1D1DNE$$Q'4==?"NN4):):N;!**1-
??j(Z-=-=-D%..q1J#J??22&&q)Dzz0tT-D-DE"++B/44##K; 5re   c                 @    | j                  |j                  dd        y )Nr'   rG   r  )r   rU   s     rd   r;  z_FStringRule.is_issue  s    $$W%5%5a%;<re   c                 V    |D ]$  }|j                   dk(  s| j                  ||       & y )Nr  )rW   r  )r   rY   r  fstring_contents       rd   r  z$_FStringRule._check_fstring_contents  s1    ' 	AO##~5((%@	Are   )r   )r   r   r   _fstring_grammarr  r  r   r  r  r;  r  r   re   rd   r  r    s.    HL>N\F<,=Are   r  c                       e Zd ZddZy)_CheckAssignmentRulec                 R   d }|j                   }|dk(  rd}n|dk(  rJ|j                  d d \  }}t        |      }||j                   dk(  r7| j                  j                  dk  rd}nk|j                  d   d	k(  rd
}nUd}nQ|dk(  r&|dk(  r!| j                  j                  dk  rd}n*d
}n&|dk(  r9t        |j                        dkD  r!| j                  j                  dk  rd}nd}n|dv r|j                   dk(  rd}n|j                   dk(  r>|r|dk(  rd}n|dk(  rd}|j                  d d d   D ]  }	| j                  |	|||        n| j                  ||||       nm|dk(  rG|j                  dk(  rd}nU| j                  j                  dk  rd}n8t        |j                        }n!|dk(  r|j                  dk(  rd}n|dk(  rd}n|dv rd}n|dk(  rd}
| j                  ||
       n|dk(  rd }n|d!v r|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(  rd*}nl|r|j                  d"   dk(  rd+}nT|rQ|j                  d"   d,k(  r>d-}n:|d.k(  r!| j                  j                  dk  rd}nd/}n|d0v r,|j                  d d d   D ]  }	| j                  |	|||        nd1|v r|d2k7  sd3|v s|d4v rd'}n|d2k(  r|r0| j                  j                  d5k\  rd6}n| j                  |d7       n{| j                  j                  d5k\  r|j                  }nt        |      }|j                   t        vr8|s6|j                   dk(  r|j                  d"   dk(  sd8}
| j                  ||
       | j                  |j                  d          |Q|rd9|z  }
n5| j                  j                  dk  rd:nd;}d<j                  ||rd=nd>|g      }
| j                  ||
       y y )?Nr   r   r    r!   r"   r#   r&   r'   r(   r*   r+   r2   r3   )r,   r0   r?   r6   r   r,   r.   r0   r1   r4   r5   r7   r8   r9   r:   r;   z+assignment to yield expression not possiblerH  r@   rA   rB   r   rE   rF   r   r)   rS   rG   rH   rI   rJ   rK   rL   rU   rV   )r   r   r   rM   rN   rO   rP   r   rT   r  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rW   rY   rX   rC  r/   rZ   _check_assignmentr]   r^   r#  r}   r   r   join)r   r_   is_deletionis_namedexpris_aug_assignrJ  r`   rb   rc   rl   r   rH   r  r  s                 rd   r  z&_CheckAssignmentRule._check_assignment  sL   		IEf_ MM"1-ME6+D1E};;"22''//&8 )!??1-4$2E$1Ec\fm''//&8 ) .c\c$--&81&<''//&8 ) -j({{l2 27 ($|(/!&#(. &,__SqS%9 dE 225+|Ubcd ..v{LR_`izzW$*!!))F2!DJJj zzU""l" E55El"CGNN4N1f_,E,,}}Q7**r"d*$ --+||y000##A&#-+E!g&6&6q&9S&@'E!g&6&6q&9S&@'Ei''&0!-DDss+ X&&uk<WXo%;"6E!,, Ek!##++v5%ENN41TNU##++v5#{{H5d;H==(::=!)&!8X=N=Nq=QUX=XTGNN4N9""4==#34EM$($4$4$<$<v$E8((FHV[#\]NN4N1 re   N)FFF)r   r   r   r  r   re   rd   r
  r
    s    t2re   r
  r   c                       e Zd ZdZd Zy)_CompForRulez>asynchronous comprehension outside of an asynchronous functionc                     |j                   d   }|j                  dk7  r| j                  |       |j                  j                   d   dk(  xr% | j                  j
                  j                          S )Nr'   	expr_listr   async)rY   rW   r  r}   rC  r   r   )r   r_   r  s      rd   r;  z_CompForRule.is_issue  sh    MM!$	>>[(""9-{{##A&'1 @$$,,==??	@re   NrY  r   re   rd   r  r    s    NG@re   r  r   c                        e Zd ZdZdez   Zd Zy)_ExprStmtRulez+illegal expression for augmented assignmentz'{target}' is an c           	         |j                   d   }|dk7  xr |j                  dk7  }| j                  j                  dk  s|s*|j                   d dd   D ]  }| j	                  ||        |rt        |j                   d         }|j                  d	k(  sI|j                  d
v r<|j                   d   j                  dk(  r |j                   d   j                   d   dk7  ry| j                  j                  dk  ry| j                  || j                  j                  t        |j                   d   | j                  j                                     y y )Nr'   r  r   r#   r   r!   )r  r   r   rB   rH   rG   r,   FT)targetrH  )
rY   rW   rC  r/   r  r\   r#  extended_messager  r[   )r   r_   	augassignr  before_equalr  s         rd   r;  z_ExprStmtRule.is_issue  sB   MM!$	!S(JY^^{-J##v-] $er!e 4 R&&|=&QR #DMM!$45F {{f$55OOA&++y8OOB'003s:''61 1188,T]]1-=t?O?O?W?WX 9    re   N)r   r   r   r   r  r;  r   re   rd   r  r    s    ;G*W4re   r  	with_itemc                       e Zd Zd Zy)_WithItemRulec                 @    | j                  |j                  d          y Nr!   )r  rY   )r   r   s     rd   r;  z_WithItemRule.is_issue  s    y11!45re   Nr  r   re   rd   r"  r"    s    6re   r"  r  c                       e Zd Zd Zy)_DelStmtRulec                 h    |j                   d   }|j                  dk7  r| j                  |d       y y )Nr'   r  T)r  rY   rW   r  )r   r  rl   s      rd   r;  z_DelStmtRule.is_issue  s6    !!!$::$""5d"; %re   Nr  r   re   rd   r&  r&    s    <re   r&  r  c                       e Zd Zd Zy)_ExprListRulec                 T    |j                   d d d   D ]  }| j                  |        y r$  )rY   r  )r   r  rM   s      rd   r;  z_ExprListRule.is_issue  s.    &&ss+ 	)D""4(	)re   Nr  r   re   rd   r*  r*    s    )re   r*  r   c                       e Zd Zd Zy)_ForStmtRulec                 d    |j                   d   }|j                  dk7  r| j                  |       y y )Nr'   r  r(  )r   r   r  s      rd   r;  z_ForStmtRule.is_issue  s1    %%a(	>>[(""9- )re   Nr  r   re   rd   r-  r-    s    .re   r-  namedexpr_testc                       e Zd Zd Zy)_NamedExprRulec                 &  	
 |j                   d   }d } ||      rd}| j                  ||       t               		fd

fd} ||      }|r| j                  j                  j
                  j                  dk(  rd}| j                  ||       	D cg c]  }|j                  d	k(  s|j                    }}|j                  d	k(  r0|j                  |v r"d
|j                  z  }| j                  ||       | j                  |d       y c c}w )Nr   c                 p    	 | j                   }||S |j                  dk(  r|j                  d   | k(  r|S |} 6)Nr   r$   r|   )r_   r}   s     rd   search_namedexpr_in_comp_forz=_NamedExprRule.is_issue.<locals>.search_namedexpr_in_comp_for  sC    >!M;;/1fooa6HD6P!M re   zKassignment expression cannot be used in a comprehension iterable expressionrH  c                     | j                   dk(  r| }n| j                   dk(  r| j                  d   }j                  t                     y )Nr   r   r'   )rW   rY   r   r   )r   compr   s     rd   process_comp_forz1_NamedExprRule.is_issue.<locals>.process_comp_for  sB    }}/*,((+OO:4@Are   c                     d}	 | j                  dd      } | 	 |S | j                  D ]   }|j                  t        v s |       d} n G)NFTr   r"   )r   rY   rW   rq   )r_   has_ancestorsrl   r7  s      rd   search_all_comp_ancestorsz:_NamedExprRule.is_issue.<locals>.search_all_comp_ancestors  sd    !M++O=MN< !  "]] Ezz_4(/(,		 re   r   zKassignment expression within a comprehension cannot be used in a class bodyr   zGassignment expression cannot rebind comprehension iteration variable %rT)r  )	rY   r#  r1   rC  r   r_   rW   r]   r  )r   r/  rb   r4  r   r:  
search_allrM   namelistr   r7  s            @@rd   r;  z_NamedExprRule.is_issue  s   ''*	 (7 dGNN>7N; 6	B	! /~>
'',,11Z?;~w?/7Ot499;N

OHOzzV#x(?
@BG++N~w?u48 Ps   D+DNr  r   re   rd   r1  r1    s    =9re   r1  )Er{  r~  r  
contextlibr   parso.normalizerr   r   r   r   parso.python.tokenizer   r	  r   r
  r  r  rq   r[   rn   rX   rx   r\   r   r   r   r   r   r   r   r   r   r   r1  register_ruler7  r>  rA  rE  rL  rT  r\  rd  ri  rn  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r"  r&  r*  r-  r1  r   re   rd   <module>rA     s%     	 % F F 7MH   0GT;	Z"(0=
8/F FDq;* q;h.d . -	3? 	3 .	3#( #
) 
) -  .& )  * )
  * ,j  -, (<j < )< '*  ( )HJ H *H@ %	# 	# &	# &	MZ 	M '	M )*J  + *  	*  +"  12:  3 .]J ] /] .:
 : /:. ,!NJ !N -!NH !34@* @ 5@> ,!@Z !@ -!@H 
+;J ; ,;2 0?z ? 1? 	*2>: 2> +2>j -	*(Z ( + .(> 
+E: E ,E 	*%A: %A +%APu2: u2p 0	@' 	@ 1	@ ,(  -D ,6( 6 -6
 
+<' < ,< ,)( ) -) 
+.' . ,.  01@9) @9 2@9re   