
    fY                        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rdd	lmZ ej2                  d
fej2                  dfej2                  dfej2                  dfej2                  dfej2                  dfiZej2                  dfej2                  d
fej2                  dfej2                  dfej2                  dfej2                  dfiZ G d de      Zy)    N)Module)CallableListUnioncastOptionalTupleTYPE_CHECKING   )util)	ASTTokens)AstConstant)astroid_node_classesBaseContainer)AstNode()[]{}c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                  d
k  rd Zej                   rd Zd Zd Zd Zd ZeZeZeZd ZeZeZd Zd Zd Zd Zd Z d Z!ej                  d
k\  rd Z"nd Z"d Z#d*dZ$d Z%d Z&d Z'd Z(d  Z)d! Z*d" Z+e+Z,d# Z-d$ Z.d% Z/ej                   rd& Z0d' Z1e1Z2e1Z3d( Z4y))+
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                 R    || _         t        j                         | _        d | _        y N)_coder   NodeMethods_methods_iter_children)selfcodes     P/var/www/cvtools/html/venv/lib/python3.12/site-packages/asttokens/mark_tokens.py__init__zMarkTokens.__init__4   s!    DJ$$&DMD    c                     t        j                  |      | _        t        j                  || j                  | j
                         y r   )r   iter_children_funcr   
visit_tree_visit_before_children_visit_after_children)r    nodes     r"   r'   zMarkTokens.visit_tree:   s1    11$7DOOD$55t7Q7QRr$   c                     t        |dd       }|&| j                  j                  |j                  |      nd }|s1t	        j
                  |      r| j                  j                  dd      }|xs ||fS )N
col_offsetr   r   )getattrr   get_token_from_utf8linenor   	is_module	get_token)r    r*   parent_tokencoltokens        r"   r(   z!MarkTokens._visit_before_children?   sg    
$d
+C@CDJJ**4;;<UYET^^D)jj""1a(e !\5))r$   c                 $   |}d } t        t        | j                        |      D ]{  }t        j                  |      r|r#|j
                  j                  |j                  k  r|j
                  }|r$|j                  j                  |j                  kD  sp|j                  }} |xs |}|xs |}t        j                  |      r)| j                  t        t        j                  |            }| j                  t        t        j                  |      t        t        j                  |      |      \  }} | j                  j                  | |j                        |||      \  }}||f||fk7  r| j                  |||      \  }}||_        ||_        y 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*   r2   r4   firstlastchildnfirstnlasts	            r"   r)   z MarkTokens._visit_after_childrenL   s`    ED4h 3 34T:  		$	$U	+e''--;!!U%%++djj8  !\E =5D ||D$$T$**d%;<d 00djj%1H$tzz[_J`bfgKE4 <DMM%%dDNN;D%NMFE5$-'44VUDImfeDDOr$   c                    |}t        j                  |t        j                        st        j                  |t        j                  d      st        j
                  |j                        s| j                  j                  |d      }t        j                  |t        j                        sEt        j                  |t        j                  d      s t        j
                  |j                        s| j                  j                  |      S )N;T)include_extra)
r   match_tokenr4   NEWLINEOPISEOFtyper   
next_token
prev_token)r    start_tokents      r"   r;   zMarkTokens._find_last_in_stmtv   s    A5==1588S1{{166"
**



6a 5==1588S1{{166"::  ##r$   c                   
 g }g }| j                   j                  ||      D ]d  }|dd }|r||d   k(  r|j                          #|t        v r|j	                  t        |          D|t
        v sM|j	                  t
        |          f t        |      D ]z  }| j                   j                  |      
t        
fddD              r0| j                   j                  
      
