
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a›,  ã                   @   sœ   d Z dZddlZddlZddlZeedƒs2edƒ‚dddg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r˜eƒ  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Ú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   ú-/opt/alt/python38/lib64/python3.8/tabnanny.pyÚerrprint"   s
    r   c               
   C   s¸   dd l } z|   tjdd … d¡\}}W n2 | jk
rX } zt|ƒ W Y ¢d S d }~X Y nX |D ](\}}|dkrvtd a|dkr^td aq^|s¢tdtjd dƒ d S |D ]}t|ƒ q¦d 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                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )r   zk
    Raised by process_tokens() if detecting an ambiguous indent.
    Captured and handled in check().
    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__Ú__doc__r"   r$   r%   r&   r   r   r   r   r   =   s
   c           	   
   C   sH  t j | ¡rˆt j | ¡sˆt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 n8 tk
rÎ } ztd| |f ƒ W Y ¢dS d}~X Y nX tdkrätd|  ƒ �z>ztt
 |j¡ƒ W �n" t
jk
�r@ } z td| |f ƒ W Y ¢
W � ¢ödS d}~X Y nâ tk
�r| } ztd	| |f ƒ W Y ¢W ¢ºdS d}~X Y n¦ tk
�r  } z†| ¡ }| ¡ }t�rÐtd
| |f ƒ td|f ƒ t| ¡ ƒ n6d| k�ræd|  d } t�röt| ƒ nt| |t|ƒƒ W Y ¢W ¢dS d}~X Y nX W 5 | ¡  X t�rDtd| f ƒ 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%r: listing directoryéýÿÿÿNz.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   Úcloser   Úgenerate_tokensÚreadlineÚ
TokenErrorÚIndentationErrorr   r$   r&   r%   r   Úrepr)	ÚfileÚnamesÚnameÚfullnameÚfr   ZnagÚbadliner    r   r   r   r   K   sX    


ÿþ

  
 
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* q¢q*|| _|| _t|ƒ|f| _t|ƒdk| _	d S )Nr   r   )
ÚrawrD   ÚSÚTÚlenÚnÚntÚtupleÚnormÚ	is_simple)	r!   ZwsrF   rG   ÚcountÚbrI   rJ   Zchr   r   r   r"   Ÿ   s(    

zWhitespace.__init__c                 C   s   | j \}}tt|ƒd |ƒS ©Nr   )rL   ÚmaxrH   )r!   rN   Ú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   )rL   ÚrangerH   rJ   )r!   ÚtabsizerN   rR   ZilÚir   r   r   Úindent_level¼   s
    
zWhitespace.indent_levelc                 C   s   | j |j kS r   )rL   )r!   Úotherr   r   r   ÚequalÓ   s    zWhitespace.equalc                 C   sb   t |  ¡ | ¡ ƒd }g }td|d ƒD ]4}|  |¡| |¡kr(| ||  |¡| |¡f¡ q(|S rP   ©rQ   rS   rT   rW   Úappend©r!   rX   rI   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)rI   rM   rJ   rQ   rS   rT   rW   )r!   rX   rI   r]   r   r   r   Úlessò   s    ÿÿzWhitespace.lessc                 C   sb   t |  ¡ | ¡ ƒd }g }td|d ƒD ]4}|  |¡| |¡kr(| ||  |¡| |¡f¡ q(|S rP   rZ   r\   r   r   r   Únot_less_witness  s    ÿÿþzWhitespace.not_less_witnessN)r'   r(   r)   rF   rG   r"   rS   rW   rY   r^   r`   ra   r   r   r   r   rD   ˆ   s   rD   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>  s     z#format_witnesses.<locals>.<genexpr>zat tab sizer   Úsr   z, )rH   r3   )Ú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r¤d}t|ƒ}|d  |¡s˜|d  |¡}dt	|ƒ }t
|	d ||ƒ‚| |¡ q0||kr¸d}|d= q0|r0||k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. )r5   ÚINDENTÚDEDENTÚNEWLINEÚCOMMENTr   rD   r`   ra   rh   r   r[   rY   r^   )Útokensrj   rk   rl   ZJUNKÚindentsZcheck_equalÚtypeÚtokenÚstartÚendr    ZthisguyZwitnessr   r   r   r   r     s6    

Ú__main__)r*   Ú__version__r-   r
   r5   ÚhasattrÚ
ValueErrorÚ__all__r   r   r   r   Ú	Exceptionr   r   rD   rh   r   r'   r   r   r   r   Ú<module>   s&   

= 7