o
    PFf¬Y  ã                   @   s  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 ddlmZmZ erNd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)Úastroid_node_classesÚBaseContainer)Ú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r:d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 d+d,„ Z!ejdkrvd-d.„ Z"nd/d.„ Z"d0d1„ Z#dPd3d4„Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*dAdB„ Z+e+Z,dCdD„ Z-dEdF„ Z.dGdH„ Z/ejr´dIdJ„ Z0dKdL„ Z1e1Z2e1Z3dMdN„ Z4dOS )QÚ
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   ÚNodeMethodsÚ_methodsÚ_iter_children)ÚselfÚcode© r   úT/var/www/secure340b-portal/env/lib/python3.10/site-packages/asttokens/mark_tokens.pyÚ__init__4   s   

zMarkTokens.__init__c                 C   s"   t  |¡| _t  || j| j¡ d S r   )r   Ú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 }|s"t |¡r"| j dd¡}|p%||fS )NÚ
col_offsetr
   r   )Úgetattrr   Úget_token_from_utf8Úlinenor   Ú	is_moduleÚ	get_token)r   r&   Úparent_tokenÚcolÚtokenr   r   r    r$   ?   s
   z!MarkTokens._visit_before_childrenc           	      C   sö   |}d }t t| jƒ|ƒD ] }t |¡rq|r|jj|jk r |j}|r)|jj|jkr,|j}q|p0|}|p4|}t |¡rC|  	t tj
