
    hR                        S SK r S SKrS SKrS SKrS SK Jr  S SKJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJrJr  \(       a  SSKJr  \R.                  S	4\R.                  S
4\R.                  S4\R.                  S4\R.                  S4\R.                  S40r\R.                  S
4\R.                  S	4\R.                  S4\R.                  S4\R.                  S4\R.                  S40r " S S5      rg)    N)Module)CallableListUnioncastOptionalTupleTYPE_CHECKING   )util)	ASTTokens)astroid_node_classesBaseContainer)AstNode()[]{}c                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS r\r\r\rS r\r\rS rS rS rS rS rS rS rS rS&S jrS rS r S r!S r"S r#S r$S r%\%r&S r'S  r(S! r)S" r*\*r+\*r,S# r-S$r.g%)'
MarkTokens,   z
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    Xl         [        R                  " 5       U l        S U l        g N)_coder   NodeMethods_methods_iter_children)selfcodes     hC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\asttokens/mark_tokens.py__init__MarkTokens.__init__1   s    J$$&DMD    c                     [         R                  " U5      U l        [         R                  " XR                  U R
                  5        g r   )r   iter_children_funcr   
visit_tree_visit_before_children_visit_after_children)r    nodes     r"   r(   MarkTokens.visit_tree7   s/    11$7DOOD55t7Q7QRr%   c                    [        USS 5      nUb&  U R                  R                  UR                  U5      OS nU(       d7  [        R
                  " U5      (       a  U R                  R                  SS5      nU=(       d    UU4$ )N
col_offsetr   r   )getattrr   get_token_from_utf8linenor   	is_module	get_token)r    r+   parent_tokencoltokens        r"   r)   !MarkTokens._visit_before_children<   sj    
$d
+C@CDJJ**4;;<UYET^^D))jj""1a(e !\5))r%   c                 ^   UnS n[        [        U R                  5      " U5       H  n[        R                  " U5      (       a  M   U(       a$  UR
                  R                  UR                  :  a  UR
                  nU(       a&  UR                  R                  UR                  :  d  M  UR                  nM     U=(       d    UnU=(       d    Un[        R                  " U5      (       a)  U R                  [        [        R                  U5      5      nU R                  [        [        R                  U5      [        [        R                  U5      U5      u  pEU R                  R                  XR                  5      " XU5      u  pxXx4XE4:w  a  U R                  XxU5      u  pxXql        Xl        g 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+   r4   r6   firstlastchildnfirstnlasts	            r"   r*    MarkTokens._visit_after_childrenI   sI    EDh 3 34T:		$	$U	+	+e''--;!!U%%++djj8 ; !\E =5D ||D$$T$**d%;<d 00djj%1H$tzz[_J`bfgKE MM%%dNN;DNMF5-'44VDImfOr%   c                 \   Un[         R                  " U[        R                  5      (       d  [         R                  " U[        R                  S5      (       d  [        R
                  " UR                  5      (       d  U R                  R                  USS9n[         R                  " U[        R                  5      (       dR  [         R                  " U[        R                  S5      (       d'  [        R
                  " UR                  5      (       d  M  U R                  R                  U5      $ )N;T)include_extra)
r   match_tokenr6   NEWLINEOPISEOFtyper   
next_token
prev_token)r    start_tokents      r"   r>   MarkTokens._find_last_in_stmts   s    A5==11588S11{{166""
**



6a 5==11588S11{{166""::  ##r%   c                   ^
 / n/ nU R                   R                  X5       Hq  nUSS nU(       a  XtS   :X  a  UR                  5         M)  U[        ;   a  UR	                  [        U   5        MM  U[
        ;   d  MY  UR	                  [
        U   5        Ms     [        U5       H  nU R                   R                  U5      m
[        U
4S jS 5       5      (       a7  U R                   R                  T
5      m
[        U
4S jS 5       5      (       a  M7  [        R                  " T
/UQ76 (       d  M  T
nM     U H>  nU R                   R                  U5      n	[        R                  " U	/UQ76 (       d  M<  U	nM@     X4$ )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   p   >#    U  H+  n[         R                  " T[        R                  U5      v   M-     g 7fr   )r   rL   r6   rN   ).0xrD   s     r"   	<genexpr>7MarkTokens._expand_to_matching_pairs.<locals>.<genexpr>   s'     HZ  uxx33Zs   36),:)r   token_rangepop_matching_pairs_leftappend_matching_pairs_rightreversedrQ   anyr   rL   rR   )r    r:   r<   r+   to_match_rightto_match_lefttoktok_infomatchrC   rD   s             @r"   r@   $MarkTokens._expand_to_matching_pairs|   sF    NMzz%%k>Rah	Hr(::++28<=,,28<= ? .)ZZ"":.dHZHHHzz$$T* HZHHH 
		$	'	'	'
 * jj##K0e			%	(%	(	( 
 $$r%   c                     X#4$ r    r    r+   r:   r<   s       r"   visit_defaultMarkTokens.visit_default   s     $$r%   c                     U R                   R                  U5      n[        R                  " U[        R
                  U5        XT4$ r   )r   rR   r   expect_tokenr6   rN   )r    
open_bracer+   r:   r<   befores         r"   handle_compMarkTokens.handle_comp   s7     ZZ"";/Ffehh
3r%   c                 \    U R                   R                  U[        R                  SSS9nXC4$ )NforTreverse)r   
find_tokenr6   NAME)r    r+   r:   r<   rC   s        r"   visit_comprehensionMarkTokens.visit_comprehension   s.     JJ!!+uzz5$!OEr%   c                     UR                   S;  a-  U R                  R                  U5      nUR                   S;  a  M-  X#4$ )N)ifelifstringr   rR   ro   s       r"   visit_ifMarkTokens.visit_if   s=    


N
2JJ))+6k 

N
2""r%   c                     U R                   R                  U[        R                  S5      nU R                   R	                  U5      n[
        R                  " U[        R                  5        X%4$ )N.)r   r|   r6   rN   rQ   r   rs   r}   )r    r+   r:   r<   dotnames         r"   handle_attrMarkTokens.handle_attr   sQ     **


EHHc
:C::  %DdEJJ'r%   c                 v   UR                   (       dN  [        USS 5      (       d  [        USS 5      (       a*  U R                  R                  U[        R
                  5      nUR                  S:  aH  U R                  R                  U5      n[        R                  " U[        R                  S5      (       a  UnX#4$ )Ndoc_nodedocr   @)bodyr/   r   r|   r6   STRINGr;   rR   r   rL   rN   )r    r+   r:   r<   prevs        r"   
handle_defMarkTokens.handle_def   s     99'$
D99WT5RV=W=W::((U\\Bj 1ZZ"";/d			$#	.	.$$r%   c                     [        [        [        U R                  5      " U5      5      nU R                  R                  UR                  [        R                  U5      nUR                  UR                  :  a  UnU$ r   )
nextr   r   r   r   r|   r<   r6   rN   r;   )r    r+   r<   opening_bracketfirst_child
call_starts         r"   handle_following_brackets$MarkTokens.handle_following_brackets   sa     tHd&9&9:4@AK&&{'='=uxxYJ****jr%   c                     U R                  XS5      n[        R                  " U[        R                  S5      (       a  U R
                  R                  U5      nX#4$ )Nr   r   )r   r   rL   r6   rN   r   rQ   ro   s       r"   
visit_callMarkTokens.visit_call   sL    //#FJ
 UXXs33JJ))+6k$$r%   c                 ,    U R                  XS5      nX#4$ )Nr   r   ro   s       r"   visit_matchclassMarkTokens.visit_matchclass   s    //#FJ$$r%   c                 ,    U R                  XS5      nX#4$ )Nr   r   ro   s       r"   visit_subscriptMarkTokens.visit_subscript   s     //#FJ$$r%   c                      U R                   R                  U5      nUR                  S:w  a  OUnM0   U R                   R                  U5      nUR                  S:w  a   X#4$ UnM3  )Nr_   )r   rR   r   rQ   )r    r+   r:   r<   r   next_s         r"   visit_sliceMarkTokens.visit_slice  sq     ZZ"";/d		k	 
 jj##J/e		$$ j	 r%   c                     U R                   R                  U5      n[        R                  " U[        R
                  S5      (       a  UnX#4$ )Nr^   )r   rQ   r   rL   r6   rN   )r    r+   r:   r<   maybe_commas        r"   handle_bare_tupleMarkTokens.handle_bare_tuple  s?     **''
3KUXXs33j$$r%   c                 H   [        U[        R                  5      (       d  [        U[        5      (       d   eUR                  S   n[
        (       a  [        [        U5      nU R                  UR                  UR                  S5      u  pVX%:X  a  U R                  XU5      $ X#4$ )Nr   T)
isinstanceastr	   AstroidBaseContainereltsr
   r   r   _gobble_parensr:   r<   r   )r    r+   r:   r<   rE   child_first
child_lasts          r"   handle_tuple_nonempty MarkTokens.handle_tuple_nonempty$  s    dCII&&*T;O*P*PPP IIaLE}7E"e"11%2C2CUEUEUW[\K!##DzBB$$r%   c                     [        U[        R                  5      (       d  [        U[        5      (       d   eUR                  (       d  X#4$ U R                  XU5      $ r   )r   r   r	   r   r   r   ro   s       r"   visit_tupleMarkTokens.visit_tuple1  sI    dCII&&*T;O*P*PPP99&&%%dDDr%   c                 ^   UR                   S:  a  U R                  R                  U5      nU R                  R                  U5      n[        R
                  " U[        R                  S5      (       a6  [        R
                  " U[        R                  S5      (       a  XEp!U(       a  M   X4$ X4$ )Nr   r   r   )r;   r   rR   rQ   r   rL   r6   rN   )r    r:   r<   include_allr   r   s         r"   r   MarkTokens._gobble_parens9  s     

a
ZZ"";/dZZ"":.d			$#	.	.43C3CD%((TW3X3X"&Z
$$K$$r%   c                 $    U R                  X#5      $ r   
handle_strro   s       r"   	visit_strMarkTokens.visit_strG      ??;33r%   c                    [         R                  S:  a  U R                  X#5      $ Un [        R                  " U[        [        S5      5      (       a  SnUS:  a  U R                  R                  U5      n[        R                  " U[        [        S5      5      (       a  US-  nO/[        R                  " U[        [        S5      5      (       a  US-  nUS:  a  M  UnU R                  R                  U5      nOL[        R                  " U[        R                  5      (       a  UnU R                  R                  U5      nO X#4$ GM!  )N)      FSTRING_STARTr   r   FSTRING_END)
sysversion_infor   r   rL   r/   r6   r   rQ   r   )r    r+   r:   r<   rD   counts         r"   visit_joinedstrMarkTokens.visit_joinedstrK  s    '!__[55D
			$ ?	@	@
 ai&&t,$dGE?$CDDQJEge]&CDDQJE ai 
zz$$Z0D%,,//
zz$$Z0$$- r%   c                 $    U R                  X#5      $ r   r   ro   s       r"   visit_bytesMarkTokens.visit_bytesn  r   r%   c                 $   U R                   R                  U5      n[        R                  " U[        R
                  5      (       aI  UnU R                   R                  U5      n[        R                  " U[        R
                  5      (       a  MI  X4$ r   )r   rQ   r   rL   r6   r   )r    r:   r<   rD   s       r"   r   MarkTokens.handle_strr  sl     ::  ,D


4
.
.jZZ"":.d 

4
.
. $$r%   c                    [         R                  " U[        R                  5      (       aG  U R                  R                  U5      n[         R                  " U[        R                  5      (       a  MG  [        U[        5      (       a  UR                  nUS:  a9  UR                  [        R                  :X  a  U R                  R                  U5      nX44$ )Nr   )r   rL   r6   rN   r   rQ   r   compleximagrP   NUMBERrR   )r    r+   valuer:   r<   s        r"   
handle_numMarkTokens.handle_num{  s     

:uxx
0
0::((4j 

:uxx
0
0 %!! jje qy[%%5jj++K8$$r%   c                 l    U R                  U[        [        R                  U5      R                  X#5      $ r   )r   r   r   Numnro   s       r"   	visit_numMarkTokens.visit_num  s&    ??4cggt!4!6!6PPr%   c                    [        U[        R                  5      (       d!  [        U[        R                  5      (       d   e[        UR
                  [        R                  5      (       a  U R                  XR
                  X#5      $ [        UR
                  [        [        45      (       a  U R                  XU5      $ X#4$ r   )r   r   ConstantncConstr   numbersNumberr   strbytesr   ro   s       r"   visit_constMarkTokens.visit_const  s    dCLL))Zbhh-G-GGG$**gnn--__T::{GG	DJJe	-	-^^Dz::$$r%   c                    [        U[        R                  5      (       d!  [        U[        R                  5      (       d   eUR
                  b  [        USS 5      cw  U R                  R                  U[        R                  SSS9nU R                  R                  U5      n[        R                  " U[        R                  UR
                  5        UnX#4$ )Nr1   =Trz   )r   r   keywordr   Keywordargr/   r   r|   r6   rN   rR   r   rs   r}   )r    r+   r:   r<   equalsr   s         r"   visit_keywordMarkTokens.visit_keyword  s     dCKK((JtRZZ,H,HHHxxh = Ezz$$[%((C$NfZZ""6*d
ejj$((3k$$r%   c                     [         R                  " U[        R                  S5      (       dH  U R                  R                  U5      n[         R                  " U[        R                  S5      (       a  UnX#4$ )N*)r   rL   r6   rN   r   rR   )r    r+   r:   r<   stars        r"   visit_starredMarkTokens.visit_starred  sX     K377ZZ"";/d			$#	.	.$$r%   c                     [         R                  " U[        R                  S5      (       aG  U R                  R                  U[        R                  S5      nU R                  R                  U5      =p#X#4$ )Nexceptr_   )r   rL   r6   r}   r   r|   rN   rR   )r    r+   r:   r<   colons        r"   visit_assignnameMarkTokens.visit_assignname  sY     UZZ::jj##J#>e!%!6!6u!==k$$r%   c                 ^    UR                   S:X  d  U R                  R                  U5      nX#4$ )Nasyncr   ro   s       r"   handle_asyncMarkTokens.handle_async  s-    (JJ))+6k$$r%   c                     [         R                  " U[        R                  S5      (       a  U R                  R                  U5      nU R                  XU5      $ )Ndef)r   rL   r6   r}   r   rR   visit_functiondefro   s       r"   visit_asyncfunctiondef!MarkTokens.visit_asyncfunctiondef  sD     UZZ77JJ))+6k!!$Z@@r%   )r   r   r   N)F)/__name__
__module____qualname____firstlineno____doc__r#   r(   r)   r*   r>   r@   rp   rv   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   visit_asyncforvisit_asyncwithr  __static_attributes__rn   r%   r"   r   r   ,   s    S
*(T$#%R% 	#  / -% . 	%%
%%(%%E%4!%F4%%,Q% .
%%%%  . /	Ar%   r   )r   r   r   r6   r   typingr   r   r   r   r   r	   r
    r   	asttokensr   astroid_compatr   r   r   r   r   rN   rb   rd   r   rn   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%   