
    !.d'              
          U 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	m
Z
mZmZ ej        dk     rddlmZ nddl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# ee$d<    ej%                    dk    Z&	 ddl'm(Z( n=# e)$ r5 ej        dk     r%e&s# e*dej+                    ej,        d           neZ(Y nw xY wdZ-ee$d<    G d de.          Z/de	e         dee         fdZ0d.de1dee         de#fdZ2de1dede3fdZ4d e#de1fd!Z5d"e1d#e
e6e6f         d$e3deej7        e(j7        f         fd%Z8d"e1deej7        e(j7        f         fd&Z9e(j7        Z:eee(j7                          e$d'<   d(e1d)e1de1fd*Z;d/d eej7        e(j7        f         d+e6dee1         fd,Z<d eej7        e(j7        f         deej7        e(j7        f         fd-Z=dS )0z/
Parse Python code and perform AST validation.
    N)AnyIterableIteratorListSetTupleTypeUnion      )Final)VERSION_TO_FEATURESFeatureTargetVersionsupports_feature)syms)pygram)driver)Grammar)
ParseError)
TokenError)LeafNodeast3PyPy)r   zThe typed_ast package is required but not installed.
You can upgrade to Python 3.8+ or install typed_ast with
`python3 -m pip install typed-ast`.)file   z-Python 2 support was removed in version 22.0.PY2_HINTc                       e Zd ZdZdS )InvalidInputz7Raised when input source code fails all parse attempts.N)__name__
__module____qualname____doc__     -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>K   s0      
W
W!7#':1'==
W
W
W
W
W
Wr'   )r   Bpython_grammar_no_print_statement_no_exec_statement_async_keywords3python_grammar_no_print_statement_no_exec_statementpython_grammar_soft_keywordsr   r   ASYNC_IDENTIFIERSr-   appendASYNC_KEYWORDSany)r)   grammarss     r(   get_grammarsr9   3   s     	
 UF/
 	
 H2  
0HII
 	U	
 	
 	
 OW-CDD TRSSS

