Ë
    òT•j
-  ã                   óœ   — 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d„ Zedk(  r e	«        yy)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 ]/  }t         j                  j                  |t        |«      z   «       d}Œ1 t         j                  j                  d«       t        j                  d«       y )NÚ ú ú
é   )ÚsysÚstderrÚwriteÚstrÚexit)ÚargsÚsepÚargs      ú/usr/lib/python3.12/tabnanny.pyÚerrprintr       sT   € Ø
€CØò ˆÜ�
‰
×Ñ˜œs 3›x™Ô(Ø‰ðô ‡J�J×Ñ�TÔÜ‡H�HˆQ…Kó    c                  óZ  — dd l } 	 | j                  t        j                  dd  d«      \  }}D ]"  \  }}|dk(  r	t
        dz   a|dk(  sŒt        dz   aŒ$ st	        dt        j                  d   d«       |D ]  }t        |«       Œ y # | j                  $ r}t	        |«       Y d }~Œyd }~ww xY w)Nr   r   Úqvz-qz-vzUsage:z[-v] file_or_directory ...)Úgetoptr   ÚargvÚerrorr   Úfilename_onlyÚverboser   )r   Úoptsr   ÚmsgÚoÚar   s          r   Úmainr"   (   s­   € ÛðØ—]‘]¤3§8¡8¨A¨B <°Ó6‰
ˆˆdð ò "‰ˆˆ1Ø�Š9Ü)¨AÑ-ˆMØ�‹9Ü ‘k‰Gð	"ñ
 Ü�œ3Ÿ8™8 A™;Ð(DÔEØò ˆÜˆc�
ñøð �<‰<ò Ü��‰ûðús   †&B ÂB*ÂB%Â%B*c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)r   zk
    Raised by process_tokens() if detecting an ambiguous indent.
    Captured and handled in check().
    c                 ó0   — |||c| _         | _        | _        y ©N)Úlinenor   Úline)Úselfr&   r   r'   s       r   Ú__init__zNannyNag.__init__?   s   € Ø+1°3¸Ð(ˆŒ�T”X˜t�yr   c                 ó   — | j                   S r%   )r&   ©r(   s    r   Ú
get_linenozNannyNag.get_linenoA   s   € Ø�{‰{Ðr   c                 ó   — | j                   S r%   )r   r+   s    r   Úget_msgzNannyNag.get_msgC   s   € Ø�x‰xˆr   c                 ó   — | j                   S r%   )r'   r+   s    r   Úget_linezNannyNag.get_lineE   s   € Ø�y‰yÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r,   r.   r0   © r   r   r   r   :   s   „ ñò=òòór   r   c                 ó  — t         j                  j                  | «      rßt         j                  j                  | «      sÀt        rt        | ›d�«       t        j                  | «      }|D ]‘  }t         j                  j                  | |«      }t         j                  j                  |«      rt         j                  j                  |«      r&t         j                  j                  |dd «      dk(  sŒ‡t        |«       Œ“ y	 t        j                  | «      }t        dkD  rt        d| z  «       	 t        t        j                  |j                   «      «       	 |j%                  «        t        rt        | ›d�«       yy# t        $ r}t        | ›d|›�«       Y d}~yd}~ww xY w# t        j"                  $ r*}t        | ›d|›�«       Y d}~|j%                  «        yd}~wt&        $ r*}t        | ›d|›�«       Y d}~|j%                  «        yd}~wt(        $ r*}t        | ›d	|›�«       Y d}~|j%                  «        yd}~wt*        $ r¬}|j-                  «       }|j/                  «       }t        r8t        d
| |fz  «       t        d|›�«       t        |j1                  «       «       n4d| v rd| z   dz   } t2        rt        | «       nt        | |t5        |«      «       Y d}~|j%                  «        yd}~ww xY w# |j%                  «        w xY w)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 directoryéýÿÿÿNz.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ÚSyntaxErrorÚIndentationErrorr   r,   r0   r.   r   Úrepr)	ÚfileÚnamesÚnameÚfullnameÚfr   ÚnagÚbadliner'   s	            r   r   r   H   sG  € ô 
‡w�w‡}�}�TÔ¤2§7¡7§>¡>°$Ô#7ÝÜªTÐ3Ô4Ü—
‘
˜4Ó ˆØò 	 ˆDÜ—w‘w—|‘| D¨$Ó/ˆHÜ—‘—‘˜hÔ'Ü—G‘G—N‘N 8Ô,Ü—‘× Ñ   b c Ó+¨uÓ4Ü�h•ð	 ð 	ðÜ�M‰M˜$Óˆô
 �‚{ÜÐ $Ñ&Ô'ðÜ”x×/Ñ/°·
±
Ó;Õ<ð8 	
�‰Œ	åÜªTÐ3Õ4ð øôM ò Üª©cÐ2Ô3Üûðûô ×Ñò Üª$±Ð4Ô5Ûð0 	
�‰�	ûô- ò Üª$±Ð4Ô5Ûð( 	
�‰�	ûô% ò Ü²±cÐ:Ô;Ûð  	
�‰�	ûô ò Ø—.‘.Ó"ˆØ�|‰|‹~ˆÝÜÐ=ÀÀwÀÑOÔPÝ©$Ð0Ô1Ü�#—+‘+“-Õ à�d‰{ 3¨¡:°Ñ#3˜DÝœe D�kÜ˜˜g¤t¨D£zÔ2Ûð 	
�‰�	ûðûð 	
�‰�	úsy   Ä E< Ä-(F" Å<	FÆFÆFÆ"K4Æ5GÇK7 ÇK4Ç&HÇ6K7 ÈK4ÈH<È'K7 È<K4ÉBK/ËK7 Ë/K4Ë4K7 Ë7L	c                   ó@   — e Zd Zd\  ZZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zy	)
Ú
Whitespacez 	c                 ó’  — || _         t        j                  t        j                  }}g }dx}x}}| j                   D ]V  }||k(  r|dz   }|dz   }Œ||k(  r>|dz   }|dz   }|t	        |«      k\  r|dg|t	        |«      z
  dz   z  z   }||   dz   ||<   d}ŒV n || _        || _        t        |«      |f| _        t	        |«      dk  | _	        y )Nr   r   )
