
    d#,                         d Z dZddlZddlZddlZg dZdadad Zd Z	 G d de
          Zd	 Z G d
 d          Zd Zd Zedk    r e	             dS dS )a  The 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.
6    N)checkNannyNagprocess_tokensc                      d}| D ]3}t           j                            |t          |          z              d}4t           j                            d           d S )N  
)sysstderrwritestr)argssepargs        /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/tabnanny.pyerrprintr       sY    
C  
s3xx(((JT    c                  x   dd l } 	 |                      t          j        dd          d          \  }}n'# | j        $ r}t	          |           Y d }~d S d }~ww xY w|D ]%\  }}|dk    r
t
          dz   a|dk    r
t          dz   a&|s#t	          dt          j        d         d           d S |D ]}t          |           d S )Nr      qvz-qz-vzUsage:z[-v] file_or_directory ...)getoptr   argverrorr   filename_onlyverboser   )r   optsr   msgoar   s          r   mainr!   '   s    MMM]]38ABB<66
dd<     " "199)A-M99kG 38A;(DEEE  c



 s   +2 
AAAc                   *    e Zd ZdZd Zd Zd Zd ZdS )r   zk
    Raised by process_tokens() if detecting an ambiguous indent.
    Captured and handled in check().
    c                 2    |||c| _         | _        | _        d S N)linenor   line)selfr%   r   r&   s       r   __init__zNannyNag.__init__@   s    +13(TXtyyyr   c                     | j         S r$   )r%   r'   s    r   
get_linenozNannyNag.get_linenoB   s
    {r   c                     | j         S r$   )r   r*   s    r   get_msgzNannyNag.get_msgD   s	    xr   c                     | j         S r$   )r&   r*   s    r   get_linezNannyNag.get_lineF   s
    yr   N)__name__
__module____qualname____doc__r(   r+   r-   r/    r   r   r   r   ;   sZ         = = =        r   r   c                 |   t           j                            |           rt           j                            |           st          rt          | d           t          j        |           }|D ]}t           j                            | |          }t           j                            |          rt           j                            |          r+t           j                            |dd                   dk    rt          |           dS 	 t          j        |           }n,# t          $ r}t          | d|           Y d}~dS d}~ww xY wt          dk    rt          d| z             	 t          t          j        |j                             n_# t          j        $ r3}t          | d|           Y d}~|                                 dS d}~wt&          $ r3}t          | d	|           Y d}~|                                 dS d}~wt(          $ r}|                                }|                                }t          rHt          d
| |fz             t          d|           t          |                                           nAd| v rd| z   dz   } t0          rt          |            nt          | |t3          |                     Y d}~|                                 dS d}~ww xY w	 |                                 n# |                                 w xY wt          rt          | d           dS dS )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: r   zchecking %r ...z: Token Error: z: Indentation Error: z)%r: *** Line %d: trouble in tab city! ***zoffending line: r	   "z: Clean bill of health.)ospathisdirislinkr   printlistdirjoinnormcaser   tokenizeopenOSErrorr   r   generate_tokensreadline
TokenErrorcloseIndentationErrorr   r+   r/   r-   r   repr)	filenamesnamefullnamefr   nagbadliner&   s	            r   r   r   I   sU    
w}}T 
27>>$#7#7 
 	5TTT3444
4   	  	 Dw||D$//Hh''  GNN8,,   bcc++u44hM$   cc2333 {{$&'''x/
;;<<<<   $$$4555( 	
					%    cc:;;;  	
					    ..""||~~ 	3=wOPPPE$$0111#++--    d{{3:#3D 3eDkkkkgtDzz222 	
					 	=0 	
								 5TTT3444445 5sm   D! !
E
+EE
+&F L K/"G6L K/H1L K/B8K*L *K//L Lc                   B    e Zd Zd\  ZZd Zd Zd Zd Zd Z	d Z
d Zd	S )

Whitespacez 	c                    || _         t          j        t          j        }}g }dx}x}}| j         D ]c}||k    r|dz   }|dz   }||k    rJ|dz   }|dz   }|t	          |          k    r|dg|t	          |          z
  dz   z  z   }||         dz   ||<   d}c || _        || _        t          |          |f| _        t	          |          dk    | _	        d S )Nr   r   )
