e -SrSrSSKrSSKrSSKr/SQrSqSqSrSr "SS\ 5r S r "S S 5r S rS rSr\S:Xa\ "5 gg)aThe Tab Nanny despises ambiguous indentation. She knows no mercy. tabnanny -- Detection of ambiguous indentation For the time being this module is intended to be called as a script. However it is possible to import it into an IDE and use the function check() described below. Warning: The API provided by this module is likely to change in future releases; such changes may not be backward compatible. 6N)checkNannyNagprocess_tokenscSnUH0n[RRU[U5-5 SnM2 [RRS5 [R"S5 g)N  )sysstderrwritestrexit)argssepargs ./opt/imh/python3.13/lib/python3.13/tabnanny.pyerrprintr sO C s3x(JJTHHQKcpSSKnUR[RSSS5upWH%upEUS:Xa [ S-qUS:XdM[ S-qM' W(d[ S[RSS5 UHn[U5 M g!URan[ U5 SnANSnAff=f)Nrr qvz-qz-vzUsage:z[-v] file_or_directory ...)getoptr argverrorr filename_onlyverboser)roptsrmsgoars rmainr"(s]]388AB<6  9)A-M 9kG  388A;(DE c  << s%BB5 B00B5c0\rSrSrSrSrSrSrSrSr g) r:z_ Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). c.XUsUlUlUlgN)linenorline)selfr'rr(s r__init__NannyNag.__init__?s+1( TXtyrcUR$r&)r'r)s r get_linenoNannyNag.get_linenoAs {{rcUR$r&)rr-s rget_msgNannyNag.get_msgCs xxrcUR$r&)r(r-s rget_lineNannyNag.get_lineEs yyr)r(r'rN) __name__ __module__ __qualname____firstlineno____doc__r*r.r1r4__static_attributes__rrrr:s=rrc[RRU5(a[RRU5(d[(a[ U<S35 [R "U5nUHn[RRX5n[RRU5(a$[RRU5(a([RRUSS5S:XdM[U5 M g[R"U5n[S:a[ SU-5 [[R"UR 55 UR%5 [(a[ U<S35 gg![an[U<SU<35 SnAgSnAff=f![R"a,n[U<SU<35 SnAUR%5 gSnAf[&a,n[U<S U<35 SnAUR%5 gSnAf[(a,n[U<S U<35 SnAUR%5 gSnAf[*anUR-5nUR/5n[(a8[ S X4-5 [ S U<35 [ UR155 O:S U;aSU-S-n[2(a [ U5 O[ X[5U55 SnAUR%5 gSnAff=f!UR%5 f=f)afcheck(file_or_dir) If file_or_dir is a directory and not a symbolic link, then recursively descend the directory tree named by file_or_dir, checking all .py files along the way. If file_or_dir is an ordinary Python source file, it is checked for whitespace related problems. The diagnostic messages are written to standard output using the print statement. z: listing directoryNz.pyz : I/O Error: r zchecking %r ...z: Token Error: z: Indentation Error: z: Syntax Error: z)%r: *** Line %d: trouble in tab city! ***zoffending line: r "z: Clean bill of health.)ospathisdirislinkrprintlistdirjoinnormcasertokenizeopenOSErrorrrgenerate_tokensreadline TokenErrorcloseIndentationError SyntaxErrorrr.r4r1rrepr) filenamesnamefullnamefrnagbadliner(s rrrHsP ww}}T277>>$#7#7 7 T3 4 4 Dww||D/H h''GGNN8,,  bc+u4h   MM$  { $&'x// ;<8  w T34M c23   $450  - c:;(  % 456    .."||~ 7 =O P $0 1 #++- d{3:#3D}eDktDz2     syF# )G # G -GG  L3 H2L6 L3H;&L6; L3I/L6/ L3US-nUS-nU[ U5:aUS/U[ U5- S---nXES-XE'SnMW O X`lXpl[U5U4Ul[ U5S:*Ul g)Nrr ) rawrZSTlennnttuplenorm is_simple) r)wsr^r_countbrarbchs rr*Whitespace.__init__s||Z\\1A((BwEEE!VE ?!QC1s5z>A+=$>>E 8a<%L!O UqrcNURup[[U5S- U5$Nr )rdmaxr`)r)rgtrailings rlongest_run_of_spaces Whitespace.longest_run_of_spacess"))3u:a<**rcURup#Sn[U[U55HnXEU-X%--nM X1X@R---$)Nr)rdranger`rb)r)tabsizergrnilis r indent_levelWhitespace.indent_levelsP)) wE +Aj58++B,R''\222rc4URUR:H$r&)rd)r)others requalWhitespace.equalsyyEJJ&&rc<[UR5UR55S-n/n[SUS-5H[nURU5URU5:wdM)UR UURU5URU545 M] U$rlrmrorrrvappendr)ryrar!tss rnot_equal_witnessWhitespace.not_equal_witness **,++- /12 3 1Q3-B  $(:(:2(>>2,,R0 --b135 rc~URUR:agUR(a*UR(aURUR:*$[UR 5UR 55S-n[ SUS-5H)nUR U5UR U5:dM) g g)NFr T)rarerbrmrorrrv)r)ryrars rlessWhitespace.lesss 66UWW  >>eoo77ehh& & **,++- /12 31Q3-B  $(:(:2(>> rc<[UR5UR55S-n/n[SUS-5H[nURU5URU5:dM)UR UURU5URU545 M] U$rlr}rs rnot_less_witnessWhitespace.not_less_witnessrr)rerardrbr]N)r6r7r8r9r^r_r*rorvrzrrrr;r<rrrZrZs. DAq*)2+3.' 0 " rrZcnSU5nSn[U5S:aUS-nUS-SRU5-$)Nc3># UHn[US5v M g7f)rN)r).0tups r #format_witnesses..s 'Qcc#a&kkQsz at tab sizer sr z, )r`rF)wfirstsprefixs rformat_witnessesrs= 'Q 'F F 1vz# C<$))F+ ++rc[U5 g![a0n[URURUR 5eSnAff=fr&)_process_tokensTabErrorrr'rtext)tokenses rrrs:0 0qxx//0s  A+AAc[Rn[Rn[Rn[R[R 4n[ S5/nSnUHupxpn Xs:XaSnMXq:XajSn[ U5n USRU 5(d1USRU 5n S[U 5-n[U SX5eURU 5 MXr:XaSnUS MU(dMXt;dMSn[ U 5n USRU 5(aMUSRU 5n S[U 5-n[U SX5e g)Nrrr zindent not greater e.g. zindent not equal e.g. )rHINDENTDEDENTNEWLINECOMMENTNLrZrrrrr~rzr)rrrrJUNKindents check_equaltypetokenstartendr(thisguywitnessrs rrrsD __F __FG   X[[ (D"~GK+1'e$ ? K ^K 'G2;##G,,!"+66w?03CG3LLuQx33 NN7 # ^K [T-K &G2;$$W--!"+77@.1A'1JJuQx33Y,2r__main__)r: __version__r@r rH__all__rrrr" ExceptionrrrZrrrr6r<rrrsv $  1  $ y ?5BDDL,0 44n zFr