o
    g_                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZmZmZ G d	d
 d
eZG dd deZdd ZdS )zHCheck source code is ascii only or has an encoding declaration (PEP 263)    N)Optional)nodes)BaseChecker)IRawCheckerITokenChecker)MessagesHandlerMixIn)	OPTION_POPragmaParserErrorparse_pragmac                   @   s8   e Zd ZdZeZdZddiZdZde	j
ddf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. nodereturnNc           
      C   sf   t  }|D ]&\}}}}}||jkr,|rdnd}d| d| d| d}	| jd||	d qt   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   get_by_id_managed_msgsnameadd_messageclear_by_id_managed_msgs)
selfr   managed_msgsmod_namemsgidsymbollinenois_disabledverbtxtr   r   R/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/checkers/misc.pyprocess_module9   s   
z)ByIdManagedMessagesChecker.process_module)__name__
__module____qualname____doc__r   __implements__r   msgsoptionsr   Moduler(   r   r   r   r'   r   *   s    r   c                	       s   e Zd ZdZeefZdZddiZddddd	d
fdddddffZ	 fddZ
dedededee fddZdejddfddZdd Z  ZS )EncodingCheckerzWchecks 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.)r9   r:   r<   c                    sb   t    ddd | jjD }| jjr!d| d| jj d}nd| d}t|tj| _	d S )N|c                 s   s    | ]}t |V  qd S N)reescape).0noter   r   r'   	<genexpr>q   s    z'EncodingChecker.open.<locals>.<genexpr>z#\s*(z)\b)
superopenjoinconfigr4   	notes_rgxr@   compileI_fixme_pattern)r   r4   regex_string	__class__r   r'   rF   n   s   
zEncodingChecker.openr#   r   file_encodingr   c                 C   s   z| |W S  ty   Y d S  tyA   |dr8dt|v r;|t|v r>d| d}| jd||d Y d S Y d S Y d S Y d S w )N   #codingzCannot decode using encoding 'z', bad encodingzsyntax-errorr   )decodeUnicodeDecodeErrorLookupError
startswithstrr   )r   r#   r   rP   msgr   r   r'   _check_encodingy   s(   	zEncodingChecker._check_encodingr   Nc                 C   sb   |j r|j nd}| }t|D ]\}}| |d || qW d   dS 1 s*w   Y  dS )z0inspect the source file to find encoding problemascii   N)rP   stream	enumeraterY   )r   r   encodingr\   r#   r   r   r   r'   r(      s   
"zEncodingChecker.process_modulec           	   	   C   s  | j jsdS dd |D }|D ]z}|jdd  }t|}|rlz1g }zdd t|dD D ]}||j	 q1W n	 t
yD   Y nw t|t| j j@ rQW qW n tyk   | jd|d |jd d	 Y qw | jd
|  }|r| jd|jd d ||jd d qdS )z)inspect the source to find fixme problemsNc                 s   s     | ]}|j tjkr|V  qd S r?   )r9   tokenizeCOMMENT)rB   
token_infor   r   r'   rD      s    z1EncodingChecker.process_tokens.<locals>.<genexpr>r[   c                 s   s    | ]
}|j d kr|V  qdS )r   N)action)rB   p_repr   r   r'   rD      s    
   zbad-inline-optionr   )r   r   #r3   )
col_offsetr   r   )rH   r4   r=   lstripr   searchr
   groupextendmessagesr	   set
ValueErrorr   stripstartrL   lower)	r   tokenscommentscommentcomment_textdisable_option_matchvaluespragma_reprmatchr   r   r'   process_tokens   sR   

	zEncodingChecker.process_tokens)r)   r*   r+   r,   r   r   r-   r   r.   r/   rF   intbytesrW   r   rY   r   r0   r(   ry   __classcell__r   r   rN   r'   r1   D   s@    

r1   c                 C   s    |  t|  |  t|  dS )z-required method to auto register this checkerN)register_checkerr1   r   )linterr   r   r'   register   s   r   )r,   r@   r_   typingr   astroidr   pylint.checkersr   pylint.interfacesr   r   pylint.messager   pylint.utils.pragma_parserr   r	   r
   r   r1   r   r   r   r   r'   <module>   s   |