rawrQ   STlennnttuplenorm	is_simple)	r'   wsrT   rU   countbrW   rX   chs	            r   r(   zWhitespace.__init__   s    |Z\1A( 	 	BQwwEEqE!VE

??!QC1s5zz>A+=$>>E 8a<a%LL!O	Uqr   c                 V    | j         \  }}t          t          |          dz
  |          S Nr   )rZ   maxrV   )r'   r]   trailings      r   longest_run_of_spacesz Whitespace.longest_run_of_spaces   s'    )x3u::a<***r   c                     | j         \  }}d}t          |t          |                    D ]}|||z  ||         z  z   }|||| j        z   z  z   S )Nr   )rZ   rangerV   rX   )r'   tabsizer]   rc   ilis         r   indent_levelzWhitespace.indent_level   sb     )xwE

++ 	, 	,Aaj58++BB'R$'\222r   c                 "    | j         |j         k    S r$   )rZ   )r'   others     r   equalzWhitespace.equal   s    yEJ&&r   c                 x   t          |                                 |                                          dz   }g }t          d|dz             D ]l}|                     |          |                    |          k    r>|                    ||                     |          |                    |          f           m|S ra   rb   rd   rf   rj   appendr'   rl   rW   r    tss        r   not_equal_witnesszWhitespace.not_equal_witness       **,,++--/ /1231Q3-- 	5 	5B  $$(:(:2(>(>>>2,,R00 --b113 5 5 5 r   c                 ^   | j         |j         k    rdS | j        r|j        r| j        |j        k    S t          |                                 |                                          dz   }t          d|dz             D ]1}|                     |          |                    |          k    r dS 2dS )NFr      T)rW   r[   rX   rb   rd   rf   rj   )r'   rl   rW   rr   s       r   lesszWhitespace.less   s    6UW5> 	'eo 	'7eh&&**,,++--/ /123 1Q3-- 	 	B  $$(:(:2(>(>>>uu ?tr   c                 x   t          |                                 |                                          dz   }g }t          d|dz             D ]l}|                     |          |                    |          k    r>|                    ||                     |          |                    |          f           m|S ra   ro   rq   s        r   not_less_witnesszWhitespace.not_less_witness  rt   r   N)r0   r1   r2   rT   rU   r(   rd   rj   rm   rs   rw   ry   r4   r   r   rQ   rQ      s        DAq*) ) )2+ + +3 3 3.' ' '	 	 	0  "	 	 	 	 	r   rQ   c                     d | D             }d}t          |           dk    r|dz   }|dz   d                    |          z   S )Nc              3   @   K   | ]}t          |d                    V  dS )r   N)r   ).0tups     r   	<genexpr>z#format_witnesses.<locals>.<genexpr>  s,      ''cc#a&kk''''''r   zat tab sizer   sr	   z, )rV   r>   )wfirstsprefixs      r   format_witnessesr     sM    ''Q'''FF
1vvzz#C<$))F++++r   c                    t           j        }t           j        }t           j        }t           j        t           j        f}t          d          g}d}| D ] \  }}}	}
}||k    rd}||k    rd}t          |          }|d                             |          sD|d                             |          }dt          |          z   }t          |	d         ||          |                    |           ||k    rd}|d= |rt||vrpd}t          |          }|d                             |          sD|d                             |          }dt          |          z   }t          |	d         ||          "d S )Nr   r   r   zindent not greater e.g. zindent not equal e.g. )r@   INDENTDEDENTNEWLINECOMMENTNLrQ   rw   ry   r   r   rp   rm   rs   )tokensr   r   r   JUNKindentscheck_equaltypetokenstartendr&   thisguywitnessr   s                  r   r   r     s   _F_FGX[(D"~~GK+1 ,4 ,4'ueS$7?? KKV^^K ''G2;##G,, 4!"+66w??03CG3L3LLuQxd333NN7####V^^ K 	4T-- K &&G2;$$W-- 4!"+77@@.1A'1J1JJuQxd333Y,4 ,4r   __main__)r3   __version__r8   r   r@   __all__r   r   r   r!   	Exceptionr   r   rQ   r   r   r0   r4   r   r   <module>r      s  
 
$  				 



 
1
1
1
    (    y   ;5 ;5 ;5zD D D D D D D DL, , ,44 44 44n zDFFFFF r   