3 \,@sdZdZddlZddlZddlZddlZeeds:eddddgZda da d d Z d d Z Gd dde ZddZGdddZddZddZedkre dS)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. 6NNLz4tokenize.NL doesn't exist -- tokenize module too oldcheckNannyNagprocess_tokenscGs:d}x$|D]}tjj|t|d}q WtjjddS)N  )sysstderrwritestr)argssepargr /usr/lib64/python3.6/tabnanny.pyerrprint#s  rcCsytjtjddd\}}Wn*tjk rH}z t|dSd}~XnXx0|D](\}}|dkrhtda|dkrPtdaqPW|stdtjdddSx|D] }t|qWdS)NZqvz-qz-vzUsage:rz[-v] file_or_directory ...)getoptr argverrorr filename_onlyverboser)Zoptsrmsgoarrrrmain*s  rc@s0eZdZdZddZddZddZdd Zd S) rzk Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). cCs||||_|_|_dS)N)linenorline)selfrrrrrr__init__AszNannyNag.__init__cCs|jS)N)r)r rrr get_linenoCszNannyNag.get_linenocCs|jS)N)r)r rrrget_msgEszNannyNag.get_msgcCs|jS)N)r)r rrrget_lineGszNannyNag.get_lineN)__name__ __module__ __qualname____doc__r!r"r#r$rrrrr<s c %Cs"tjj|rtjj| rtr,td|ftj|}xT|D]L}tjj||}tjj|rhtjj| stjj|dddkrsz#format_witnesses..z at tab sizersrz, )rGr2)wZfirstsprefixrrrformat_witnesses s  rdcCstj}tj}tj}tjtjf}tdg}d}x|D]\}}} } } ||krNd}q2||krd}t|} |dj| s|dj| } dt | }t | d|| |j | q2||krd}|d=q2|o||kr2d}t| } |d j | s2|d j | } dt | }t | d|| q2WdS) Nrrrzindent not greater e.g. zindent not equal e.g. rererere)r4INDENTDEDENTNEWLINECOMMENTrrCr\r]rdrrXrWrZ)tokensrfrgrhZJUNKindentsZ check_equaltypetokenstartendrZthisguyZwitnessrrrrrs6       __main__)r( __version__r,r rr4hasattr ValueError__all__rrrr ExceptionrrrCrdrr%rrrr s(  =7