a
    Š©lcS  ã                   @   s0  d dl Z d dlZd dlZd dlZd dl mZ d dlmZmZmZm	Z	m
Z
mZmZ d dlZddlmZ ddlmZ ddlmZ zd dlmZ W n ey¢   dZY n0 er´ddlmZ ejd	fejd
fejdfejdfejdfejdfiZejd
fejd	fejdfejdfejdfejdfiZG dd„ deƒZdS )é    N)ÚModule)ÚCallableÚListÚUnionÚcastÚOptionalÚTupleÚTYPE_CHECKINGé   )Úutil)Ú	ASTTokens)ÚAstConstant)ÚAstNodeú(ú)ú[ú]Ú{Ú}c                   @   s~  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zejdk r^dd„ Zejrtdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZeZeZdd „ ZeZeZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z ejdkräd+d,„ Z!nd-d,„ Z!d.d/„ Z"dNd1d2„Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*e*Z+dAdB„ Z,dCdD„ Z-dEdF„ Z.ejrbdGdH„ Z/dIdJ„ Z0e0Z1e0Z2dKdL„ Z3dMS )OÚ
MarkTokensz§
  Helper that visits all nodes in the AST tree and assigns .first_token and .last_token attributes
  to each of them. This is the heart of the token-marking logic.
  c                 C   s   || _ t ¡ | _d | _d S ©N)Ú_coder   ZNodeMethodsÚ_methodsÚ_iter_children)ÚselfÚcode© r   úQ/var/www/html/django/DPS/env/lib/python3.9/site-packages/asttokens/mark_tokens.pyÚ__init__9   s    
zMarkTokens.__init__c                 C   s"   t  |¡| _t  || j| j¡ d S r   )r   Ziter_children_funcr   Ú
visit_treeÚ_visit_before_childrenÚ_visit_after_children)r   Únoder   r   r   r   ?   s    zMarkTokens.visit_treec                 C   sP   t |dd ƒ}|d ur$| j |j|¡nd }|sDt |¡rD| j dd¡}|pJ||fS )NÚ
col_offsetr
   r   )Úgetattrr   Zget_token_from_utf8Úlinenor   Z	is_moduleÚ	get_token)r   r"   Úparent_tokenÚcolÚtokenr   r   r   r    D   s
    z!MarkTokens._visit_before_childrenc           	      C   sê   |}d }t t| jƒ|ƒD ]4}|r.|jj|jk r4|j}|rF|jj|jkr|j}q|pT|}|p\|}t |¡rz|  t tj	|ƒ¡}|  
t tj	|ƒt tj	|ƒ|¡\}}| j | |j¡|||ƒ\}}||f||fkrÚ|  
|||¡\}}||_||_d S r   )r   r   r   Úfirst_tokenÚindexÚ
last_tokenr   Zis_stmtÚ_find_last_in_stmtÚTokenÚ_expand_to_matching_pairsr   ÚgetÚ	__class__)	r   r"   r'   r)   ÚfirstÚlastÚchildZnfirstZnlastr   r   r   r!   Q   s"    
"z MarkTokens._visit_after_childrenc                 C   sL   |}t  |tj¡s@t  |tjd¡s@t |j¡s@| jj|dd}q| j 	|¡S )Nú;T)Zinclude_extra)
r   Úmatch_tokenr)   ÚNEWLINEÚOPÚISEOFÚtyper   Ú
next_tokenÚ
prev_token)r   Zstart_tokenÚtr   r   r   r-   x   s    ÿ
þzMarkTokens._find_last_in_stmtc           
         sø   g }g }| j  ||¡D ]X}|dd… }|r@||d kr@| ¡  q|tv rX| t| ¡ q|tv r| t| ¡ qt|ƒD ]J}| j  |¡‰ t‡ fdd„dD ƒƒr¬| j  ˆ ¡‰ qˆt	j
ˆ g|¢R Ž rxˆ }qx|D ]&}| j  |¡}	t	j
|	g|¢R Ž rÈ|	}qÈ||fS )z´
    Scan tokens in [first_token, last_token] range that are between node's children, and for any
    unmatched brackets, adjust first/last tokens to include the closing pair.
    Né   éÿÿÿÿc                 3   s   | ]}t  ˆ tj|¡V  qd S r   )r   r6   r)   r8   )Ú.0Úx©r3   r   r   Ú	<genexpr>˜   ó    z7MarkTokens._expand_to_matching_pairs.<locals>.<genexpr>)ú,ú:)r   Útoken_rangeÚpopÚ_matching_pairs_leftÚappendÚ_matching_pairs_rightÚreversedr;   Úanyr   r6   r<   )
