
    yIf               	       h   d Z ddlZddlZddlZddlmZmZmZ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"de!dede#fdZ$dede!fdZ% G d de&          Z'de!de	e(e(f         de#dej)        fdZ*de!dej)        fdZ+de!d e!de!fd!Z,dej)        dee!         fd"Z-dej)        d#eej)                 d$ej)        dee!         fd%Z.dej)        d#eej)                 dee!         fd&Z/dS )(z/
Parse Python code and perform AST validation.
    N)IterableIteratorListSetTuple)VERSION_TO_FEATURESFeatureTargetVersionsupports_feature)syms)pygram)driver)Grammar)
ParseError)
TokenError)LeafNodec                       e Zd ZdZdS )InvalidInputz7Raised when input source code fails all parse attempts.N__name__
__module____qualname____doc__     A/var/www/piapp/venv/lib/python3.11/site-packages/black/parsing.pyr   r      s        AAAAr   r   target_versionsreturnc                    | s#t           j        t           j        t           j        gS g }t	          | t
          j                  s9t	          | t
          j                  s|                    t           j                   t	          | t
          j	                  s|                    t           j                   t          d | D                       r|                    t           j                   |S )Nc              3   H   K   | ]}t           j        t          |         v V  d S N)r	   PATTERN_MATCHINGr   ).0vs     r   	<genexpr>zget_grammars.<locals>.<genexpr>.   s0      
W
W!7#':1'==
W
W
W
W
W
Wr   )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!/
 	
 H2  >0HII> 	<===OW-CDD /-...

W
W
W
W
WWW =;<<< Or   r   src_txtc                     |                      d          s| dz  } t          t          |                    }i }|D ]}t          j        |          }	 |                    | d          } n# t          $ rm}|j        d         \  }}	|                                 }
	 |
|dz
           }n# t          $ r d}Y nw xY wt          d| d|	 d|           ||j        <   Y d}~d}~wt          $ rE}|j        d         \  }}	t          d| d|	 d|j        d	                    ||j        <   Y d}~d}~ww xY wt          |          dk    sJ |t          |                   }|dt!          |t"                    rt%          t&          j        |g          }|S )
z4Given a string with source, return the lib2to3 Node.
T   z<line number missing in source>zCannot parse: :z: Nr   )endswithr/   setr   Driverparse_stringr   context
splitlines
IndexErrorr   versionr   argslenmax
isinstancer   r   r   
file_input)r0   r   r.   errorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcs                 r   lib2to3_parserM   7   s   D!! 4C0011HF  mG$$	%%gt44FE 		 		 		Z]NFF&&((E@#FQJ/ @ @ @?@&2AAA&AAKAA' 'F7?######  	 	 	WQZNFF&2@@@&@@BGAJ@@' 'F7?######	 6{{aS[[!t&$ 1dox00MsH   A**
D.4$CB%$C%B41C3B44#CD.);D))D.rC   c                     t          j        |          }	 |                    | d           dS # t          t          t
          f$ r Y dS w xY w)NTF)r   r7   r8   r   r   IndentationError)r0   rC   rD   s      r   matches_grammarrP   a   s_    