W
W
W
W
WWW =;<<< Or'   r&   src_txtc                    |                      d          s| dz  } t          t          |                    }i }|D ]}t          j        |          }	 |                    | d          } nQ# 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          |                   }t!          | t"          j                  st!          | t"          j                  r)|j        d	         }| dt(           }t          |          d|dt+          |t,                    rt/          t0          j        |g          }|S )
z4Given a string with source, return the lib2to3 Node.
Tr   z<line number missing in source>zCannot parse: :z: Nr   )endswithr9   setr   Driverparse_stringr   context
splitlines
IndexErrorr!   versionr   argslenmaxmatches_grammarr   python_grammar!python_grammar_no_print_statementr   
isinstancer   r   r   
file_input)r:   r)   r8   errorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcoriginal_msgmsgs                   r(   lib2to3_parser[   T   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[[!7F$9:: 	.oV=?
 ?
 	. 8A;L!//X//Cs##-t&$ 1dox00MsH   A++
D/5$CB&%C&B52C4B55#CD/*;D**D/rO   c                     t          j        |          }	 |                    | d           dS # t          t          t
          f$ r Y dS w xY w)NTF)r   r@   rA   r   r   IndentationError)r:   rO   rP   s      r(   rI   rI      s_    
-
 
 C$''' t 
$45   uus   . A	A	nodec                 $    t          |           }|S )z7Given a lib2to3 node, return its string representation.)str)r^   codes     r(   lib2to3_unparserb      s    t99DKr'   srcrE   type_commentsc                P   d}t           j        dk    r|dk    rt          j        | |||          S t          r<t           j        dk    rt          j        | ||          S t          j        | |          S |rt          j        | ||d                   S t          j        | |          S )Nz	<unknown>r   r   )feature_versionrd   rd   r   )rg   )sysversion_infoastparse_IS_PYPYr   )rc   rE   rd   filenames       r(   parse_single_versionro      s     H
6!!gooy7-
 
 
 	
  , v%%:c8=IIII:c8,,, 	, :c8WQZHHHH9S(+++r'   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 rf   r&   )r.   minors     r(   
<listcomp>zparse_ast.<locals>.<listcomp>   s    JJJuE
JJJr'   r   r    T)reverserh   F)rangeri   rj   sortedro   SyntaxErrorr`   )rc   versionsfirst_errorrE   es        r(   	parse_astr|      s   JJa1A!1Dq1H(I(IJJJHK(D111 % %	%'WDIIIIII 	% 	% 	% %!!ff	%
 (D111  	'WEJJJJJJ 	 	 	D	 k
"
""s*   A
A="A88A=B((
B54B5ast3_ASTlineendvaluec                     d |                                 D             }|                     |          }|                                S )Nc                 6    g | ]}|                                 S r&   )strip)r.   is     r(   rs   z_normalize.<locals>.<listcomp>   s     AAA17799AAAr'   )rC   joinr   )r~   r   stripped
normalizeds       r(   
_normalizer      sI     BAe.>.>.@.@AAAHh''J r'   depthc              #     K   t          |           } d|z   | j        j         dV  t          | j                  D ]}t
          rt          j        dk     s@t          j	        f}t          j        dk    r|t          j	        fz  }t          | |          r n	 t          | |          }n# t          $ r Y xw xY wd|dz   z   | dV  t          |t                    r|D ]}|dk    rpt          | t          j        t          j        f          rJt          |t          j        t          j        f          r$|j        D ]}t%          ||dz             E d{V  xt          |t          j        t          j        f          rt%          ||dz             E d{V  \t          |t          j        t(          f          rt%          ||dz             E d{V  t          | t          j                  r,|d	k    r&t          |t,                    rt/          d
|          }n|}d|dz   z   |d|j        j         V  d|z   d| j        j         V  dS )z=Simple visitor generating strings to compare ASTs by content.z  (r   r   =targets   Nr   r<   z,  # z)  # /)fixup_ast_constants	__class__r"   rw   _fieldsrm   ri   rj   r   
TypeIgnorerk   rL   getattrAttributeErrorlistDeleter   eltsstringify_astASTr}   Constantr`   r   )r^   r   fieldtype_ignore_classesr   itemeltr   s           r(   r   r      s      t$$DE\
54>2
5
5
5555 %% 6U 6U 	S-66#'?"46))#'88#$ 344 	#D%00EE 	 	 	H	 q!+5++++++eT"" %	U > > Y&&"4#*dk)BCC '"4#)TZ)@AA '  $y A A#0eai#@#@@@@@@@@@A  sw&9:: >,T519=========>( 233 	U$UEAI6666666666 4..#W$$uc** % (e44

"
U1W%TzTT%/:RTTTTTTE\
:
:!8
:
::::::s   B((
B54B5c                    t          | t          j        t          j        t          j        t          j        f          rt          j        | j                  S t          | t          j        t          j        f          rt          j        | j                  S t          | t          j	        t          j	        f          rt          j        | j
                  S | S )z,Map ast nodes deprecated in 3.8 to Constant.)r   )rL   rk   Strr   Bytesr   sNumnNameConstantr   )r^   s    r(   r   r     s    $$(CItzBCC *|$&))))$$(+,, *|$&))))$)4+<=>> .|$*----Kr'   )r&   )r   )>r%   rk   platformri   typingr   r   r   r   r   r   r	   r
   rj   typing_extensionsr   
black.moder   r   r   r   black.nodesr   blib2to3r   blib2to3.pgen2r   blib2to3.pgen2.grammarr   blib2to3.pgen2.parser   blib2to3.pgen2.tokenizer   blib2to3.pytreer   r   __annotations__python_implementationrm   	typed_astr   ImportErrorprintstderrexitr   
ValueErrorr!   r9   r`   r[   boolrI   rb   intr   ro   r|   r}   r   r   r   r&   r'   r(   <module>r      s3     


  



 I I I I I I I I I I I I I I I I I I I If''''''' T T T T T T T T T T T T             ! ! ! ! ! ! * * * * * * + + + + + + . . . . . . & & & & & & & &				)8)++v5   
&   6 	
 	
 	
 	
 	 B% A A AB B B B B: B B B#m"4 g    B/ /3 /-1H /RV / / / /dS 7 t    $ 3    ,	,S#X,:>,
37DH, , , ,4#3 #5$(!23 # # # #, #'(%TX
 * * * C C    @; @;cgtx/0 @; @;Xc] @; @; @; @;FeCGTX$56 5$(AR;S      s   B 7CC