r   r*   r,   r"   Zto_match_rightZto_match_leftÚtokZtok_infoÚmatchr2   r   rB   r   r/      s*    
z$MarkTokens._expand_to_matching_pairsc                 C   s   ||fS r   r   ©r   r"   r*   r,   r   r   r   Úvisit_defaultª   s    zMarkTokens.visit_defaultc                 C   s$   | j  |¡}t |tj|¡ ||fS r   )r   r<   r   Úexpect_tokenr)   r8   )r   Ú
open_bracer"   r*   r,   Úbeforer   r   r   Úhandle_comp°   s    zMarkTokens.handle_comp)é   é   c                 C   s   |   d|||¡S ©Nr   ©rU   rP   r   r   r   Úvisit_listcomp»   s    zMarkTokens.visit_listcompc                 C   s   |   d|||¡S ©Nr   rY   rP   r   r   r   Úvisit_setcompÁ   s    zMarkTokens.visit_setcompc                 C   s   |   d|||¡S r[   rY   rP   r   r   r   Úvisit_dictcompÅ   s    zMarkTokens.visit_dictcompc                 C   s   | j j|tjddd}||fS )NÚforT©Úreverse©r   Ú
find_tokenr)   ÚNAME©r   r"   r*   r,   r2   r   r   r   Úvisit_comprehensionÉ   s    zMarkTokens.visit_comprehensionc                 C   s    |j dvr| j |¡}q ||fS )N)ÚifÚelif©Ústringr   r<   rP   r   r   r   Úvisit_ifÔ   s    
zMarkTokens.visit_ifc                 C   s4   | j  |tjd¡}| j  |¡}t |tj¡ ||fS )NÚ.)r   rb   r)   r8   r;   r   rR   rc   )r   r"   r*   r,   ÚdotÚnamer   r   r   Úhandle_attrÚ   s    zMarkTokens.handle_attrc                 C   sT   |j s"t|dd ƒr"| j |tj¡}|jdkrL| j |¡}t 	|tj
d¡rL|}||fS )NÚdocr   ú@)Úbodyr$   r   rb   r)   ÚSTRINGr+   r<   r   r6   r8   )r   r"   r*   r,   Úprevr   r   r   Ú
handle_defæ   s    
zMarkTokens.handle_defc                 C   s<   t tt| jƒ|ƒƒ}| j |jtj|¡}|j	|j	kr8|}|S r   )
Únextr   r   r   r   rb   r,   r)   r8   r+   )r   r"   r,   Zopening_bracketZfirst_childZ
call_startr   r   r   Úhandle_following_brackets÷   s
    z$MarkTokens.handle_following_bracketsc                 C   s2   |   ||d¡}t |tjd¡r*| j |¡}||fS )Nr   rp   )rv   r   r6   r)   r8   r   r;   rP   r   r   r   Ú
visit_call  s    zMarkTokens.visit_callc                 C   s   |   ||d¡}||fS rX   )rv   rP   r   r   r   Úvisit_subscript  s    zMarkTokens.visit_subscriptc                 C   sD   | j  |¡}|jdkrq|}q | j  |¡}|jdkr6q<|}q||fS )NrF   )r   r<   ri   r;   )r   r"   r*   r,   rs   Znext_r   r   r   Úvisit_slice  s    	

