a
    ze,                     @   s   d Z ddlZddlZddlZeeds.edg dZdadadd Z	dd	 Z
G d
d deZdd ZG dd dZdd Zdd Zedkre
  dS )6    NNLz4tokenize.NL doesn't exist -- tokenize module too old)checkNannyNagprocess_tokensc                  G   s6   d}| D ]}t j|t|  d}qt jd d S )N  
)sysstderrwritestr)argsseparg r   /usr/lib/python3.9/tabnanny.pyerrprint"   s
    r   c               
   C   s   dd l } z|  tjdd  d\}}W n0 | jyV } zt| W Y d }~d S d }~0 0 |D ](\}}|dkrttd a|dkr\td aq\|stdtjd d d S |D ]}t| qd S )Nr      Zqvz-qz-vzUsage:z[-v] file_or_directory ...)getoptr
   argverrorr   filename_onlyverboser   )r   Zoptsr   msgoar   r   r   r   main)   s     
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s   |||  | _ | _| _d S N)linenor   line)selfr   r   r    r   r   r   __init__B   s    zNannyNag.__init__c                 C   s   | j S r   )r   r!   r   r   r   
get_linenoD   s    zNannyNag.get_linenoc                 C   s   | j S r   )r   r#   r   r   r   get_msgF   s    zNannyNag.get_msgc                 C   s   | j S r   )r    r#   r   r   r   get_lineH   s    zNannyNag.get_lineN)__name__
__module____qualname__r"   r$   r%   r&   r   r   r   r   r   =   s   r   c           	   
   C   sX  t j| rt j| str*td| f  t | }|D ]J}t j| |}t j|rbt j|rzt j|dd  dkr8t	| q8d S zt
| }W n6 ty } ztd| |f  W Y d }~d S d }~0 0 tdkrtd|   zPztt
|j W n, t
jy@ } z(td| |f  W Y d }~W |  d S d }~0  ty } z(td| |f  W Y d }~W |  d S d }~0  ty( } z| }| }trtd	| |f  td
|f  t|  n6d| v rd|  d } trt|  nt| |t| W Y d }~W |  d S d }~0 0 W |  n
|  0 trTtd| f  d S )Nz%r: listing directoryz.pyz%r: I/O Error: %sr   zchecking %r ...z%r: Token Error: %sz%r: Indentation Error: %sz)%r: *** Line %d: trouble in tab city! ***zoffending line: %rr   "z%r: 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   ZnagZbadliner    r   r   r   r   K   s`    



r   c                   @   sL   e Zd Zd\ZZdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )
Whitespacez 	c           	      C   s   || _ tjtj }}g }d } }}| j D ]v}||krH|d }|d }q*||kr|d }|d }|t|kr|dg|t| d   }|| d ||< d}q* qq*|| _|| _t||f| _t|dk| _	d S )Nr   r   )
rawrB   STlennnttuplenorm	is_simple)	r!   wsrD   rE   countbrG   rH   Zchr   r   r   r"      s(    

zWhitespace.__init__c                 C   s   | j \}}tt|d |S Nr   )rJ   maxrF   )r!   rM   trailingr   r   r   longest_run_of_spaces   s    
z Whitespace.longest_run_of_spacesc                 C   sH   | j \}}d}t|t|D ]}||| ||   }q|||| j   S )Nr   )rJ   rangerF   rH   )r!   tabsizerM   rQ   Zilir   r   r   indent_level   s
    
zWhitespace.indent_levelc                 C   s   | j |j kS r   )rJ   )r!   otherr   r   r   equal   s    zWhitespace.equalc                 C   sb   t |  | d }g }td|d D ]4}| |||kr(||| |||f q(|S rO   rP   rR   rS   rV   appendr!   rW   rG   r   tsr   r   r   not_equal_witness   s    zWhitespace.not_equal_witnessc                 C   sp   | j |j krdS | jr(|jr(| j|jkS t|  | d }td|d D ]}| |||krL dS qLdS )NFr      T)rG   rK   rH   rP   rR   rS   rV   )r!   rW   rG   r\   r   r   r   less   s    zWhitespace.lessc                 C   sb   t |  | d }g }td|d D ]4}| |||kr(||| |||f q(|S rO   rY   r[   r   r   r   not_less_witness  s    zWhitespace.not_less_witnessN)r'   r(   r)   rD   rE   r"   rR   rV   rX   r]   r_   r`   r   r   r   r   rB      s   rB   c                 C   s8   dd | D }d}t | dkr&|d }|d d| S )Nc                 s   s   | ]}t |d  V  qdS )r   N)r   ).0tupr   r   r   	<genexpr>      z#format_witnesses.<locals>.<genexpr>zat tab sizer   sr   z, )rF   r2   )wZfirstsprefixr   r   r   format_witnesses  s
    rh   c                 C   s  t j}t j}t j}t jt jf}tdg}d}| D ]\}}}	}
}||krLd}q0||krd}t|}|d |s|d |}dt	| }t
|	d |||| q0||krd}|d= q0|r0||vr0d}t|}|d |s0|d |}dt	| }t
|	d ||q0d S )Nr   r   r   zindent not greater e.g. zindent not equal e.g. )r4   INDENTDEDENTNEWLINECOMMENTr   rB   r_   r`   rh   r   rZ   rX   r]   )tokensrj   rk   rl   ZJUNKindentsZcheck_equaltypetokenstartendr    ZthisguyZwitnessr   r   r   r   r     s6    

r   __main__)__version__r,   r
   r4   hasattr
ValueError__all__r   r   r   r   	Exceptionr   r   rB   rh   r   r'   r   r   r   r   <module>   s$   
= 7