
    XhR                        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mZ ddlmZ ddlmZmZ 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      Zy)    N)Module)CallableListUnioncastOptionalTupleTYPE_CHECKING   )util)	ASTTokens)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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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(d! Z)e)Z*e)Z+d" Z,y#)%
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     I/var/www/html/myenv/lib/python3.12/site-packages/asttokens/mark_tokens.py__init__zMarkTokens.__init__1   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_tree7   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)   r1   r3   firstlastchildnfirstnlasts	            r!   r(   z MarkTokens._visit_after_childrenI   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_tokenr3   NEWLINEOPISEOFtyper   
next_token
prev_token)r   start_tokents      r!   r:   zMarkTokens._find_last_in_stmts   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   rG   r3   rI   ).0xr@   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reversedrL   anyr   rG   rM   )r   r6   r8   r)   to_match_rightto_match_lefttoktok_infomatchr?   r@   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)   r6   r8   s       r!   visit_defaultzMarkTokens.visit_default   s     $$r#   c                     | j                   j                  |      }t        j                  |t        j
                  |       ||fS r   )r   rM   r   expect_tokenr3   rI   )r   
open_bracer)   r6   r8   befores         r!   handle_compzMarkTokens.handle_comp   s9     ZZ"";/Ffehh
3Jr#   c                 d    | j                   j                  |t        j                  dd      }||fS )NforTreverse)r   
find_tokenr3   NAME)r   r)   r6   r8   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   rM   rg   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   rr   r3   rI   rL   r   rj   rs   )r   r)   r6   r8   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   rr   r3   STRINGr7   rM   r   rG   rI   )r   r)   r6   r8   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   rr   r8   r3   rI   r7   )r   r)   r8   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   rG   r3   rI   r   rL   rg   s       r!   
visit_callzMarkTokens.visit_call   sM    //j#FJ
 UXXs3JJ))+6k$$r#   c                 0    | j                  ||d      }||fS )Nr   r   rg   s       r!   visit_matchclasszMarkTokens.visit_matchclass   s!    //j#FJ$$r#   c                 0    | j                  ||d      }||fS )Nr   r   rg   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)NrX   )r   rM   ry   rL   )r   r)   r6   r8   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 )NrW   )r   rL   r   rG   r3   rI   )r   r)   r6   r8   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_parensr6   r8   r   )r   r)   r6   r8   rA   child_first
child_lasts          r!   handle_tuple_nonemptyz MarkTokens.handle_tuple_nonempty$  s    dCII&*T;O*PPP IIaLE7E"e"11%2C2CUEUEUW[\Kk!##D+zBB$$r#   c                     t        |t        j                        st        |t              sJ |j                  s||fS | j                  |||      S r   )r   r   r	   r   r   r   rg   s       r!   visit_tuplezMarkTokens.visit_tuple1  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   )r7   r   rM   rL   r   rG   r3   rI   )r   r6   r8   include_allr   r   s         r!   r   zMarkTokens._gobble_parens9  s     

a
ZZ"";/dZZ"":.d			$#	.43C3CD%((TW3X"&Z
$$K$$r#   c                 &    | j                  ||      S r   
handle_strrg   s       r!   	visit_strzMarkTokens.visit_strG      ??;
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)      FSTRING_STARTr   r   FSTRING_END)
sysversion_infor   r   rG   r,   r3   r   rL   r   )r   r)   r6   r8   r@   counts         r!   visit_joinedstrzMarkTokens.visit_joinedstrK  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   rg   s       r!   visit_byteszMarkTokens.visit_bytesn  r   r#   c                    | j                   j                  |      }t        j                  |t        j
                        rB|}| j                   j                  |      }t        j                  |t        j
                        rB||fS r   )r   rL   r   rG   r3   r   )r   r6   r8   r@   s       r!   r   zMarkTokens.handle_strr  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   rG   r3   rI   r   rL   r   compleximagrK   NUMBERrM   )r   r)   valuer6   r8   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nrg   s       r!   	visit_numzMarkTokens.visit_num  s(    ??4cggt!4!6!6ZPPr#   c                 `   t        |t        j                        st        |t        j                        sJ t        |j
                  t        j                        r| j                  ||j
                  ||      S t        |j
                  t        t        f      r| j                  |||      S ||fS r   )r   r   ConstantncConstr   numbersNumberr   strbytesr   rg   s       r!   visit_constzMarkTokens.visit_const  s~    dCLL)Zbhh-GGG$**gnn-__T4::{JGG	DJJe	-^^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.   =Trp   )r   r   keywordr   Keywordargr,   r   rr   r3   rI   rM   r   rj   rs   )r   r)   r6   r8   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   rG   r3   rI   r   rM   )r   r)   r6   r8   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exceptrX   )r   rG   r3   rs   r   rr   rI   rM   )r   r)   r6   r8   colons        r!   visit_assignnamezMarkTokens.visit_assignname  sZ     UZZ:jj##J#>e!%!6!6u!==kJ$$r#   c                 ^    |j                   dk(  s| j                  j                  |      }||fS )Nasyncrx   rg   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   rG   r3   rs   r   rM   visit_functiondefrg   s       r!   visit_asyncfunctiondefz!MarkTokens.visit_asyncfunctiondef  sC     UZZ7JJ))+6k!!$Z@@r#   N)F)-__name__
__module____qualname____doc__r"   r&   r'   r(   r:   r<   rh   rm   rt   rz   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   visit_asyncforvisit_asyncwithr   rf   r#   r!   r   r   ,   s    S
*(T$#%R% 	#  / -% . 	%%
%%(%%E%4!%F4%%,Q% .
%%%%  . /	Ar#   r   )r   r   r   r3   r   typingr   r   r   r   r   r	   r
    r   	asttokensr   astroid_compatr   r   r   r   r   rI   r[   r]   r   rf   r#   r!   <module>r      s      
   N N N    ]
 	88S/EHHc?88S/EHHc?88S/EHHc?  	88S/EHHc?88S/EHHc?88S/EHHc? gA gAr#   