o
    h                     @   s~  d 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 deZdee dee fddZd*de dee defddZ!de dede"fddZ#dede fddZ$de dee%e%f de"dej&fdd Z'de dej&fd!d"Z(d#e d$e de fd%d&Z)d+dej&d'e%dee  fd(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                   @   s   e Zd ZdZdS )InvalidInputz7Raised when input source code fails all parse attempts.N)__name__
__module____qualname____doc__ r   r   C/var/www/html/ai/venv/lib/python3.10/site-packages/black/parsing.pyr      s    r   target_versionsreturnc                 C   sv   | s
t jt jt jgS g }t| tjst| tjs|t j t| tj	s*|t j t
dd | D r9|t j |S )Nc                 s   s    | ]
}t jt| v V  qd S )N)r   PATTERN_MATCHINGr   ).0vr   r   r   	<genexpr>-   s    zget_grammars.<locals>.<genexpr>)r   python_grammar_async_keywordspython_grammarpython_grammar_soft_keywordsr
   r   ASYNC_IDENTIFIERSr   appendASYNC_KEYWORDSany)r   grammarsr   r   r   get_grammars   s"   	
r(   r   src_txtc                 C   s^  |  ds	| d7 } tt|}i }|D ]|}t|}z	|| d}W  n} tyd } z5|jd \}}	|  }
z|
|d  }W n t	yI   d}Y nw t
d| d|	 d| ||j< W Y d}~qd}~w ty } z |jd \}}	t
d| d|	 d|jd	  ||j< W Y d}~qd}~ww t|dksJ |t| }|dt|trt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)r)   r   r'   errorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcr   r   r   lib2to3_parse6   sD   

	
rE   r;   c              
   C   s8   t |}z	|| d W dS  tttfy   Y dS w )NTF)r   r/   r0   r   r   IndentationError)r)   r;   r<   r   r   r   matches_grammar`   s   
rG   nodec                 C   s   t | }|S )z7Given a lib2to3 node, return its string representation.)str)rH   coder   r   r   lib2to3_unparsej   s   rK   srcr4   type_commentsc                C   s   d}t j| |||dS )Nz	<unknown>)feature_versionrM   )astparse)rL   r4   rM   filenamer   r   r   parse_single_versionp   s   rR   c                 C   s   dd t dtjd d D }d}t|ddD ]$}z
t| |ddW   S  ty; } z|s1t|}W Y d }~qd }~ww t|ddD ]}z
t| |d	dW   S  tyW   Y qBw t|)
Nc                 S   s   g | ]}d |fqS )   r   )r   minorr   r   r   
<listcomp>{       zparse_ast.<locals>.<listcomp>rS   r+    T)reverse)rM   F)rangesysversion_infosortedrR   SyntaxErrorrI   )rL   versionsfirst_errorr4   er   r   r   	parse_asty   s"   ra   lineendvaluec                 C   s$   dd |  D }| |}| S )Nc                 S   s   g | ]}|  qS r   )strip)r   ir   r   r   rU      rV   z_normalize.<locals>.<listcomp>)r2   joinrd   )rb   rc   stripped
normalizedr   r   r   
_normalize   s   
ri   depthc              	   c   s   t | tjrt | jtr| jdkrd| _d|  | jj dV  t| j	D ]}t | tj
r0 nzt| |}W n	 ty@   Y q&w d|d   | dV  t |tr|D ]3}|dkrwt | tjrwt |tjrw|jD ]}t||d E dH  qiqTt |tjrt||d E dH  qTq&t |tjrt||d E dH  q&t | tjr|d	krt |trtd
|}n|dkrt |tr| }n|}d|d   |d|jj V  q&d|  d| jj V  dS )z=Simple visitor generating strings to compare ASTs by content.uNz  (r+   =targets   rc   r*   type_commentz,  # z)  # /)r8   rO   Constantrc   rI   kind	__class__r   r\   _fields
TypeIgnoregetattrAttributeErrorlistDeleter   eltsstringify_astASTri   rstrip)rH   rj   fieldrc   itemeltrh   r   r   r   r{      sX   








"r{   )r   )r   )+r   rO   rZ   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(   rI   rE   boolrG   rK   intr|   rR   ra   ri   r{   r   r   r   r   <module>   s:    *


	"
