
    yIf                        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                  F    e Zd ZdZdZddddddif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.default_enabledF returnNonec                B    | j         j                                         d S N)linter_by_id_managed_msgsclearselfs    H/var/www/piapp/venv/lib/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$$$/=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    r5   r   r   r   r   r      s        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. )rG   rH   rJ   rI   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>b   s*      NNT4NNNNNNr   z#\s*(z)(?=(:|\s|\Z)))superopenjoinr   configrB   	notes_rgxrP   compileI_fixme_pattern)r   rB   regex_string	__class__s      r   rV   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   r1   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
startswithrb   r,   )r   r1   r)   ra   msgs        r   _check_encodingzEncodingChecker._check_encodingj   s    	H;;}---! 	 	 	D 	H 	H 	H%%HD		))!SYY..U}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)ra   stream	enumeraterl   )r   r!   encodingrp   r1   r)   s         r   r5   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.Nro   #rA   r   )
col_offsetr*   r)   )r   rX   rB   rG   tokenizeCOMMENTrK   lstripr\   searchlowerr,   start)r   rs   
token_infocomment_texts       r   process_tokenszEncodingChecker.process_tokens   s    {!' 	F  
	 
	J("222%,QRR07799L"))#0B0B0D0D*DEE   )/2Q6%#)!,	 !   
	 
	r   r6   )r1   r_   r)   r`   ra   rb   r   rc   r7   )rs   rt   r   r   )r8   r9   r:   r;   r+   r<   r=   rV   rl   r5   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   rP   rx   typingr   astroidr   pylint.checkersr   r   pylint.typingr   pylint.lintr	   r   r?   r   r   r   r   <module>r      s   
 P O " " " " " " 				                    @ @ @ @ @ @ @ @ ( ( ( ( ( ( %$$$$$$) ) ) ) )!3 ) ) )>\ \ \ \ \&(: \ \ \~@ @ @ @ @ @r   