ÚrawrS   ÚSÚTÚlenÚnÚntÚtupleÚnormÚ	is_simple)	r(   ÚwsrV   rW   ÚcountÚbrY   rZ   Úchs	            r   r)   zWhitespace.__init__    sá   € ØˆŒÜ�|‰|œZŸ\™\ˆ1ˆØˆØˆˆˆˆA�Ø—(‘(ò 	ˆBØ�QŠwØ˜‘E�Ø˜‘E‘Ø�q’Ø˜‘E�Ø˜!‘V�Øœ˜E›
’?Ø! Q C¨1¬s°5«z©>¸AÑ+=Ñ$>Ñ>�EØ  ™8 a™<��a‘Ø‘áð	ð ˆŒØˆŒÜ˜%“L !�OˆŒ	Ü˜U› q™ˆ�r   c                 óP   — | j                   \  }}t        t        |«      dz
  |«      S ©Nr   )r\   ÚmaxrX   )r(   r_   Útrailings      r   Úlongest_run_of_spacesz Whitespace.longest_run_of_spaces¹   s$   € ØŸ)™)‰ˆˆxÜ”3�u“:˜a‘< Ó*Ð*r   c                 óž   — | j                   \  }}d}t        |t        |«      «      D ]  }|||z  ||   z  z   }Œ |||| j                  z   z  z   S )Nr   )r\   ÚrangerX   rZ   )r(   Útabsizer_   re   ÚilÚis         r   Úindent_levelzWhitespace.indent_level½   s_   € ð Ÿ)™)‰ˆˆxØˆÜ�w¤ E£
