
    ]j               	          d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ  G d de      Zdee
   dee   fdZ	 d$de dee
   defdZ! G d de"      Z#de de$e%e%f   de&dejN                  fdZ(de dejN                  fdZ)de de de fdZ*dejN                  dee    fdZ+dejN                  deejN                     d ejN                  dee    fd!Z,dejN                  deejN                     dee    fd"Z-dej\                  deejN                     fd#Z/y)%z/
Parse Python code and perform AST validation.
    N)
CollectionIterator)VERSION_TO_FEATURESFeatureTargetVersionsupports_feature)syms)pygram)driver)Grammar)
ParseError)
TokenError)LeafNodec                       e Zd ZdZy)InvalidInputz7Raised when input source code fails all parse attempts.N__name__
__module____qualname____doc__     7/root/env/lib/python3.12/site-packages/black/parsing.pyr   r      s    Ar   r   target_versionsreturnc                    | s/t         j                  t         j                  t         j                  gS g }t	        | t
        j                        s9t	        | t
        j                        s|j                  t         j                         t	        | t
        j                        s|j                  t         j                         t        d | D              r|j                  t         j                         |S )Nc              3   N   K   | ]  }t         j                  t        |   v   y wN)r   PATTERN_MATCHINGr   ).0vs     r   	<genexpr>zget_grammars.<locals>.<genexpr>.   s!     
W!7##':1'==
Ws   #%)r
   python_grammar_async_keywordspython_grammarpython_grammar_soft_keywordsr   r   ASYNC_IDENTIFIERSr    appendASYNC_KEYWORDSany)r   grammarss     r   get_grammarsr,      s     00!!//
 	
 H220H0HI<<=OW-C-CD--.

W
WW;;< Or   src_txtc                 :   | j                  d      s| dz  } t        t        |            }|r"t        |d       }d|j	                          }nd}i }|D ]+  }t        j                  |      }	 |j                  | d      } n" t!        |      dk\  sJ |t        |         }|dt#        |t$              rt'        t(        j*                  |g      }|S # t        $ rk}	|	j                  d   \  }
}| j                         }	 ||
dz
     }n# t        $ r d}Y nw xY wt        d	| d
|
 d| d
|       ||j                  <   Y d}	~	d}	~	wt        $ rN}|j                  d   \  }
}t        d	| d
|
 d| d
|j                  d          ||j                  <   Y d}~@d}~ww xY w)z4Given a string with source, return the lib2to3 Node.
c                     | j                   S r   )value)tvs    r   <lambda>zlib2to3_parse.<locals>.<lambda>@   s
    RXX r   )keyz for target version  F   z<line number missing in source>zCannot parsez: :Nr   )endswithr,   setmaxprettyr   Driverparse_stringr   context