t        
fddD              r0t        j                  
g| sy
}| |D ]6  }| j                   j                  |      }	t        j                  |	g| s5|	}8 ||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   h   K   | ])  }t        j                  t        j                  |       + y wr   )r   rH   r4   rJ   ).0xrA   s     r"   	<genexpr>z7MarkTokens._expand_to_matching_pairs.<locals>.<genexpr>   s$     H  uxx3Hs   /2),:)r   token_rangepop_matching_pairs_leftappend_matching_pairs_rightreversedrM   anyr   rH   rN   )r    r7   r9   r*   to_match_rightto_match_lefttoktok_infomatchr@   rA   s             @r"   r=   z$MarkTokens._expand_to_matching_pairs   sO    NMzz%%k:> >Rah	Hr(::++28<=,,28<=> .) ZZ"":.dHZHHzz$$T* HZHH 
		$	'	'
  jj##K0e			%	(%	(
 $$r$   c                 
    ||fS r    r    r*   r7   r9   s       r"   visit_defaultzMarkTokens.visit_default   s     $$r$   c                     | j                   j                  |      }t        j                  |t        j
                  |       ||fS r   )r   rN   r   expect_tokenr4   rJ   )r    
open_bracer*   r7   r9   befores         r"   handle_compzMarkTokens.handle_comp   s9     ZZ"";/Ffehh
3Jr$   )      c                 *    | j                  d|||      S Nr   rn   rh   s       r"   visit_listcompzMarkTokens.visit_listcomp       c4jAAr$   c                 *    | j                  d|||      S Nr   rs   rh   s       r"   visit_setcompzMarkTokens.visit_setcomp   ru   r$   c                 *    | j                  d|||      S rw   rs   rh   s       r"   visit_dictcompzMarkTokens.visit_dictcomp   ru   r$   c                 d    | j                   j                  |t        j                  dd      }||fS )NforTreverser   
find_tokenr4   NAMEr    r*   r7   r9   r@   s        r"   visit_comprehensionzMarkTokens.visit_comprehension   s0     JJ!!+uzz5$!OE:r$   c                 z    |j                   dvr*| j                  j                  |      }|j                   dvr*||fS )N)ifelifstringr   rN   rh   s       r"   visit_ifzMarkTokens.visit_if   s?    


N
2JJ))+6k 

N
2
""r$   c                     | j                   j                  |t        j                  d      }| j                   j	                  |      }t        j                  |t        j                         ||fS )N.)r   r   r4   rJ   rM   r   rk   r   )r    r*   r7   r9   dotnames         r"   handle_attrzMarkTokens.handle_attr   sS     **


EHHc
:C::  %DdEJJ'r$   c                 L   |j                   sDt        |dd       st        |dd       r*| j                  j                  |t        j
                        }|j                  dkD  rB| j                  j                  |      }t        j                  |t        j                  d      r|}||fS )Ndoc_nodedocr   @)bodyr-   r   r   r4   STRINGr8   rN   r   rH   rJ   )r    r*   r7   r9   prevs        r"   
handle_defzMarkTokens.handle_def   s     99'$
D9WT5RV=W::((U\\Bj 1ZZ"";/d			$#	.$$r$   c                     t         t        t        | j                        |            }| j                  j                  |j                  t        j                  |      }|j                  |j                  kD  r|}|S r   )
nextr   r   r   r   r   r9   r4   rJ   r8   )r    r*   r9   opening_bracketfirst_child
call_starts         r"   handle_following_bracketsz$MarkTokens.handle_following_brackets   sd     :tHd&9&9:4@AK&&{'='=uxxYJ****jr$   c                     | j                  ||d      }t        j                  |t        j                  d      r| j
                  j                  |      }||fS )Nr   r   )r   r   rH   r4   rJ   r   rM   rh   s       r"   
