
    h                        d Z ddlmZ ddlZddlZddlZddlZddlm	Z	m
Z
 ddlZddlZ G d d      ZdddZ G d d	e
      Zd
d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)zCLI interface for pytokens.    )annotationsN)Iterable
NamedTuplec                  ,    e Zd ZU ded<   ded<   ded<   y)CLIArgsstrfilepathboolvalidateissue_128233_handlingN__name__
__module____qualname____annotations__     ?/var/www/html/immo/lib/python3.12/site-packages/pytokens/cli.pyr   r      s    MNr   r   c                   t        j                         }|j                  d       |j                  ddd       |j                  dd       |j                  | t	               	      }t
        j                  j                  |j                        rt        |j                        }d
}n|j                  g}d}t        |      D ]  }t        |d      5 }	 t        j                  |j                        \  }}dj%                  |      |j'                         z   }	ddd       |j                   rt!        |	||j(                         	j+                        }
t-        j                  |
|j(                        D ]0  }|
|j.                  |j0                   }t#        t3        |      |       2  y# t        $ r' |j                   rt#        ddd       Y ddd        w xY w# 1 sw Y   xY w)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   clirD      s   $$&F

#
$  
 \:TWY7D	ww}}T]]#%dmm45M 1(D! 	8T'/'?'?'N$* XXj)DIIK7F	8 ==&*&@&@  x0J!**&*&@&@ 1  *%*;*;eooNd<(%0131@ 9  ==.BdC	8 	8 	8 	8s0   G""F/6"G"/#GG"GG""G+	c                  ,    e Zd ZU ded<   ded<   ded<   y)
TokenTupler   typeztuple[int, int]startr   Nr   r   r   r   rF   rF   K   s    
I	r   rF   T)r!   c               (   t        j                  d       t        |      dk(  s|dd dk7  r|dz   }|j                  d      D cg c]  }|dz   	 }}|j	                  d       t        j                  |      }t        j                  |j                        }t        |       	 |D 	cg c]>  }	t        t        j                  |	j                     |	j                  |	j                        @ }
}	|
d   g}t#        |
d
d d
      D ]J  \  }}	|d   }|	}|j                  |j                  cxk(  rdk(  r>n n;|j%                          t        |j                  |j                  |j                        }|d
z   t        |
      k  r|
|d
z      }|j                  dk(  r|j                  dk(  s\|j                  dk(  r|j                  dk(  rz|j                  d   |j                  d   k(  r[|j                  d
   |j                  d
   kD  r<|j	                  t        |j                  |j                  |j                               :|j	                  |       M |j'                  |      }d t)        j                  ||      D        }t+        ||d      D ]D  \  }}||k7  }|s|rt!        d|       t!        d|       |s*t!        d|        t!        ddd	        y t!        ddd	       yc c}w c c}	w # t        j                  $ r t!        ddd	       Y yw xY w)zValidate the source code.ignorer   N   
r   r   Tr      )rH   FSTRING_MIDDLEOPFSTRING_ENDc              3    K   | ]|  }|j                   t        j                  j                  k7  rSt	        |j                   j                         |j                  |j                  f|j                  |j                  f       ~ y wN)
rG   r5   	TokenType
whitespacerF   to_python_token
start_line	start_colend_lineend_col).0rB   s     r   	<genexpr>zvalidate.<locals>.<genexpr>   sk      
  ::++666 	JJ&&(u/^^U]]+	

s   BBr"   )strictEXPECTEDz---- GOTz	Filepath:z[1;31mF[0mz[1;32m.[0m)warningssimplefilterlensplitappendioBytesIOr-   r/   nextrF   tok_namerG   rH   r   
TokenErrorr1   	enumeratepopr4   r5   zip)r	   r@   r>   r   r!   linesourcelinessource_filebuiltin_tokensrB   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,?@D4%<@K@u**V$K&&{';';<N ('
 x((4ekk599M'
# '
 3156O!"=ab"AK '.u$R(
D4DD!&""  !!M 19s677 5UQY?J##'77JOOt<S!&&*::"=8$$Q'=+<+<Q+??$$Q'-*;*;A*>>&&%**%++"(( }-O'.R MM(+M
 &&1F

J %(D$Q 
 y I-w*m,*i(+x(&Bd;
 

Bd3k A'
  "$7s+   K##K- 'AK(*K- (K- -!LLc                    t               }t        j                  | d      D ]N  \  }}}|D ]C  }|j                  d      s|j	                  t        j
                  j                  ||             E P |S )z9Recursively find all Python files in the given directory.F)followlinksz.py)setr'   walkendswithaddr(   r2   )	directorypython_filesroot_r<   r=   s         r   r*   r*      si    5L'')? ;a 	;D}}U#  dD!9:	;; r   rR   )r9   zlist[str] | Nonereturnint)r	   r   r@   bytesr>   r   r   r
   r!   r
   r   None)r   r   r   zIterable[str])__doc__
__future__r   r#   rc   os.pathr'   r-   typingr   r   r^   r5   r   rD   rF   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   