
    MhR                     p   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dS )    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,d$S )&
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 | _        d S N)_coder   NodeMethods_methods_iter_children)selfcodes     U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/asttokens/mark_tokens.py__init__zMarkTokens.__init__1   s'    DJ$&&DMD    c                 x    t          j        |          | _        t          j        || j        | j                   d S r   )r   iter_children_funcr   
visit_tree_visit_before_children_visit_after_children)r   nodes     r!   r&   zMarkTokens.visit_tree7   s5    1$77DOD$5t7QRRRRRr#   c                     t          |dd           }| | j                            |j        |          nd }|s/t	          j        |          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tokens        r!   r'   z!MarkTokens._visit_before_children<   sx    
$d
+
+C@CDJ**4;<<<UYE )T^D)) )j""1a((e !\5))r#   c                    |}d } t          t          | j                  |          D ]S}t          j        |          r|r|j        j        |j        k     r|j        }|r|j        j        |j        k    r|j        }T|p|}|p|}t          j        |          r-| 	                    t          t          j
        |                    }|                     t          t          j
        |          t          t          j
        |          |          \  }} | j                            | |j                  |||          \  }}||f||fk    r|                     |||          \  }}||_        ||_        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)   r1   r3   firstlastchildnfirstnlasts	            r!   r(   z MarkTokens._visit_after_childrenI   s~    ED4h 344T::    		$U	+	+  "e'-;;!  U%+dj88 !\E =5D |D =$$T$*d%;%;<<d 00dj%1H1H$tz[_J`J`bfggKE4 <DM%%dDN;;D%NNMFE5$-''44VUDIImfeDDOOOr#   c                    |}t          j        |t          j                  st          j        |t          j        d          st          j        |j                  st| j                            |d          }t          j        |t          j                  s9t          j        |t          j        d          st          j        |j                  t| 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1 758S117{16""7 *



6
6a 5=11 758S117{16""7 :  ###r#   c                   
 g }g }| j                             ||          D ]}|dd         }|r!||d         k    r|                                 /|t          v r!|                    t          |                    Y|t
          v r |                    t
          |                    t          |          D ]}| j                             |          
t          
fddD                       r5| j                             
          
t          
fddD                       5t          j
        
g|R  r
}|D ]0}| j                             |          }	t          j
        |	g|R  r|	}1||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   X   K   | ]$}t          j        t          j        |          V  %d S r   )r   rG   r3   rI   ).0xr@   s     r!   	<genexpr>z7MarkTokens._expand_to_matching_pairs.<locals>.<genexpr>   s4      HH ux33HHHHHHr#   ),:)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|   s    NMz%%k:>> > >RaRh	 >Hr(:::+++28<====,,,28<=== .))  Z"":..dHHHHZHHHHH +z$$T** HHHHZHHHHH + 
	$	'	'	'	' 
   j##K00e		%	(%	(	(	( $$r#   c                 
    ||fS r    r   r)   r6   r8   s       r!   visit_defaultzMarkTokens.visit_default   s     $$r#   c                 ~    | 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   s;     Z"";//Ffeh
333Jr#   c                 Z    | 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   s/     J!!+uz5$!OOE:r#   c                 b    |j         dvr#| j                            |          }|j         dv#||fS )N)ifelifstringr   rM   rg   s       r!   visit_ifzMarkTokens.visit_if   s@    

N
2
2J))+66k 
N
2
2
""r#   c                     | j                             |t          j        d          }| 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   sT     *


