
    c*b"?                        d dl Z d dlZd dlZd dlZ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e	          Z
dS )    N   )util()[]{}c                   V   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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% Z.d& Z/e/Z0e/Z1d' Z2d(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     5lib/python3.11/site-packages/asttokens/mark_tokens.py__init__zMarkTokens.__init__*   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_tree/   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_children3   sx    
$d
+
+C@CDJ**4;<<<UYE )T^D)) )j""1a((e !\5))r   c                    |}d }|                      |          D ]>}|r|j        j        |j        k     r|j        }|r|j        j        |j        k    r|j        }?|p|}|p|}t	          j        |          r|                     |          }|                     |||          \  }} | j        	                    | |j
                  |||          \  }}||f||fk    r|                     |||          \  }}||_        ||_        d S r   )r   first_tokenindex
last_tokenr   is_stmt_find_last_in_stmt_expand_to_matching_pairsr   get	__class__)	r   r   r%   r'   firstlastchildnfirstnlasts	            r   r   z MarkTokens._visit_after_children?   s9    ED$$T**     "e'-;;!  U%+dj88 !\E =5D |D +$$T**d 00dCCKE4 <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_tokenr'   NEWLINEOPISEOFtyper   
next_token
prev_token)r   start_tokents      r   r-   zMarkTokens._find_last_in_stmte   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   r9   r'   r;   ).0xr2   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reversedr>   anyr   r9   r?   )r   r)   r+   r   to_match_rightto_match_lefttoktok_infomatchr1   r2   s             @r   r.   z$MarkTokens._expand_to_matching_pairsm   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   r)   r+   s       r   visit_defaultzMarkTokens.visit_default   s     $$r   c                 ~    | j                             |          }t          j        |t          j        |           ||fS r   )r   r?   r   expect_tokenr'   r;   )r   
open_bracer   r)   r+   befores         r   handle_compzMarkTokens.handle_comp   s;     Z"";//Ffeh
333Jr   )      c                 2    |                      d|||          S Nr   r_   rY   s       r   visit_listcompzMarkTokens.visit_listcomp       c4jAAAr   c                 2    |                      d|||          S Nr	   rd   rY   s       r   visit_setcompzMarkTokens.visit_setcomp   rf   r   c                 2    |                      d|||          S rh   rd   rY   s       r   visit_dictcompzMarkTokens.visit_dictcomp   rf   r   c                 Z    | j                             |t          j        dd          }||fS )NforTreverser   
find_tokenr'   NAMEr   r   r)   r+   r1   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   r?   rY   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   rq   r'   r;   r>   r   r\   rr   )r   r   r)   r+   dotnames         r   handle_attrzMarkTokens.handle_attr   sR    
*