Ó+ò 	,ˆAØ�a˜‘j 5¨¡8Ñ+Ñ+‰Bð	,à˜' R¨$¯'©'¡\Ñ2Ñ2Ð2r   c                 ó4   — | j                   |j                   k(  S r%   )r\   )r(   Úothers     r   ÚequalzWhitespace.equalÔ   s   € Ø�y‰y˜EŸJ™JÑ&Ð&r   c                 ó4  — t        | j                  «       |j                  «       «      dz   }g }t        d|dz   «      D ]X  }| j                  |«      |j                  |«      k7  sŒ'|j	                  || j                  |«      |j                  |«      f«       ŒZ |S rc   ©rd   rf   rh   rl   Úappend©r(   rn   rY   r!   Útss        r   Únot_equal_witnesszWhitespace.not_equal_witnessÛ   ó�   € Ü�×*Ñ*Ó,Ø×+Ñ+Ó-ó/Ø12ñ3ˆàˆÜ˜˜1˜Q™3“-ò 	5ˆBØ× Ñ  Ó$¨×(:Ñ(:¸2Ó(>Ó>Ø—‘˜2Ø×,Ñ,¨RÓ0Ø ×-Ñ-¨bÓ1ð3õ 5ð	5ð
 ˆr   c                 ób  — | j                   |j                   k\  ry| j                  r%|j                  r| j                  |j                  k  S t        | j	                  «       |j	                  «       «      dz   }t        d|dz   «      D ]'  }| j                  |«      |j                  |«      k\  sŒ' y y)NFr   é   T)rY   r]   rZ   rd   rf   rh   rl   )r(   rn   rY   rt   s       r   ÚlesszWhitespace.lessó   sŸ   € Ø�6‰6�U—W‘WÒØØ�>Š>˜eŸošoØ—7‘7˜eŸh™hÑ&Ð&Ü�×*Ñ*Ó,Ø×+Ñ+Ó-ó/Ø12ñ3ˆô ˜˜1˜Q™3“-ò 	ˆBØ× Ñ  Ó$¨×(:Ñ(:¸2Ó(>Ó>Ùð	ð r   c                 ó4  — t        | j                  «       |j                  «       «      dz   }g }t        d|dz   «      D ]X  }| j                  |«      |j                  |«      k\  sŒ'|j	                  || j                  |«      |j                  |«      f«       ŒZ |S rc   rq   rs   s        r   Únot_less_witnesszWhitespace.not_less_witness  rv   r   N)r1   r2   r3   rV   rW   r)   rf   rl   ro   ru   ry   r{   r5   r   r   rS   rS   ‰   s.   „ à�D€A€qò*)ò2+ò3ò.'ò	ò0ó"	r   rS   c                 ól   — d„ | D «       }d}t        | «      dkD  r|dz   }|dz   dj                  |«      z   S )Nc              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)r   N)r   )Ú.0Útups     r   ú	<genexpr>z#format_witnesses.<locals>.<genexpr>  s   è ø€ Ò'˜cŒc�#�a‘&�kÑ'ùs   ‚zat tab sizer   Úsr	   z, )rX   r?   )ÚwÚfirstsÚprefixs      r   Úformat_witnessesr…     s=   € Ù' QÔ'€FØ€FÜ
ˆ1ƒv�‚zØ˜#‘ˆØ�C‰<˜$Ÿ)™) FÓ+Ñ+Ð+r   c                 ó”   — 	 t        | «       y # t        $ r0}t        |j                  |j                  |j
                  «      ‚d }~ww xY wr%   )Ú_process_tokensÚTabErrorr   r&   r   Útext)ÚtokensÚes     r   r   r     s:   € ð0Ü˜ÕøÜò 0Ü�q—x‘x §¡¨¯©Ó/Ð/ûð0ús   ‚ Ž	A—+AÁAc                 óŠ  — t         j                  }t         j                  }t         j                  }t         j                  t         j
                  f}t        d«      g}d}| D ]à  \  }}}	}
}||k(  rd}Œ||k(  red}t        |«      }|d   j                  |«      s2|d   j                  |«      }dt        |«      z   }t        |	d   ||«      ‚|j                  |«       Œ{||k(  rd}|d= Œ†|sŒ‰||vsŒŽd}t        |«      }|d   j                  |«      rŒ°|d   j                  |«      }dt        |«      z   }t        |	d   ||«      ‚ y )Nr   r   r   éÿÿÿÿzindent not greater e.g. zindent not equal e.g. )rA   ÚINDENTÚDEDENTÚNEWLINEÚCOMMENTÚNLrS   ry   r{   r…   r   rr   ro   ru   )rŠ   rŽ   r�   r�   ÚJUNKÚindentsÚcheck_equalÚtypeÚtokenÚstartÚendr'   ÚthisguyÚwitnessr   s                  r   r‡   r‡     sQ  € Ü�_‰_€FÜ�_‰_€FÜ×Ñ€GÜ×ÑœXŸ[™[Ð(€DÜ˜"‹~Ð€GØ€Kà+1ò ,4Ñ'ˆˆu�e˜S $Ø�7Š?ð ‰Kà�VŠ^ØˆKÜ  Ó'ˆGØ˜2‘;×#Ñ# GÔ,Ø! "™+×6Ñ6°wÓ?�Ø0Ô3CÀGÓ3LÑL�Ü˜u Q™x¨¨dÓ3Ð3Ø�N‰N˜7Õ#à�VŠ^ð ˆKà˜‘â˜T¨Ò-ð ˆKÜ  Ó&ˆGØ˜2‘;×$Ñ$ WÕ-Ø! "™+×7Ñ7¸Ó@�Ø.Ô1AÀ'Ó1JÑJ�Ü˜u Q™x¨¨dÓ3Ð3ñY,4r   Ú__main__)r4   Ú__version__r9   r   rA   Ú__all__r   r   r   r"   Ú	Exceptionr   r   rS   r…   r   r‡   r1   r5   r   r   ú<module>r       sv   ðñ
ð$ €ã 	Û 
Û â
1€à
€Ø€òòô$ˆyô ò?5÷BDñ DòL,ò0ò44ðn ˆzÒÙ…Fð r   