zfc@sdZdZddlZddlZddlZddlZeedsZedndddgZd a d a d Z d Z de fd YZd ZdddYZdZdZedkre ndS(sThe 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. t6iNtNLs4tokenize.NL doesn't exist -- tokenize module too oldtchecktNannyNagtprocess_tokensicGsKd}x.|D]&}tjj|t|d}q WtjjddS(Ntt s (tsyststderrtwritetstr(targstseptarg((s /usr/lib64/python2.7/tabnanny.pyterrprint#s   cCsy#tjtjdd\}}Wn!tjk rF}t|dSXxF|D]>\}}|dkrstdan|dkrNtdaqNqNW|stdtjdddSx|D]}t|qWdS(Nitqvs-qs-vsUsage:is[-v] file_or_directory ...(tgetoptRtargvterrorRt filename_onlytverboseR(toptsR tmsgtotaR ((s /usr/lib64/python2.7/tabnanny.pytmain*s#     cBs2eZdZdZdZdZdZRS(sk Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). cCs!||||_|_|_dS(N(tlinenoRtline(tselfRRR((s /usr/lib64/python2.7/tabnanny.pyt__init__AscCs|jS(N(R(R((s /usr/lib64/python2.7/tabnanny.pyt get_linenoCscCs|jS(N(R(R((s /usr/lib64/python2.7/tabnanny.pytget_msgEscCs|jS(N(R(R((s /usr/lib64/python2.7/tabnanny.pytget_lineGs(t__name__t __module__t__doc__RRRR (((s /usr/lib64/python2.7/tabnanny.pyR<s    c Cs4tjj|rtjj| rtr:d|fGHntj|}xq|D]i}tjj||}tjj|rtjj| stjj|ddkrPt|qPqPWdSyt |}Wn(t k r}t d||fdSXtdkrd|GHnyt t j|jWnt jk r[}t d||fdStk r}t d ||fdStk r}|j}|j}trd ||fGHd |fGH|jGHn>d |krd |d }ntr|GHn|G|Gt|GHdSXtr0d|fGHndS(s~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. s%r: listing directoryis.pyNs%r: I/O Error: %sischecking %r ...s%r: Token Error: %ss%r: Indentation Error: %ss)%r: *** Line %d: trouble in tab city! ***soffending line: %rRt"s%r: Clean bill of health.(tostpathtisdirtislinkRtlistdirtjointnormcaseRtopentIOErrorRRttokenizetgenerate_tokenstreadlinet TokenErrortIndentationErrorRRR RRtrepr( tfiletnamestnametfullnametfRtnagtbadlineR((s /usr/lib64/python2.7/tabnanny.pyRJsR %       t WhitespacecBsSeZd\ZZdZdZdZdZdZdZ dZ RS(s c Cs||_tjtj}}g}d}}}x|jD]}||krc|d}|d}q:||kr|d}|d}|t|kr|dg|t|d}n||d||tcounttbR@RAtch((s /usr/lib64/python2.7/tabnanny.pyRs(       "   cCs&|j\}}tt|d|S(Ni(RCtmaxR?(RRFttrailing((s /usr/lib64/python2.7/tabnanny.pytlongest_run_of_spacesscCs^|j\}}d}x3t|t|D]}|||||}q+W||||jS(Ni(RCtrangeR?RA(RttabsizeRFRJtilti((s /usr/lib64/python2.7/tabnanny.pyt indent_levels cCs|j|jkS(N(RC(Rtother((s /usr/lib64/python2.7/tabnanny.pytequalscCst|j|jd}g}xdtd|dD]O}|j||j|kr9|j||j||j|fq9q9W|S(Ni(RIRKRLRPtappend(RRQR@Rtts((s /usr/lib64/python2.7/tabnanny.pytnot_equal_witnesss   cCs|j|jkrtS|jr8|jr8|j|jkSt|j|jd}x=td|dD](}|j||j|krktSqkWtS(Nii( R@tFalseRDRARIRKRLRPtTrue(RRQR@RT((s /usr/lib64/python2.7/tabnanny.pytlesss cCst|j|jd}g}xdtd|dD]O}|j||j|kr9|j||j||j|fq9q9W|S(Ni(RIRKRLRPRS(RRQR@RRT((s /usr/lib64/python2.7/tabnanny.pytnot_less_witnesss   ( R!R"R=R>RRKRPRRRURXRY(((s /usr/lib64/python2.7/tabnanny.pyR;s       cCsLtd|}d}t|dkr7|d}n|ddj|S(NcSst|dS(Ni(R (ttup((s /usr/lib64/python2.7/tabnanny.pyt Rs at tab sizeitsRs, (tmapR?R*(twtfirststprefix((s /usr/lib64/python2.7/tabnanny.pytformat_witnesses s  cCstj}tj}tj}tjtjf}tdg}d}xA|D]9\}}} } } ||krsd}qI||krd}t|} |dj| s|dj| } dt | }t | d|| n|j | qI||kr d}|d=qI|rI||krId}t| } |dj | s|dj | } dt | }t | d|| qqIqIWdS(NRiiisindent not greater e.g. sindent not equal e.g. (R.tINDENTtDEDENTtNEWLINEtCOMMENTRR;RXRYRaRRSRRRU(ttokensRbRcRdtJUNKtindentst check_equalttypettokentstarttendRtthisguytwitnessR((s /usr/lib64/python2.7/tabnanny.pyRs6          t__main__((R#t __version__R%RRR.thasattrt ValueErrort__all__RRRRt ExceptionRRR;RaRR!(((s /usr/lib64/python2.7/tabnanny.pyt s&       :  7