visit_callzMarkTokens.visit_call  sM    //j#FJ
 UXXs3JJ))+6k$$r$   c                 0    | j                  ||d      }||fS )Nr   r   rh   s       r"   visit_matchclasszMarkTokens.visit_matchclass  s!    //j#FJ$$r$   c                 0    | j                  ||d      }||fS rr   r   rh   s       r"   visit_subscriptzMarkTokens.visit_subscript  s#     //j#FJ$$r$   c                     	 | j                   j                  |      }|j                  dk7  rn|}.	 | j                   j                  |      }|j                  dk7  r	 ||fS |}2)NrY   )r   rN   r   rM   )r    r*   r7   r9   r   next_s         r"   visit_slicezMarkTokens.visit_slice  ss     ZZ"";/d		k	 
 jj##J/e		$$ j	 r$   c                     | j                   j                  |      }t        j                  |t        j
                  d      r|}||fS )NrX   )r   rM   r   rH   r4   rJ   )r    r*   r7   r9   maybe_commas        r"   handle_bare_tuplezMarkTokens.handle_bare_tuple/  s>     **''
3KUXXs3j$$r$   c                 0   t        |t        j                        st        |t              sJ |j                  d   }t
        rt        t        |      }| j                  |j                  |j                  d      \  }}||k(  r| j                  |||      S ||fS )Nr   T)
isinstanceastr	   AstroidBaseContainereltsr
   r   r   _gobble_parensr7   r9   r   )r    r*   r7   r9   rB   child_first
child_lasts          r"   handle_tuple_nonemptyz MarkTokens.handle_tuple_nonempty9  s    cii(Jt=Q,RRR iile	We$ $ 3 3E4E4EuGWGWY] ^k:		#%%dKDD:&&r$   c                 T    | j                  |||      \  }}| j                  ||d      S )NF)r   r   rh   s       r"   r   z MarkTokens.handle_tuple_nonemptyG  s0    "&"8"8{J"W{J  j%@@r$   c                     t        |t        j                        st        |t              sJ |j                  s||fS | j                  |||      S r   )r   r   r	   r   r   r   rh   s       r"   visit_tuplezMarkTokens.visit_tupleL  sG    dCII&*T;O*PPP99:&&%%dKDDr$   c                 @   |j                   dkD  r| j                  j                  |      }| j                  j                  |      }t	        j
                  |t        j                  d      r,t	        j
                  |t        j                  d      r||}}|r	 ||fS ||fS )Nr   r   r   )r8   r   rN   rM   r   rH   r4   rJ   )r    r7   r9   include_allr   r   s         r"   r   zMarkTokens._gobble_parensT  s     

a
ZZ"";/dZZ"":.d			$#	.43C3CD%((TW3X"&Z
$$K$$r$   c                 &    | j                  ||      S r   
handle_strrh   s       r"   	visit_strzMarkTokens.visit_strb      ??;
33r$   c                 ^   t         j                  dk  r| j                  ||      S |}	 t        j                  |t        t        d            rd}|dkD  rt| j                  j                  |      }t        j                  |t        t        d            r|dz  }n)t        j                  |t        t        d            r|dz  }|dkD  rt|}| j                  j                  |      }nGt        j                  |t        j                        r|}| j                  j                  |      }n	 ||fS )N)ro      FSTRING_STARTr   r   FSTRING_END)
sysversion_infor   r   rH   r-   r4   r   rM   r   )r    r*   r7   r9   rA   counts         r"   visit_joinedstrzMarkTokens.visit_joinedstrf  s    '!__[*55D
			$ ?	@
 ai&&t,$dGE?$CDQJEge]&CDQJE ai 
zz$$Z0D%,,/
zz$$Z0$$- r$   c                 &    | j                  ||      S r   r   rh   s       r"   visit_byteszMarkTokens.visit_bytes  r   r$   c                    | j                   j                  |      }t        j                  |t        j
                        rB|}| j                   j                  |      }t        j                  |t        j
                        rB||fS r   )r   rM   r   rH   r4   r   )r    r7   r9   rA   s       r"   r   zMarkTokens.handle_str  sh     ::  ,D


4
.jZZ"":.d 