EHc
:
:C:  %%DdEJ'''r   c                    |j         s6t          |dd           r%| j                            |t          j                  }|j        dk    r<| j                            |          }t          j	        |t          j
        d          r|}||fS )Ndocr   @)bodyr    r   rq   r'   STRINGr*   r?   r   r9   r;   )r   r   r)   r+   prevs        r   
handle_defzMarkTokens.handle_def   s     9 Cud33 C:((U\BBj 1Z"";//d		$#	.	. $$r   c                     t          |                     |                    }| j                            |j        t
          j        |          }|j        |j        k    r|}|S r   )nextr   r   rq   r+   r'   r;   r*   )r   r   r+   opening_bracketfirst_child
call_starts         r   handle_following_bracketsz$MarkTokens.handle_following_brackets   sY     t**40011K&&{'=uxYYJ****jr   c                     |                      ||d          }t          j        |t          j        d          r| j                            |          }||fS )Nr   r   )r   r   r9   r'   r;   r   r>   rY   s       r   
visit_callzMarkTokens.visit_call   sT    //j#FFJ
 UXs33 7J))+66k$$r   c                 8    |                      ||d          }||fS rc   )r   rY   s       r   visit_subscriptzMarkTokens.visit_subscript   s$    //j#FFJ$$r   c                     | j                             |          }t          j        |t          j        d          r|}||fS )NrI   )r   r>   r   r9   r'   r;   )r   r   r)   r+   maybe_commas        r   handle_bare_tuplezMarkTokens.handle_bare_tuple   s@    *''
33KUXs33 j$$r   c                     |j         d         }|                     |j        |j        d          \  }}||k    r|                     |||          S ||fS )Nr   T)elts_gobble_parensr)   r+   r   )r   r   r)   r+   r3   child_first
child_lasts          r   handle_tuple_nonemptyz MarkTokens.handle_tuple_nonempty   s`     ile $ 3 3E4EuGWY] ^ ^k:		#	#%%dKDDD:&&r   c                 d    |                      |||          \  }}|                     ||d          S )NF)r   r   rY   s       r   r   z MarkTokens.handle_tuple_nonempty  s6    "&"8"8{J"W"W{J  j%@@@r   c                 F    |j         s||fS |                     |||          S r   )r   r   rY   s       r   visit_tuplezMarkTokens.visit_tuple  s/    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   )r*   r   r?   r>   r   r9   r'   r;   )r   r)   r+   include_allr   r   s         r   r   zMarkTokens._gobble_parens  s     
a

Z"";//dZ"":..d		$#	.	. 43CD%(TW3X3X "&Z 	
$$r   c                 .    |                      ||          S r   
handle_strrY   s       r   	visit_strzMarkTokens.visit_str      ??;
333r   c                 .    |                      ||          S r   r   rY   s       r   visit_joinedstrzMarkTokens.visit_joinedstr  r   r   c                 .    |                      ||          S r   r   rY   s       r   visit_byteszMarkTokens.visit_bytes  r   r   c                     | j                             |          }t          j        |t          j                  r;|}| j                             |          }t          j        |t          j                  ;||fS r   )r   r>   r   r9   r'   r   )r   r)   r+   r2   s       r   r   zMarkTokens.handle_str"  sn    :  ,,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   r9   r'   r;   r   r>   
isinstancecompleximagr=   NUMBERr?   )r   r   valuer)   r+   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                 <    |                      ||j        ||          S r   )r   nrY   s       r   	visit_numzMarkTokens.visit_num:  s    ??4jAAAr   c                    t          |j        t          j                  r|                     ||j        ||          S t          |j        t
          j        t
          j        f          r|                     |||          S ||fS r   )	r   r   numbersNumberr   six	text_typebinary_typer   rY   s       r   visit_constzMarkTokens.visit_const>  sp    $*gn-- ;__T4:{JGGG	DJ @	A	A ;^^D+z:::$$r   c                    |j         zt          |dd           i| j                            |t          j        dd          }| j                            |          }t          j        |t          j	        |j                    |}||fS )Nr"   =Trn   )
argr    r   rq   r'   r;   r?   r   r\   rr   )r   r   r)   r+   equalsr~   s         r   visit_keywordzMarkTokens.visit_keywordJ  s{     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   r9   r'   r;   r   r?   )r   r   r)   r+   stars        r   visit_starredzMarkTokens.visit_starredT  sY    K377 Z"";//d		$#	.	. $$r   c                     t          j        |t          j        d          rB| j                            |t          j        d          }| j                            |          x}}||fS )NexceptrJ   )r   r9   r'   rr   r   rq   r;   r?   )r   r   r)   r+   colons        r   visit_assignnamezMarkTokens.visit_assignname\  s[    UZ:: >j##J#>>e!%!6!6u!=!==kJ$$r   c                 Z    | j                             |t          j        dd          }||fS )NwithTrn   rp   rs   s        r   
visit_withzMarkTokens.visit_withe  s-    j##KVT#RReZ  r   c                 T    |j         dk    s| j                            |          }||fS )Nasyncrx   rY   s       r   handle_asynczMarkTokens.handle_asyncm  s0    ((J))+66k$$r   c                     t          j        |t          j        d          r| j                            |          }|                     |||          S )Ndef)r   r9   r'   rr   r   r?   visit_functiondefrY   s       r   visit_asyncfunctiondefz!MarkTokens.visit_asyncfunctiondefu  sH    UZ77 7J))+66k!!$Z@@@r   N)F)3__name__
__module____qualname____doc__r   r   r   r   r-   r.   rZ   r_   sysversion_infore   r   PY2ri   rk   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   visit_constantr   r   r   r   r   visit_asyncforvisit_asyncwithr   rX   r   r   r   r   %   s          
S S S
* 
* 
*$ $ $L$ $ $"% "% "%P% % %
      	B B B 	W BB B BB B B  # # #
    / -% % % . 
 
 
% % %% % %% % % 	' ' ' 'A A AE E E% % % %4 4 44 4 44 4 4% % %% % % B B B% % % .% % %% % %% % % 	W !! ! !% % %
  . /A A A A Ar   r   )r   r   r'   r    r   r;   rM   rO   objectr   rX   r   r   <module>r      s     



  



       	8S/EHc?8S/EHc?8S/EHc?  	8S/EHc?8S/EHc?8S/EHc? TA TA TA TA TA TA TA TA TA TAr   