splitlines
IndexErrorr   versionr   argslen
isinstancer   r   r	   
file_input)r-   r   r+   max_tvtv_strerrorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcs                   r   lib2to3_parserS   7   s    D!4C01H_*=>''89F mmG$	%%gu5F	4 6{aS[!t&$doox0M5  		ZZ]NFF&&(E@#FQJ/ @?@&2vhb&K=I'F7??#  	WWQZNFF&2vhb&BGGAJ<H'F7??#	sI   .C	F"E =DE DE D'E  FAFFc                       e Zd ZdZy)ASTSafetyErrorzDRaised when Black's generated code is not equivalent to the old AST.Nr   r   r   r   rU   rU   i   s    Nr   rU   srcrA   type_commentsc                    d}t        j                         5  t        j                  dt               t        j                  dt               t        j                  | |||      cd d d        S # 1 sw Y   y xY w)Nz	<unknown>ignore)feature_versionrW   )warningscatch_warningssimplefilterSyntaxWarningDeprecationWarningastparse)rV   rA   rW   filenames       r   _parse_single_versionrc   m   s`     H		 	 	" 
h6h(:;yy7-

 
 
s   AA..A7c                 p   t        dt        j                  d   dz         D cg c]  }d|f }}d}t        |d      D ]  }	 t	        | |d      c S  t        |d      D ]  }	 t	        | |d      c S  t        |      c c}w # t
        $ r}|st        |      }Y d }~bd }~ww xY w# t
        $ r Y Sw xY w)N   r6   r5   T)reverse)rW   F)rangesysversion_infosortedrc   SyntaxErrorstr)rV   minorversionsfirst_errorrA   es         r   	parse_astrq   y   s    (-a1A1A!1Dq1H(IJuE
JHJK(D1 %	%(gTJJ% (D1 	(gUKK k
""# K  	%!!f	%  		s/   BB%B)	B&B!!B&)	B54B5lineendr1   c                     |j                         D cg c]  }|j                          }}| j                  |      }|j                         S c c}w r   )r?   stripjoin)rr   r1   istripped
normalizeds        r   
_normalizery      sK     /4.>.>.@A1779AHAh'J 	 Bs   Anodec                     t        | g       S )z=Simple visitor generating strings to compare ASTs by content.)_stringify_ast)rz   s    r   stringify_astr}      s    $##r   parent_stack
new_parentc              #   z   K   |j                  |       t        | |      E d {    |j                          y 7 wr   )r(   r|   pop)rz   r~   r   s      r   _stringify_ast_with_new_parentr      s7      
#dL111 2s   !;9;c              #   \  K   t        | t        j                        r0t        | j                  t              r| j
                  dk(  rd | _        dt        |      z   | j                  j                   d t        | j                        D ]  }t        | t        j                        r n	 t        | |      }dt        |      dz   z   | d t        |t              r|D ]  }|dk(  rZt        | t        j                        r@t        |t        j                         r&t#        |      D ]  }t%        |||       E d {     bt        |t        j&                        s}t%        |||       E d {     t        |t        j&                        rt%        |||       E d {    t        | t        j                        rM|dk(  rHt        |t              r8t        |      dk\  r*t        |d	   t        j(                        rt+        d
|      }n(|dk(  r!t        |t              r|j-                         }n|}dt        |      dz   z   |d|j                  j                     dt        |      z   d| j                  j                    y # t        $ r Y w xY w7 f7 67 w)Nuz    (r6   =targetsr1      r/   type_commentz,  # z)  # /)rD   r`   Constantr1   rl   kindrC   	__class__r   rj   _fields
TypeIgnoregetattrAttributeErrorlistDeleteTuple_unwrap_tuplesr   ASTExprry   rstrip)rz   r~   fieldr1   itemeltrx   s          r   r|   r|      sm    4&tzz3'II
 	c,''()@)@(A
CC% 7dCNN+	#D%0E 3|,q0125';;eT" X Y&"44"43-d3 #At$  
  cgg.=dLRVWWWX  sww'5e\4PPP
 4.W$uc*%* |B/:
 (e4
.(Zs-C"\\^
"
S.234ZN COO,,-/i7r c,''(t~~/F/F.G
HHe  		
 X Qsb   B*J,-J9BJ,=J#
>!J, J,0J&11J,"J)#C0J,	J J,J  J,&J,)J,c              #      K   | j                   D ]4  }t        |t        j                        rt	        |      E d {    1| 6 y 7 wr   )eltsrD   r`   r   r   )rz   r   s     r   r   r      s=     yy c399%%c***I	*s   8A	AA	)r   )0r   r`   rh   r[   collections.abcr   r   
black.moder   r   r   r   black.nodesr	   blib2to3r
   blib2to3.pgen2r   blib2to3.pgen2.grammarr   blib2to3.pgen2.parser   blib2to3.pgen2.tokenizer   blib2to3.pytreer   r   
ValueErrorr   r9   r   r,   rl   rS   	ExceptionrU   tupleintboolr   rc   rq   ry   r}   r   r|   r   r   r   r   r   <module>r      s    
  0 T T   ! * + . &B: B#m"4 g @ @B//#-m#</	/dOY O	
		
S#X	
:>	
WW	
#3 #377 #, C C $ $HSM $

''!%cgg<?GGc]FI FISWW FI(3- FIR x'8 r   