4
. $$r$   c                    t        j                  |t        j                        r@| j                  j                  |      }t        j                  |t        j                        r@t        |t              r|j                  }|dk  r8|j                  t        j                  k(  r| j                  j                  |      }||fS )Nr   )r   rH   r4   rJ   r   rM   r   compleximagrL   NUMBERrN   )r    r*   valuer7   r9   s        r"   
handle_numzMarkTokens.handle_num  s     

:uxx
0::((4j 

:uxx
0 %! jje qy[%%5jj++K8$$r$   c                 n    | j                  |t        t        j                  |      j                  ||      S r   )r   r   r   Numnrh   s       r"   	visit_numzMarkTokens.visit_num  s(    ??4cggt!4!6!6ZPPr$   c                 t   t        |t              st        |t        j                        sJ t        |j                  t
        j                        r| j                  ||j                  ||      S t        |j                  t        j                  t        j                  f      r| j                  |||      S ||fS r   )r   r   ncConstr   numbersNumberr   six	text_typebinary_typer   rh   s       r"   visit_constzMarkTokens.visit_const  s    dK(JtRXX,FFF$**gnn-__T4::{JGG	DJJ @	A^^D+z::$$r$   c                    t        |t        j                        st        |t        j                        sJ |j
                  t        |dd       y| j                  j                  |t        j                  dd      }| j                  j                  |      }t        j                  |t        j                  |j
                         |}||fS )Nr/   =Tr}   )r   r   keywordr   Keywordargr-   r   r   r4   rJ   rN   r   rk   r   )r    r*   r7   r9   equalsr   s         r"   visit_keywordzMarkTokens.visit_keyword  s     dCKK(JtRZZ,HHHxxh = Ezz$$[%((C$NfZZ""6*d
ejj$((3k$$r$   c                     t        j                  |t        j                  d      sB| j                  j                  |      }t        j                  |t        j                  d      r|}||fS )N*)r   rH   r4   rJ   r   rN   )r    r*   r7   r9   stars        r"   visit_starredzMarkTokens.visit_starred  sT     K37ZZ"";/d			$#	.$$r$   c                     t        j                  |t        j                  d      rH| j                  j                  |t        j                  d      }| j                  j                  |      x}}||fS )NexceptrY   )r   rH   r4   r   r   r   rJ   rN   )r    r*   r7   r9   colons        r"   visit_assignnamezMarkTokens.visit_assignname  sZ     UZZ:jj##J#>e!%!6!6u!==kJ$$r$   c                 d    | j                   j                  |t        j                  dd      }||fS )NwithTr}   r   r   s        r"   
visit_withzMarkTokens.visit_with  s.    jj##KVT#ReZ  r$   c                 ^    |j                   dk(  s| j                  j                  |      }||fS )Nasyncr   rh   s       r"   handle_asynczMarkTokens.handle_async  s/    (JJ))+6k$$r$   c                     t        j                  |t        j                  d      r| j                  j                  |      }| j                  |||      S )Ndef)r   rH   r4   r   r   rN   visit_functiondefrh   s       r"   visit_asyncfunctiondefz!MarkTokens.visit_asyncfunctiondef  sC     UZZ7JJ))+6k!!$Z@@r$   N)F)5__name__
__module____qualname____doc__r#   r'   r(   r)   r;   r=   ri   rn   r   r   rt   r   PY2rx   rz   r   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   rg   r$   r"   r   r   /   s4   S
*(T$#%R%  	B 	WWBB	#  / -% . 	%%
%%(% 	'A
E%4!%F4%%,Q
% .
%%% 	WW!%  . /	Ar$   r   )r   r   r   r4   r   typingr   r   r   r   r   r	   r
   r    r   	asttokensr   r   astroid_compatr   r   r   r   r   rJ   r\   r^   objectr   rg   r$   r"   <module>r     s      
   N N N 
     ]
 	88S/EHHc?88S/EHHc?88S/EHHc?  	88S/EHHc?88S/EHHc?88S/EHHc? JA JAr$   