|ƒ¡}|  t tj
|ƒt tj
|ƒ|¡\}}| j | |j¡|||ƒ\}}||f||fkrs|  |||¡\}}||_||_d S r   )r   r   r   r   Úis_empty_astroid_sliceÚfirst_tokenÚindexÚ
last_tokenÚis_stmtÚ_find_last_in_stmtÚTokenÚ_expand_to_matching_pairsr   ÚgetÚ	__class__)	r   r&   r-   r/   ÚfirstÚlastÚchildÚnfirstÚnlastr   r   r    r%   L   s(   
€
"
z MarkTokens._visit_after_childrenc                 C   st   |}t  |tj¡s4t  |tjd¡s4t |j¡s4| jj|dd}t  |tj¡s4t  |tjd¡s4t |j¡r| j 	|¡S )Nú;T)Úinclude_extra)
r   Úmatch_tokenr/   ÚNEWLINEÚOPÚISEOFÚtyper   Ú
next_tokenÚ
prev_token)r   Ústart_tokenÚtr   r   r    r5   v   s   ÿ
þýÿ
þzMarkTokens._find_last_in_stmtc           
         s  g }g }| j  ||¡D ],}|dd… }|r ||d kr | ¡  q|tv r,| t| ¡ q|tv r7| t| ¡ qt|ƒD ]/}| j  |¡‰ t‡ fdd„dD ƒƒr`| j  ˆ ¡‰ t‡ fdd„dD ƒƒsOt	j
ˆ g|¢R Ž rkˆ }q<|D ]}| j  |¡}	t	j
|	g|¢R Ž r|	}qn||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   rA   r/   rC   )Ú.0Úx©r;   r   r    Ú	<genexpr>–   s   € z7MarkTokens._expand_to_matching_pairs.<locals>.<genexpr>)ú,ú:)r   Útoken_rangeÚpopÚ_matching_pairs_leftÚappendÚ_matching_pairs_rightÚreversedrF   Úanyr   rA   rG   )
r   r1   r3   r&   Úto_match_rightÚto_match_leftÚtokÚtok_infoÚmatchr:   r   rN   r    r7      s2   
€ÿ€€z$MarkTokens._expand_to_matching_pairsc                 C   s   ||fS r   r   ©r   r&   r1   r3   r   r   r    Úvisit_default¨   s   zMarkTokens.visit_defaultc                 C   s$   | j  |¡}t |tj|¡ ||fS r   )r   rG   r   Úexpect_tokenr/   rC   )r   Ú
open_bracer&   r1   r3   Úbeforer   r   r    Úhandle_comp®   s   zMarkTokens.handle_comp)é   é   c                 C   ó   |   d|||¡S ©Nr   ©rc   r^   r   r   r    Úvisit_listcomp¹   ó   zMarkTokens.visit_listcompc                 C   rf   ©Nr   rh   r^   r   r   r    Úvisit_setcomp¿   rj   zMarkTokens.visit_setcompc                 C   rf   rk   rh   r^   r   r   r    Úvisit_dictcompÃ   rj   zMarkTokens.visit_dictcompc                 C   ó   | j j|tjddd}||fS )NÚforT©Úreverse©r   Ú
find_tokenr/   ÚNAME©r   r&   r1   r3   r:   r   r   r    Úvisit_comprehensionÇ   s   zMarkTokens.visit_comprehensionc                 C   s(   |j dvr| j |¡}|j dvs||fS )N)ÚifÚelif©Ústringr   rG   r^   r   r   r    Úvisit_ifÒ   s   

ÿzMarkTokens.visit_ifc                 C   s4   | j  |tjd¡}| j  |¡}t |tj¡ ||fS )NÚ.)r   rs   r/   rC   rF   r   r`   rt   )r   r&   r1   r3   ÚdotÚnamer   r   r    Úhandle_attrØ   s   zMarkTokens.handle_attrc                 C   s`   |j st|dd ƒst|dd ƒr| j |tj¡}|jdkr,| j |¡}t 	|tj
d¡r,|}||fS )NÚdoc_nodeÚdocr   ú@)Úbodyr(   r   rs   r/   ÚSTRINGr2   rG   r   rA   rC   )r   r&   r1   r3   Úprevr   r   r    Ú
handle_defä   s   
zMarkTokens.handle_defc                 C   s<   t tt| jƒ|ƒƒ}| j |jtj|¡}|j	|j	kr|}|S r   )
Únextr   r   r   r   rs   r3   r/   rC   r2   )r   r&   r3   Úopening_bracketÚfirst_childÚ
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   r‚   )r‹   r   rA   r/   rC   r   rF   r^   r   r   r    Ú
visit_call  s   zMarkTokens.visit_callc                 C   ó   |   ||d¡}||fS )Nr   ©r‹   r^   r   r   r    Úvisit_matchclass  s   zMarkTokens.visit_matchclassc                 C   r   rg   rŽ   r^   r   r   r    Úvisit_subscript  s   zMarkTokens.visit_subscriptc                 C   sH   	 | j  |¡}|jdkrn|}q	 | j  |¡}|jdkr!	 ||fS |}q)NTrQ   )r   rG   rz   rF   )r   r&   r1   r3   r…   Únext_r   r   r    Úvisit_slice  s   
ü
ÿüzMarkTokens.visit_slicec                 C   s(   | j  |¡}t |tjd¡r|}||fS )NrP   )r   rF   r   rA   r/   rC   )r   r&   r1   r3   Úmaybe_commar   r   r    Úhandle_bare_tuple/  s   zMarkTokens.handle_bare_tuplec                 C   sf   t |tjƒst |tƒsJ ‚|jd }trtt|ƒ}|  |j	|j
d¡\}}||kr/|  |||¡S ||fS )Nr   T)Ú
isinstanceÚastr   ÚAstroidBaseContainerÚeltsr	   r   r   Ú_gobble_parensr1   r3   r”   )r   r&   r1   r3   r<   Úchild_firstÚ
child_lastr   r   r    Úhandle_tuple_nonempty9  s   

z MarkTokens.handle_tuple_nonemptyc                 C   s    |   |||¡\}}|  ||d¡S )NF)r”   r™   r^   r   r   r    rœ   G  s   c                 C   s6   t |tjƒst |tƒsJ ‚|js||fS |  |||¡S r   )r•   r–   r   r—   r˜   rœ   r^   r   r   r    Úvisit_tupleL  s   zMarkTokens.visit_tupleFc                 C   sd   |j dkr.| j |¡}| j |¡}t |tjd¡r)t |tjd¡r)||}}|r)q 	 ||fS ||fS )Nr   r   r   )r2   r   rG   rF   r   rA   r/   rC   )r   r1   r3   Úinclude_allr…   r‡   r   r   r    r™   T  s   
 
zMarkTokens._gobble_parensc                 C   ó   |   ||¡S r   ©Ú
handle_strr^   r   r   r    Ú	visit_strb  ó   zMarkTokens.visit_strc                 C   sÂ   t jdk r|  ||¡S |}	 t |ttdƒ¡rKd}|dkrB| j |¡}t |ttdƒ¡r1|d7 }nt |ttdƒ¡r>|d8 }|dks|}| j |¡}nt |tj	¡r[|}| j |¡}n	 ||fS q)N)rd   é   TÚFSTRING_STARTr
   r   ÚFSTRING_END)
ÚsysÚversion_infor¡   r   rA   r(   r/   r   rF   r„   )r   r&   r1   r3   r;   Úcountr   r   r    Úvisit_joinedstrf  s*   

úêzMarkTokens.visit_joinedstrc                 C   rŸ   r   r    r^   r   r   r    Úvisit_bytes‰  r£   zMarkTokens.visit_bytesc                 C   s@   | j  |¡}t |tj¡r|}| j  |¡}t |tj¡s||fS r   )r   rF   r   rA   r/   r„   )r   r1   r3   r;   r   r   r    r¡     s   þzMarkTokens.handle_strc                 C   s`   t  |tj¡r| j |¡}t  |tj¡st|tƒr|j}|dk r,|j	tj
kr,| j |¡}||fS )Nr   )r   rA   r/   rC   r   rF   r•   ÚcomplexÚimagrE   ÚNUMBERrG   )r   r&   Úvaluer1   r3   r   r   r    Ú
handle_num–  s   ÿ
zMarkTokens.handle_numc                 C   s   |   |ttj|ƒj||¡S r   )r°   r   r–   ÚNumÚnr^   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   ÚncÚConstr¯   ÚnumbersÚNumberr°   ÚsixÚ	text_typeÚbinary_typer¢   r^   r   r   r    Úvisit_const±  s   zMarkTokens.visit_constc                 C   sv   t |tjƒst |tjƒsJ ‚|jd ur7t|dd ƒd u r7| jj|t	j
ddd}| j |¡}t |t	j|j¡ |}||fS )Nr*   ú=Trp   )r•   r–   Úkeywordr´   ÚKeywordÚargr(   r   rs   r/   rC   rG   r   r`   rt   )r   r&   r1   r3   Úequalsr~   r   r   r    Úvisit_keyword¿  s   zMarkTokens.visit_keywordc                 C   s8   t  |tjd¡s| j |¡}t  |tjd¡r|}||fS )NÚ*)r   rA   r/   rC   r   rG   )r   r&   r1   r3   Ústarr   r   r    Úvisit_starredË  s
   zMarkTokens.visit_starredc                 C   s:   t  |tjd¡r| j |tjd¡}| j |¡ }}||fS )NÚexceptrQ   )r   rA   r/   rt   r   rs   rC   rG   )r   r&   r1   r3   Úcolonr   r   r    Úvisit_assignnameÔ  s   zMarkTokens.visit_assignnamec                 C   rn   )NÚwithTrp   rr   ru   r   r   r    Ú
visit_withÞ  s   zMarkTokens.visit_withc                 C   s   |j dks| j |¡}||fS )NÚasyncry   r^   r   r   r    Úhandle_asyncç  s   
zMarkTokens.handle_asyncc                 C   s*   t  |tjd¡r| j |¡}|  |||¡S )NÚdef)r   rA   r/   rt   r   rG   Úvisit_functiondefr^   r   r   r    Úvisit_asyncfunctiondefð  s   z!MarkTokens.visit_asyncfunctiondefN)F)5Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r#   r$   r%   r5   r7   r_   rc   r§   r¨   ri   r¸   ÚPY2rl   rm   rv   r{   r   Úvisit_attributeÚvisit_assignattrÚvisit_delattrr†   Úvisit_classdefrÍ   r‹   rŒ   r   r   r’   r”   rœ   r   r™   r¢   rª   r«   r¡   r°   r³   r»   Úvisit_constantrÁ   rÄ   rÇ   rÉ   rË   Úvisit_asyncforÚvisit_asyncwithrÎ   r   r   r   r    r   /   sh    *	)

	


#			r   )r–   r¶   r§   r/   r   Útypingr   r   r   r   r   r   r	   r¸   Ú r   Ú	asttokensr   r   Úastroid_compatr   r´   r   r—   r   rC   rT   rV   Úobjectr   r   r   r   r    Ú<module>   s,   $ýý