
    h"              	          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!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jR                  fdZ*de dejR                  fdZ+de de de fd Z,dejR                  dee    fd!Z-dejR                  d"eejR                     d#ejR                  dee    fd$Z.dejR                  d"eejR                     dee    fd%Z/dej`                  deejR                     fd&Z1y)(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__     @/var/www/html/immo/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rI   c                     t        j                  |      }	 |j                  | d       y# t        t        t
        f$ r Y yw xY w)NFT)r   r<   r=   r   r   IndentationError)r-   rI   rJ   s      r   matches_grammarrV   i   sF    
--
 C%(  
$45 s   * A Anodec                     t        |       }|S )z7Given a lib2to3 node, return its string representation.)str)rW   codes     r   lib2to3_unparser[   s   s    t9DKr   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   r]   r]   y   s    Nr   r]   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_versionr_   )warningscatch_warningssimplefilterSyntaxWarningDeprecationWarningastparse)r^   rA   r_   filenames       r   _parse_single_versionrk   }   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)r_   F)rangesysversion_infosortedrk   SyntaxErrorrY   )r^   minorversionsfirst_errorrA   es         r   	parse_astrx      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)ry   r1   istripped
normalizeds        r   
_normalizer      sK     /4.>.>.@A1779AHAh'J 	 Bs   Ac                     t        | g       S )z=Simple visitor generating strings to compare ASTs by content.)_stringify_ast)rW   s    r   stringify_astr      s    $##r   parent_stack
new_parentc              #   z   K   |j                  |       t        | |      E d {    |j                          y 7 wr   )r(   r   pop)rW   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   rh   Constantr1   rY   kindrC   	__class__r   rr   _fields
TypeIgnoregetattrAttributeErrorlistDeleteTuple_unwrap_tuplesr   ASTExprr   rstrip)rW   r   fieldr1   itemeltr   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   rh   r   r   )rW   r   s     r   r   r      s=     yy c399%%c***I	*s   8A	AA	)r   )2r   rh   rp   rc   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,   rY   rS   boolrV   r[   	Exceptionr]   tupleintr   rk   rx   r   r   r   r   r   r   r   r   r   <module>r      s    
  0 T T   ! * + . &B: B#m"4 g @ @B//#-m#</	/dS 7 t $ 3 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   