zMarkTokens.visit_slicec                 C   s(   | j  |¡}t |tjd¡r |}||fS )NrE   )r   r;   r   r6   r)   r8   )r   r"   r*   r,   Zmaybe_commar   r   r   Úhandle_bare_tuple,  s    zMarkTokens.handle_bare_tuplec                 C   sh   t |tjƒst |tjƒsJ ‚|jd }tr4tt|ƒ}|  	|j
|jd¡\}}||kr`|  |||¡S ||fS )Nr   T)Ú
isinstanceÚastr   ÚncÚ_BaseContainerÚeltsr	   r   r   Ú_gobble_parensr*   r,   rz   )r   r"   r*   r,   r4   Zchild_firstZ
child_lastr   r   r   Úhandle_tuple_nonempty6  s    

z MarkTokens.handle_tuple_nonemptyc                 C   s    |   |||¡\}}|  ||d¡S )NF)rz   r€   rP   r   r   r   r   D  s    c                 C   s8   t |tjƒst |tjƒsJ ‚|js*||fS |  |||¡S r   )r{   r|   r   r}   r~   r   r   rP   r   r   r   Úvisit_tupleI  s    zMarkTokens.visit_tupleFc                 C   s^   |j dkrV| j |¡}| j |¡}t |tjd¡rVt |tjd¡rV|| }}|rVq qVq ||fS )Nr   r   r   )r+   r   r<   r;   r   r6   r)   r8   )r   r*   r,   Zinclude_allrs   ru   r   r   r   r€   Q  s    
 
zMarkTokens._gobble_parensc                 C   s   |   ||¡S r   ©Ú
handle_strrP   r   r   r   Ú	visit_str_  s    zMarkTokens.visit_strc                 C   s   |   ||¡S r   rƒ   rP   r   r   r   Úvisit_joinedstrc  s    zMarkTokens.visit_joinedstrc                 C   s   |   ||¡S r   rƒ   rP   r   r   r   Úvisit_bytesk  s    zMarkTokens.visit_bytesc                 C   s4   | j  |¡}t |tj¡r,|}| j  |¡}q||fS r   )r   r;   r   r6   r)   rr   )r   r*   r,   r3   r   r   r   r„   o  s
    zMarkTokens.handle_strc                 C   sT   t  |tj¡r| j |¡}q t|tƒr,|j}|dk rL|j	tj
krL| j |¡}||fS )Nr   )r   r6   r)   r8   r   r;   r{   ÚcomplexÚimagr:   ÚNUMBERr<   )r   r"   Úvaluer*   r,   r   r   r   Ú
handle_numx  s    
zMarkTokens.handle_numc                 C   s   |   |ttj|ƒj||¡S r   )rŒ   r   r|   ÚNumÚnrP   r   r   r   Ú	visit_numŽ  s    zMarkTokens.visit_numc                 C   sd   t |tƒst |tjƒsJ ‚t |jtjƒr:|  ||j||¡S t |jtj	tj
fƒr\|  |||¡S ||fS r   )r{   r   r}   ZConstr‹   ÚnumbersÚNumberrŒ   ÚsixÚ	text_typeÚbinary_typer…   rP   r   r   r   Úvisit_const“  s    zMarkTokens.visit_constc                 C   sv   t |tjƒst |tjƒsJ ‚|jd urnt|dd ƒd u rn| jj|t	j
ddd}| j |¡}t |t	j|j¡ |}||fS )Nr%   ú=Tr_   )r{   r|   Úkeywordr}   ÚKeywordÚargr$   r   rb   r)   r8   r<   r   rR   rc   )r   r"   r*   r,   Úequalsrm   r   r   r   Úvisit_keyword¡  s    zMarkTokens.visit_keywordc                 C   s8   t  |tjd¡s0| j |¡}t  |tjd¡r0|}||fS )NÚ*)r   r6   r)   r8   r   r<   )r   r"   r*   r,   Ústarr   r   r   Úvisit_starred­  s
    zMarkTokens.visit_starredc                 C   s:   t  |tjd¡r2| j |tjd¡}| j |¡ }}||fS )NÚexceptrF   )r   r6   r)   rc   r   rb   r8   r<   )r   r"   r*   r,   Úcolonr   r   r   Úvisit_assignname¶  s    zMarkTokens.visit_assignnamec                 C   s   | j j|tjddd}||fS )NÚwithTr_   ra   rd   r   r   r   Ú
visit_withÀ  s    zMarkTokens.visit_withc                 C   s   |j dks| j |¡}||fS )NÚasyncrh   rP   r   r   r   Úhandle_asyncÉ  s    
zMarkTokens.handle_asyncc                 C   s*   t  |tjd¡r| j |¡}|  |||¡S )NÚdef)r   r6   r)   rc   r   r<   Úvisit_functiondefrP   r   r   r   Úvisit_asyncfunctiondefÒ  s    z!MarkTokens.visit_asyncfunctiondefN)F)4Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r!   r-   r/   rQ   rU   ÚsysÚversion_inforZ   r’   ÚPY2r\   r]   re   rj   rn   Zvisit_attributeZvisit_assignattrZvisit_delattrrt   Zvisit_classdefr§   rv   rw   rx   ry   rz   r   r‚   r€   r…   r†   r‡   r„   rŒ   r   r•   Zvisit_constantr›   rž   r¡   r£   r¥   Zvisit_asyncforZvisit_asyncwithr¨   r   r   r   r   r   4   sd   '	)

	


			r   )r|   r   r­   r)   r   Útypingr   r   r   r   r   r   r	   r’   Ú r   Z	asttokensr   r   Zastroid.node_classesZnode_classesr}   Ú	Exceptionr   r8   rI   rK   Úobjectr   r   r   r   r   Ú<module>   s0   $
ýý