\d#,dZdZddlZddlZddlZgdZdadadZdZ Gdde Z d Z Gd d Z d Zd Zedkr e dSdS)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_tokenscd}|D]3}tj|t|zd}4tjddS)N  )sysstderrwritestr)argssepargs ..\python\lib\tabnanny.pyerrprintr sY C s3xx(((JTcxddl} |tjddd\}}n'#|j$r}t |Yd}~dSd}~wwxYw|D]%\}}|dkr t dza|dkr t dza&|s#t dtjdddS|D]}t|dS)Nrqvz-qz-vzUsage:z[-v] file_or_directory ...)getoptr argverrorr filename_onlyverboser)roptsrmsgoars rmainr!'sMMM]]38ABB<66 dd < ""1 99)A-M 99kG 38A;(DEEE c s+2 AAAc*eZdZdZdZdZdZdZdS)rzk Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). c2|||c|_|_|_dSN)linenorline)selfr%rr&s r__init__zNannyNag.__init__@s+13( TXtyyyrc|jSr$)r%r's r get_linenozNannyNag.get_linenoBs {rc|jSr$)rr*s rget_msgzNannyNag.get_msgDs xrc|jSr$)r&r*s rget_linezNannyNag.get_lineFs yrN)__name__ __module__ __qualname____doc__r(r+r-r/rrrr;sZ===rrc|tj|rtj|strt |dtj|}|D]}tj||}tj|rtj|r+tj|dddkrt|dS tj |}n,#t$r}t|d|Yd}~dSd}~wwxYwtdkrt d|z ttj|jn_#tj$r3}t|d|Yd}~|dSd}~wt&$r3}t|d |Yd}~|dSd}~wt($r}|}|}trHt d ||fzt d |t |nAd |vrd |zd z}t0rt |nt ||t3|Yd}~|dSd}~wwxYw |n#|wxYwtrt |ddSdS)a~check(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: rzchecking %r ...z: Token Error: z: Indentation Error: z)%r: *** Line %d: trouble in tab city! ***zoffending line: r "z: Clean bill of health.)ospathisdirislinkrprintlistdirjoinnormcasertokenizeopenOSErrorrrgenerate_tokensreadline TokenErrorcloseIndentationErrorrr+r/r-rrepr) filenamesnamefullnamefrnagbadliner&s rrrIsU w}}T 27>>$#7#7   5 TTT3 4 4 4 4    Dw||D$//H h'' GNN8,,   bcc++u44h M$   cc2333{{ $&'''x/ ;;<<<<  $$$4555(  % cc:;;;      ..""||~~  3 =wO P P P E$$0 1 1 1 #++-- d{{3:#3D 3eDkkkkgtDzz222    =0   5 TTT34444455sm D!! E +EE +&FLK/"G6L K/H 1L K/B8K*L*K//LLcBeZdZd\ZZdZdZdZdZdZ dZ dZ d S) Whitespacez c||_tjtj}}g}dx}x}}|jD]c}||kr |dz}|dz}||krJ|dz}|dz}|t |kr|dg|t |z dzzz}||dz||<d}c||_||_t||f|_t |dk|_ dS)Nrr) rawrQSTlennnttuplenorm is_simple) r'wsrTrUcountbrWrXchs rr(zWhitespace.__init__s|Z\1A(  BQwwEEqE!VE ??!QC1s5zz>A+=$>>E 8a<a%LL!O UqrcV|j\}}tt|dz |SNr)rZmaxrV)r'r]trailings rlongest_run_of_spacesz Whitespace.longest_run_of_spacess')x3u::a<***rc|j\}}d}t|t|D]}|||z||zz}||||jzzzS)Nr)rZrangerVrX)r'tabsizer]rcilis r indent_levelzWhitespace.indent_levelsb)x wE ++ , ,Aaj58++BB'R$'\222rc"|j|jkSr$)rZ)r'others requalzWhitespace.equalsyEJ&&rcxt||dz}g}td|dzD]l}||||kr>||||||fm|Srarbrdrfrjappendr'rlrWr tss rnot_equal_witnesszWhitespace.not_equal_witness **,,++-- / /12 3 1Q3-- 5 5B  $$(:(:2(>(>>>2,,R00 --b113555rc^|j|jkrdS|jr|jr|j|jkSt||dz}t d|dzD]1}||||krdS2dS)NFrT)rWr[rXrbrdrfrj)r'rlrWrrs rlesszWhitespace.lesss 6UW  5 > 'eo '7eh& & **,,++-- / /12 31Q3--  B  $$(:(:2(>(>>>uu?trcxt||dz}g}td|dzD]l}||||kr>||||||fm|Srarorqs rnot_less_witnesszWhitespace.not_less_witnessrtrN) r0r1r2rTrUr(rdrjrmrsrwryr4rrrQrQs DAq*)))2+++333.'''   0   "     rrQcd|D}d}t|dkr|dz}|dzd|zS)Nc3@K|]}t|dVdS)rN)r).0tups r z#format_witnesses.. s, ' 'cc#a&kk ' ' ' ' ' 'rz at tab sizersr z, )rVr>)wfirstsprefixs rformat_witnessesr sM ' 'Q ' ' 'F F 1vvzz# C<$))F++ ++rctj}tj}tj}tjtjf}t dg}d}|D] \}}} } } ||krd}||krd}t |} |d| sD|d| } dt| z}t| d|| | | ||krd}|d=|rt||vrpd}t | } |d | sD|d | } dt| z}t| d|| "dS)Nrrrzindent not greater e.g. zindent not equal e.g. )r@INDENTDEDENTNEWLINECOMMENTNLrQrwryrrrprmrs)tokensrrrJUNKindents check_equaltypetokenstartendr&thisguywitnessrs rrrs _F _FG  X[ (D"~~GK+1,4,4'ueS$ 7?? KK V^^K ''G2;##G,, 4!"+66w??03CG3L3LLuQxd333 NN7 # # # # V^^K  4T--K &&G2;$$W-- 4!"+77@@.1A'1J1JJuQxd333Y,4,4r__main__)r3 __version__r8r r@__all__rrrr! ExceptionrrrQrrr0r4rrrs  $  1 1 1  (     y   ;5;5;5zDDDDDDDDL,,,444444n zDFFFFFr