K idZddlmZddlZddlZddlZddlZddlm Z m Z ddl Z ddl Z GddZ dddZGdd e Zd d  dd Zdd Zy)zCLI interface for pytokens.) annotationsN)Iterable NamedTuplec,eZdZUded<ded<ded<y)CLIArgsstrfilepathboolvalidateissue_128233_handlingN__name__ __module__ __qualname____annotations__R/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pytokens/cli.pyrrsMNrrctj}|jd|jddd|jdd|j|t }t j j|jrt|j}d }n|jg}d }t|D]}t|d 5} tj|j\}}dj%||j'z} ddd|j rt!| ||j( j+} t-j| |j(D]0} | | j.| j0} t#t3| | 2y#t$r'|j rt#d dd YdddwxYw#1swYxYw)zCLI interface.r z--no-128233-handlingr store_false)destactionz --validate store_true)r) namespaceFTrb SendflushNr)verboser r r)argparseArgumentParser add_argument parse_argsrospathisdirr find_all_python_filessortedopentokenizedetect_encodingreadline SyntaxErrorr printjoinreadr decodepytokens start_index end_indexrepr) argvparserargsfilesr!r fileencoding read_bytessource source_strtoken token_sources rclirDs  $ $ &F  #  $   \:   TWY  7D ww}}T]]#%dmm45M1 (D ! 8T '/'?'? 'N$*XXj)DIIK7F 8 == &*&@&@   x0J!**&*&@&@ 1 *%*;*;eooN d<(%0  131@ 9 ==.BdC 8 8   8 8s0G""F/6"G"/#GG"GG""G+ c,eZdZUded<ded<ded<y) TokenTuplertypeztuple[int, int]startrNr rrrrFrFKs I  rrFT)r!c(tjdt|dk(s|dddk7r|dz}|jdDcgc]}|dz }}|j dt j |}tj|j}t| |D cgc]>} ttj| j| j| j@} } | dg} t#| d dd D]J\} } | d} | }|j| jcxk(rd k(r>nn;| j%t|j| j|j}| d zt| kr| | d z}|jd k(r|jd k(s\|jd k(r|jdk(rz|jd|jdk(r[|jd |jd kDr<| j t|j|j|j:| j |M|j'|}dt)j||D}t+| |dD]D\}}||k7}|s|rt!d|t!d||s*t!d|t!ddd yt!ddd ycc}wcc} w#tj$rt!ddd YywxYw)zValidate the source code.ignorerN rrTr)rHFSTRING_MIDDLEOP FSTRING_ENDc3 K|]|}|jtjjk7rSt |jj |j |jf|j|jf~ywN) rGr5 TokenType whitespacerFto_python_token start_line start_colend_lineend_col).0rBs r zvalidate..sk   ::++66 6  JJ & & (   u / ^^U]] +  sBBr")strictEXPECTEDz---- GOTz Filepath:z Fz .)warnings simplefilterlensplitappendioBytesIOr-r/nextrFtok_namerGrHr TokenErrorr1 enumeratepopr4r5zip)r r@r>r r!line sourcelines source_filebuiltin_tokensrBexpected_tokens_unprocessedexpected_tokensindex last_token current_token next_token source_string our_tokens builtin_token our_tokenmismatchs rr r Qs (# 6{a6"#;%/%-3LL,?@D4%<@K@u**V$K&&{';';>&&%**%++"((}-O'.RMM(+M  && 1F J%(D$Q  y I- w *m , *i (  +x ( &Bd ;   Bd3kA'     "$7s+ K##K-'AK(*K-(K--!LLct}tj|dD]N\}}}|D]C}|jds|j tj j ||EP|S)z9Recursively find all Python files in the given directory.F) followlinksz.py)setr'walkendswithaddr(r2) directory python_filesroot_r<r=s rr*r*si5L'')?;a ;D}}U#  dD!9: ;; rrR)r9zlist[str] | Nonereturnint) r rr@bytesr>rr r r!r rNone)rrrz Iterable[str])__doc__ __future__rr#rcos.pathr'r-typingrrr^r5rrDrFr r*rrrrs!" '  3 l e4e4 e4e4  e4  e4 e4Pr