-
 
 C$''' t 
$45   uus   . A	A	nodec                 $    t          |           }|S )z7Given a lib2to3 node, return its string representation.)str)rQ   codes     r   lib2to3_unparserU   k   s    t99DKr   c                       e Zd ZdZdS )ASTSafetyErrorzDRaised when Black's generated code is not equivalent to the old AST.Nr   r   r   r   rW   rW   q   s        NNNNr   rW   srcr<   type_commentsc                    d}t          j                    5  t          j        dt                     t          j        dt                     t          j        | |||          cd d d            S # 1 swxY w Y   d S )Nz	<unknown>ignore)feature_versionrY   )warningscatch_warningssimplefilterSyntaxWarningDeprecationWarningastparse)rX   r<   rY   filenames       r   _parse_single_versionre   u   s     H		 	"	" 
 
h666h(:;;;y7-
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA//A36A3c                    d t          dt          j        d         dz             D             }d}t          |d          D ]>}	 t	          | |d          c S # t
          $ r}|st          |          }Y d }~7d }~ww xY wt          |d          D ]&}	 t	          | |d          c S # t
          $ r Y #w xY wt          |          )	Nc                     g | ]}d |fS )   r   )r$   minors     r   
<listcomp>zparse_ast.<locals>.<listcomp>   s    JJJuE
JJJr   rh   r3    T)reverse)rY   F)rangesysversion_infosortedre   SyntaxErrorrS   )rX   versionsfirst_errorr<   es        r   	parse_astru      s   JJa1A!1Dq1H(I(IJJJHK(D111 % %	%(gTJJJJJJ 	% 	% 	% %!!ff	%
 (D111  	(gUKKKKKK 	 	 	D	 k
"
""s*   A
A="A88A=B((
B54B5lineendvaluec                     d |                                 D             }|                     |          }|                                S )Nc                 6    g | ]}|                                 S r   )strip)r$   is     r   rj   z_normalize.<locals>.<listcomp>   s     AAA17799AAAr   )r:   joinrz   )rv   rw   stripped
normalizeds       r   
_normalizer      sI     BAe.>.>.@.@AAAHh''J r   c                 "    t          | g           S )z=Simple visitor generating strings to compare ASTs by content.)_stringify_ast)rQ   s    r   stringify_astr      s    $###r   parent_stack
new_parentc              #      K   |                     |           t          | |          E d {V  |                                 d S r"   )r+   r   pop)rQ   r   r   s      r   _stringify_ast_with_new_parentr      sV       
###dL111111111r   c              #   h  K   t          | t          j                  r,t          | j        t                    r| j        dk    rd | _        dt          |          z   | j        j         dV  t          | j
                  D ]}t          | t          j                  r n	 t          | |          }n# t          $ r Y >w xY wdt          |          dz   z   | dV  t          |t                    r|D ]}|dk    rVt          | t          j                  r<t          |t          j                  r"|j        D ]}t%          |||           E d {V  ^t          |t          j                  rt%          |||           E d {V  t          |t          j                  rt%          |||           E d {V  :t          | t          j                  r_|dk    rYt          |t                    rDt          |          dk    r1t          |d	         t          j                  rt+          d
|          }n2|dk    r*t          |t                    r|                                }n|}dt          |          dz   z   |d|j        j         V  dt          |          z   d| j        j         V  d S )Nuz    (r3   =targetsrw      r2   type_commentz,  # z)  # /)r@   rb   Constantrw   rS   kindr>   	__class__r   rp   _fields
TypeIgnoregetattrAttributeErrorlistDeleter   eltsr   ASTExprr   rstrip)rQ   r   fieldrw   itemeltr~   s          r   r   r      sV     4&&tz3'' I
 	c,'''
C)@
C
C
CCCC%% 7 7dCN++ 	E	#D%00EE 	 	 	H	 3|,,q01;5;;;;;;eT"" +	 X X Y&&"444 '"433 '  $y  #At$ $        
  cg.. X=dLRVWWWWWWWWWX  sw'' 	5e\4PPPPPPPPPP
 4..#W$$uc** %%%** |B/:: + (e44

.((Zs-C-C("\\^^

"
S..23 /Z / /O,/ /   
 c,'''
H
Ht~/F
H
HHHHHHs   !B22
B?>B?)r   )0r   rb   rn   r]   typingr   r   r   r   r   
black.moder   r	   r
   r   black.nodesr   blib2to3r   blib2to3.pgen2r   blib2to3.pgen2.grammarr   blib2to3.pgen2.parser   blib2to3.pgen2.tokenizer   blib2to3.pytreer   r   
ValueErrorr   r/   rS   rM   boolrP   rU   	ExceptionrW   intr   re   ru   r   r   r   r   r   r   r   <module>r      sS    


 



  7 7 7 7 7 7 7 7 7 7 7 7 7 7 T T T T T T T T T T T T             ! ! ! ! ! ! * * * * * * + + + + + + . . . . . . & & & & & & & &B B B B B: B B B#m"4 g    >' '3 '-1H 'RV ' ' ' 'TS 7 t    $ 3    O O O O OY O O O	
		
S#X	
:>	
W	
 	
 	
 	
#3 #37 # # # #, C C    $ $HSM $ $ $ $

'!%cg<?Gc]   FI FISW FI(3- FI FI FI FI FI FIr   