
    ^h                        S r SSKJr  SSKrSSKrSSKrSSKrSSKJ	r	J
r
  SSKrSSKr " S S5      rSSS jjr " S S	\
5      rS
S.           SS jjrSS jrg)zCLI interface for pytokens.    )annotationsN)Iterable
NamedTuplec                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	CLIArgs   strfilepathboolvalidateissue_128233_handling N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       F/home/james-whalen/.local/lib/python3.13/site-packages/pytokens/cli.pyr   r      s    MNr   r   c           	        [         R                  " 5       nUR                  S5        UR                  SSSS9  UR                  SSS9  UR                  U [	        5       S	9n[
        R                  R                  UR                  5      (       a  [        UR                  5      nS
nOUR                  /nSn[        U5       H  n[        US5       n [        R                  " UR                  5      u  pxSR%                  U5      UR'                  5       -   n	SSS5        UR                   (       a  [!        UW	WUUR(                  S9  M  W	R+                  W5      n
[,        R                  " U
UR(                  S9 H0  nXR.                  UR0                   n[#        [3        U5      U5        M2     M     g! [         a*    UR                   (       a  [#        SSSS9   SSS5        GM"  e f = f! , (       d  f       N= f)zCLI interface.r
   z--no-128233-handlingr   store_false)destactionz
--validate
store_true)r   )	namespaceFTrb[1;33mS[0m endflushNr   )verboser   r   r   )argparseArgumentParseradd_argument
parse_argsr   ospathisdirr
   find_all_python_filessortedopentokenizedetect_encodingreadlineSyntaxErrorr   printjoinreadr   decodepytokensstart_index	end_indexrepr)argvparserargsfilesr$   r
   fileencoding
read_bytessource
source_strtokentoken_sources                r   clirG      s   $$&F

#
$  
 \:TWY7D	ww}}T]]##%dmm45M(D!T'/'?'?'N$ XXj)DIIK7F " ==&*&@&@  x0J!**&*&@&@  **;*;eooNd<(%03 "@ 9  ==.BdC "!  "!s0   G'"F03"G'0&G$G'"G$$G''
G5	c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	
TokenTupleK   r	   typeztuple[int, int]startr"   r   Nr   r   r   r   rI   rI   K   s    
I	r   rI   T)r$   c               R   [         R                  " S5        [        U5      S:X  d	  USS S:w  a  US-   nUR                  S5       Vs/ s H  oUS-   PM	     nnUR	                  S5        [
        R                  " U5      n[        R                  " UR                  5      n[        U5         U V	s/ s H?  n	[        [        R                  U	R                     U	R                  U	R                  5      PMA     n
n	U
S   /n[#        U
S
S S
S9 GHS  u  pUS   nU	nUR                  UR                  s=:X  a  S:X  a>  O  O;UR%                  5         [        UR                  UR                  UR                  5      nUS
-   [        U
5      :  a  XS
-      nUR                  S:X  a  UR                  S:X  d`  UR                  S:X  a  UR                  S:X  a}  UR                  S   UR                  S   :X  a]  UR                  S
   UR                  S
   :  a=  UR	                  [        UR                  UR                  UR                  5      5        GMB  UR	                  U5        GMV     UR'                  U5      nS [(        R                  " UUS9 5       n[+        UUSS9 HQ  u  nnUU:g  nU(       d  U(       a  [!        SU5        [!        SU5        U(       d  M:  [!        SU 5        [!        SSSS	9    g   [!        SSSS	9  gs  snf s  sn	f ! [        R                   a    [!        SSSS	9   gf = f)zValidate the source code.ignorer   N   
r   r    Tr!      )rL   FSTRING_MIDDLEOPFSTRING_ENDc              3    #    U  H  nUR                   [        R                  R                  :w  d  M-  [	        UR                   R                  5       UR                  UR                  4UR                  UR                  45      v   M     g 7fN)
rK   r8   	TokenType
whitespacerI   to_python_token
start_line	start_colend_lineend_col).0rE   s     r   	<genexpr>validate.<locals>.<genexpr>   ss      

E ::++666	

JJ&&(u/^^U]]+	
 	


s   ,B
AB
r%   )strictEXPECTEDz---- GOTz	Filepath:z[1;31mF[0mz[1;32m.[0m)warningssimplefilterlensplitappendioBytesIOr0   r2   nextrI   tok_namerK   rL   r"   
TokenErrorr4   	enumeratepopr7   r8   zip)r
   rC   rA   r   r$   linesourcelinessource_filebuiltin_tokensrE   expected_tokens_unprocessedexpected_tokensindex
last_tokencurrent_token
next_tokensource_string
our_tokensbuiltin_token	our_tokenmismatchs                        r   r   r   Q   s    (# 6{a6"#;%/% -3LL,?@,?D%<,?K@u**V$K&&{';';<N ('
' x((4ekk599M' 	$ '
 3156O!"=ab"AK$R(
D4DD!&""  !!M 19s677 5QY?J##'77JOOt<S!&&*::"=8$$Q'=+<+<Q+??$$Q'-*;*;A*>>&&%**%++"(( }-O LR MM(+M
 &&1F

J %(D$Q y I-w*m,*i(8+x(&Bd; %R 

Bd3k A'
  "$7s+   K:*L .AK?4L ?L L&%L&c                    [        5       n[        R                  " U SS9 HU  u  p#nU HI  nUR                  S5      (       d  M  UR	                  [        R
                  R                  X%5      5        MK     MW     U$ )z9Recursively find all Python files in the given directory.F)followlinksz.py)setr*   walkendswithaddr+   r5   )	directorypython_filesroot_r?   r@   s         r   r-   r-      s_    5L'')?D}}U##  d!9:  @ r   rV   )r<   zlist[str] | Nonereturnint)r
   r	   rC   bytesrA   r	   r   r   r$   r   r   None)r   r	   r   zIterable[str])__doc__
__future__r   r&   rh   os.pathr*   r0   typingr   r   rc   r8   r   rG   rI   r   r-   r   r   r   <module>r      s    ! "  	   '     3l  e4e4e4 e4
  e4 e4 
e4Pr   