EHc
:
:C:  %%DdEJ'''r#   c                 4   |j         sGt          |dd           st          |dd           r%| j                            |t          j                  }|j        dk    r<| 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     9 C'$
D99 CWT5RV=W=W C:((U\BBj 1Z"";//d		$#	.	. $$r#   c                     t           t          t          | j                  |                    }| j                            |j        t          j        |          }|j	        |j	        k    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   sc     :tHd&9::4@@AAK&&{'=uxYYJ****jr#   c                     |                      ||d          }t          j        |t          j        d          r| j                            |          }||fS )Nr   r   )r   r   rG   r3   rI   r   rL   rg   s       r!   
visit_callzMarkTokens.visit_call   sT    //j#FFJ
 UXs33 7J))+66k$$r#   c                 8    |                      ||d          }||fS )Nr   r   rg   s       r!   visit_matchclasszMarkTokens.visit_matchclass   s$    //j#FFJ$$r#   c                 8    |                      ||d          }||fS )Nr   r   rg   s       r!   visit_subscriptzMarkTokens.visit_subscript   s&     //j#FFJ$$r#   c                     	 | j                             |          }|j        dk    rn|})	 | j                             |          }|j        dk    rn|})||fS )NTrX   )r   rM   ry   rL   )r   r)   r6   r8   r   next_s         r!   visit_slicezMarkTokens.visit_slice  sw    Z"";//d			k	
j##J//e			j	
 $$r#   c                     | 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  sB     *''
33KUXs33 j$$r#   c                 @   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_parensr6   r8   r   )r   r)   r6   r8   rA   child_first
child_lasts          r!   handle_tuple_nonemptyz MarkTokens.handle_tuple_nonempty$  s    dCI&&P*T;O*P*PPPP IaLE #7E""e"11%2CUEUW[\\Kk!!##D+zBBB$$r#   c                     t          |t          j                  st          |t                    sJ |j        s||fS |                     |||          S r   )r   r   r	   r   r   r   rg   s       r!   visit_tuplezMarkTokens.visit_tuple1  sW    dCI&&P*T;O*P*PPPP9 ':&&%%dKDDDr#   Fc                    |j         dk    r|| j                            |          }| j                            |          }t	          j        |t          j        d          r't	          j        |t          j        d          r||}}|r	 ||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

Z"";//dZ"":..d		$#	.	. 43CD%(TW3X3X "&Z 	
$$r#   c                 .    |                      ||          S r   
handle_strrg   s       r!   	visit_strzMarkTokens.visit_strG      ??;
333r#   c                 j   t           j        dk     r|                     ||          S |}	 t          j        |t          t          d                    rd}|dk    r{| j                            |          }t          j        |t          t          d                    r|dz  }n-t          j        |t          t          d                    r|dz  }|dk    {|}| j                            |          }n=t          j        |t          j	                  r|}| j                            |          }nn||fS )N)      T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  s7    '!!__[*555D		$ ? ?	@	@ 
 aii&&t,,$dGE?$C$CDD QJEEge]&C&CDD QJE aii 
z$$Z00D%,// 
z$$Z00+, $$r#   c                 .    |                      ||          S r   r   rg   s       r!   visit_byteszMarkTokens.visit_bytesn  r   r#   c                     | j                             |          }t          j        |t          j                  r;|}| j                             |          }t          j        |t          j                  ;||fS r   )r   rL   r   rG   r3   r   )r   r6   r8   r@   s       r!   r   zMarkTokens.handle_strr  sp     :  ,,D

4
.
. /jZ"":..d 
4
.
. / $$r#   c                 \   t          j        |t          j                  r9| j                            |          }t          j        |t          j                  9t          |t                    r|j        }|dk     r/|j	        t          j
        k    r| 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     
:ux
0
0 5:((44j 
:ux
0
0 5 %!!  je qyy[%55j++K88$$r#   c                 l    |                      |t          t          j        |          j        ||          S r   )r   r   r   Numnrg   s       r!   	visit_numzMarkTokens.visit_num  s)    ??4cgt!4!4!6ZPPPr#   c                 ^   t          |t          j                  st          |t          j                  sJ t          |j        t          j                  r|                     ||j        ||          S t          |j        t          t          f          r|                     |||          S ||fS r   )r   r   ConstantncConstr   numbersNumberr   strbytesr   rg   s       r!   visit_constzMarkTokens.visit_const  s    dCL))GZbh-G-GGGG$*gn-- ;__T4:{JGGG	DJe	-	- ;^^D+z:::$$r#   c                 x   t          |t          j                  st          |t          j                  sJ |j        zt          |dd           i| j                            |t          j
        dd          }| 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     dCK((HJtRZ,H,HHHHxh = = Ez$$[%(C$NNfZ""6**d
ej$(333k$$r#   c                     t          j        |t          j        d          s<| 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  s[     K377 Z"";//d		$#	.	. $$r#   c                     t          j        |t          j        d          rB| j                            |t          j        d          }| 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  s]     UZ:: >j##J#>>e!%!6!6u!=!==kJ$$r#   c                 T    |j         dk    s| j                            |          }||fS )Nasyncrx   rg   s       r!   handle_asynczMarkTokens.handle_async  s0    ((J))+66k$$r#   c                     t          j        |t          j        d          r| j                            |          }|                     |||          S )Ndef)r   rG   r3   rs   r   rM   visit_functiondefrg   s       r!   visit_asyncfunctiondefz!MarkTokens.visit_asyncfunctiondef  sJ     UZ77 7J))+6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   ,   sU          S S S
* * *( ( (T$ $ $#% #% #%R% % %     	 	 	# # #    / -% % % .   	% 	% 	%% % %
% % %% % %(% % %% % %E E E% % % %4 4 4!% !% !%F4 4 4% % %% % %,Q Q Q% % % .
% 
% 
%% % %% % %% % %  . /	A 	A 	A 	A 	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 N N N N N N N N N N N N N N N                   ] ] ] ] ] ] ] ] 
 	8S/EHc?8S/EHc?8S/EHc?  	8S/EHc?8S/EHc?8S/EHc? gA gA gA gA gA gA gA gA gA gAr#   