
    c{                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ erddlmZ  G d	 d
e
          Z G d dee
          ZddZdS )zICheck source code is ascii only or has an encoding declaration (PEP 263).    )annotationsN)TYPE_CHECKING)nodes)BaseRawFileCheckerBaseTokenChecker)ManagedMessage)PyLinterc                  :    e Zd ZdZdZddiZdZddZdd
ZddZ	dS )ByIdManagedMessagesCheckerzIChecks for messages that are enabled or disabled by id instead of symbol.miscellaneousI0023)%suse-symbolic-message-insteadz1Used when a message is enabled or disabled by id. returnNonec                B    | j         j                                         d S N)linter_by_id_managed_msgsclearselfs    4lib/python3.11/site-packages/pylint/checkers/misc.py_clear_by_id_managed_msgsz4ByIdManagedMessagesChecker._clear_by_id_managed_msgs$   s    '--/////    list[ManagedMessage]c                    | j         j        S r   )r   r   r   s    r   _get_by_id_managed_msgsz2ByIdManagedMessagesChecker._get_by_id_managed_msgs'   s    {..r   nodenodes.Modulec                    |                                  }|D ]=\  }}}}}||j        k    r*|rdnd}d| d| d| d}	|                     d||	           >|                                  d	S )
zHInspect the source file to find messages activated or deactivated by id.disableenable'z' is cryptic: use '# pylint: =z	' insteadr   lineargsN)r   nameadd_messager   )
r   r    managed_msgsmod_namemsgidsymbollinenois_disabledverbtxts
             r   process_modulez)ByIdManagedMessagesChecker.process_module*   s    3355<H 	X 	X8HeVV[49$ X$/=yyXV%VVdVVVVVV  !?fSV WWW&&(((((r   Nr   r   )r   r   r    r!   r   r   )
__name__
__module____qualname____doc__r*   msgsoptionsr   r   r4   r   r   r   r   r      sq        SSD 
D G0 0 0 0/ / / /) ) ) ) ) )r   r   c                  l     e Zd ZdZdZddiZddddd	d
fddddddffZd" fdZd#dZd$dZ	d%d!Z
 xZS )&EncodingCheckerz}BaseChecker for encoding issues.

    Checks for:
    * warning notes in the code like FIXME, XXX
    * encoding issues.
    r   W0511)r   fixmez5Used when a warning note as FIXME or XXX is detected.notescsvz<comma separated values>)FIXMEXXXTODOzAList of note tags to take in consideration, separated by a comma.)typemetavardefaulthelpz	notes-rgxstringz<regexp>z9Regular expression of note tags to take in consideration. )rF   rG   rI   rH   r   r   c                L   t                                                       d                    d | j        j        j        D                       }| j        j        j        rd| d| j        j        j         d}nd| d}t          j        |t          j	                  | _
        d S )N|c              3  >   K   | ]}t          j        |          V  d S r   )reescape).0notes     r   	<genexpr>z'EncodingChecker.open.<locals>.<genexpr>c   s*      NNT4NNNNNNr   z#\s*(z)(?=(:|\s|\Z)))superopenjoinr   configrA   	notes_rgxrO   compileI_fixme_pattern)r   rA   regex_string	__class__s      r   rU   zEncodingChecker.open`   s    NNT[5G5MNNNNN;' 	:XEXXDK,>,HXXXLL9E999L jrt<<r   r0   intr(   bytesfile_encodingstr
str | Nonec                   	 |                     |          S # t          $ r Y ndt          $ rX |                    d          r@dt	          |          v r/|t	          |          v rd| d}|                     d||           Y nw xY wd S )N   #codingzCannot decode using encoding 'z', bad encodingzsyntax-errorr'   )decodeUnicodeDecodeErrorLookupError
startswithra   r+   )r   r0   r(   r`   msgs        r   _check_encodingzEncodingChecker._check_encodingk   s    	H;;}---! 	 	 	D 	H 	H 	H%%HD		)H "SYY.H
 V}UUU  f3 GGG	H ts    
BABBr    r!   c                    |j         r|j         nd}|                                5 }t          |          D ]\  }}|                     |dz   ||            	 ddd           dS # 1 swxY w Y   dS )z1Inspect the source file to find encoding problem.ascii   N)r`   stream	enumeraterk   )r   r    encodingro   r0   r(   s         r   r4   zEncodingChecker.process_module|   s    )-);H4%%[[]] 	Af )& 1 1 A A$$VaZx@@@@A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   0A##A'*A'tokenslist[tokenize.TokenInfo]c                f   | j         j        j        sdS |D ]}|j        t          j        k    r|j        dd                                         }| j        	                    d|
                                z             r2|                     d|j        d         dz   ||j        d                    dS )z*Inspect the source to find fixme problems.Nrn   #r@   r   )
col_offsetr)   r(   )r   rW   rA   rF   tokenizeCOMMENTrJ   lstripr[   searchlowerr+   start)r   rr   
token_infocomment_texts       r   process_tokenszEncodingChecker.process_tokens   s    {!' 	F  
	 
	J("22 %,QRR07799L"))#0B0B0D0D*DEE   )/2Q6%#)!,	 !   
	 
	r   r5   )r0   r^   r(   r_   r`   ra   r   rb   r6   )rr   rs   r   r   )r7   r8   r9   r:   r*   r;   r<   rU   rk   r4   r   __classcell__)r]   s   @r   r>   r>   5   s          D 
D 53, 	
  %S	 	
G0	= 	= 	= 	= 	= 	=   "A A A A       r   r>   r   r	   r   r   c                    |                      t          |                      |                      t          |                      d S r   )register_checkerr>   r   )r   s    r   registerr      sA    
OF33444
6v>>?????r   )r   r	   r   r   )r:   
__future__r   rO   rw   typingr   astroidr   pylint.checkersr   r   pylint.typingr   pylint.lintr	   r   r>   r   r   r   r   <module>r      s   
 P O " " " " " " 				                    @ @ @ @ @ @ @ @ ( ( ( ( ( ( %$$$$$$) ) ) ) )!3 ) ) )>] ] ] ] ]&(: ] ] ]@@ @ @ @ @ @r   