o
    g=                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZ G d	d
 d
ZdS )    N)TextIOWrapper)ListTextIOTupleUnion)	_SCOPE_EXEMPTMAIN_CHECKER_NAMEMSG_STATE_CONFIDENCEMSG_STATE_SCOPE_CONFIGMSG_STATE_SCOPE_MODULE	MSG_TYPESMSG_TYPES_LONGMSG_TYPES_STATUSWarningScope)InvalidMessageErrorNoLineSuppliedErrorUnknownMessageError)	UNDEFINED)Message)get_module_and_frameidget_rst_sectionget_rst_titlec                	   @   s@  e Zd ZU dZg Zeeeeeee	f  e
d< dd Zdd Zedd Zed	d
 Zd8defddZd9ddZ			d9dededee	ef de	fddZd9ddZ	d9ddZdd Zd d! Zdefd"d#Zd:d$d%Zd&d' Z	d;d(d)Zed*d+ Zd,d- Zd.d/ Z d0d1 Z!e"j#fd2e$d3dfd4d5Z%ed2e&d3dfd6d7Z'dS )<MessagesHandlerMixInzSA mix-in class containing all the messages related methods for the main lint class.)_MessagesHandlerMixIn__by_id_managed_msgsc                 C   s   i | _ d| _d S )Nr   )_msgs_state
msg_statusself r   c/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/message/message_handler_mix_in.py__init__"   s   
zMessagesHandlerMixIn.__init__c                 c   s&    | j |  D ]}|jE d H  qd S N)	_checkerslowermsgs)r   checkerknown_checkerr   r   r   _checker_messages&   s   z&MessagesHandlerMixIn._checker_messagesc                 C   s   | j   d S r!   )r   clearclsr   r   r   clear_by_id_managed_msgs*   s   z-MessagesHandlerMixIn.clear_by_id_managed_msgsc                 C   s   | j S r!   )r   r)   r   r   r   get_by_id_managed_msgs.   s   z+MessagesHandlerMixIn.get_by_id_managed_msgsTmsgid_or_symbolc                 C   s^   |dd   r-z
| jjj|d}W n
 ty   Y dS w | j||||f}tj| dS dS )zuIf the msgid is a numeric one, then register it to inform the user
        it could furnish instead a symbolic msgid.   Nmsgid)	isdigit
msgs_storemessage_id_store
get_symbolr   current_namer   r   append)r   r-   lineis_disabledsymbolmanagedr   r   r   _register_by_id_managed_msg2   s   z0MessagesHandlerMixIn._register_by_id_managed_msgpackageNFc                 C   s$   | j |d|||d | || d S )NFenablescoper7   ignore_unknown_set_msg_statusr;   r   r0   r?   r7   r@   r   r   r   disable=   s   
zMessagesHandlerMixIn.disabler0   r?   r7   r@   c                 C   s4   |st | j|d||d |d | ||d  d S )NFr.   r=   )r   rB   r;   rC   r   r   r   disable_nextC   s   z!MessagesHandlerMixIn.disable_nextc                 C   s(   | j |d|||d | j||dd d S )NTr=   F)r8   rA   rC   r   r   r   r>   U   s   
zMessagesHandlerMixIn.enablec                 C   s8  |dv sJ |dkrt D ]}| ||||| qd S | }|t vr't|}|d ur?| jj|D ]
}| |||| q2d S | | jv r`| j|  D ]}|j	D ]
}| |||| qRqMd S | 
drw|rp| | d S | | d S z| j|}	W n ty   |rY d S  w |	D ]
}
| ||
|| qd S )N)r<   moduleallrp)r   rB   upperr   getr2   _msgs_by_categoryr#   r"   r$   
startswithenable_reportdisable_reportget_message_definitionsr   _set_one_msg_status)r   r0   r>   r?   r7   r@   _msgidcategory_idr%   message_definitionsmessage_definitionr   r   r   rB   [   sD   



z$MessagesHandlerMixIn._set_msg_statusc                    s   |dkr% j ||| |s!|jdkr# jd||j|jfd d S d S d S  j}|||j<  fddt| D  j_	 fddt| D  j_
d S )NrF   zlocally-disabled)r7   argsc                    s   g | ]\}}|r  |qS r   _message_symbol.0midvalr   r   r   
<listcomp>   s
    z<MessagesHandlerMixIn._set_one_msg_status.<locals>.<listcomp>c                    s   g | ]\}}|s  |qS r   rV   rX   r   r   r   r\      s    )
file_stateset_msg_statusr9   add_messager0   r   sorteditemsconfigr>   rD   )r   r?   msgr7   r>   r$   r   r   r   rP      s   






z(MessagesHandlerMixIn._set_one_msg_statusc                 C   s0   zdd | j |D W S  ty   | Y S w )zGet the message symbol of the given message id

        Return the original message id if the message does not
        exist.
        c                 S      g | ]}|j qS r   )r9   rY   mdr   r   r   r\          z8MessagesHandlerMixIn._message_symbol.<locals>.<listcomp>)r2   rO   r   )r   r0   r   r   r   rW      s
   z$MessagesHandlerMixIn._message_symbolc              	   C   sR   | j jr|j| j jvrtS z|| jj| v rtW S W dS  ttfy(   t	 Y S w )z:Returns the scope at which a message was enabled/disabled.N)
rb   
confidencenamer	   r]   _module_msgs_stater   KeyError	TypeErrorr
   )r   r0   r7   rh   r   r   r   get_message_state_scope   s   z,MessagesHandlerMixIn.get_message_state_scopec                 C   sv   | j jr|r|j| j jvrdS z| j|}dd |D }W n ty*   |g}Y nw |D ]}| ||r8 dS q-dS )zreturn true if the message associated to the given message id is
        enabled

        msgid may be either a numeric or symbolic message id.
        Fc                 S   rd   r   r/   re   r   r   r   r\      rg   z;MessagesHandlerMixIn.is_message_enabled.<locals>.<listcomp>T)rb   rh   ri   r2   rO   r   is_one_message_enabled)r   	msg_descrr7   rh   rS   msgidsr0   r   r   r   is_message_enabled   s   
z'MessagesHandlerMixIn.is_message_enabledc           	         s    d u r| j |dS z	| jj|   W S  ty\   | j }|rS |krSd}| jj|i }t fdd| D }t	|d\}}|d urJ|}| j || Y S | j |d Y S w )NTc                    s    g | ]\}}| kr||fqS r   r   )rY   message_liner>   r7   r   r   r\      s
    z?MessagesHandlerMixIn.is_one_message_enabled.<locals>.<listcomp>NN)
r   rJ   r]   rj   rk   get_effective_max_line_number_raw_module_msgs_statereversedra   next)	r   r0   r7   max_line_numberfallbacklinesclosest_lines	last_line
is_enabledr   rs   r   rn      s(   

z+MessagesHandlerMixIn.is_one_message_enabledc           	   	   C   s:   |du rt }| j|}|D ]}| |||||| qdS )a,  Adds a message given by ID or name.

        If provided, the message string is expanded using args.

        AST checkers must provide the node argument (but may optionally
        provide line if the line number is different), raw and token checkers
        must provide the line argument.
        N)r   r2   rO   add_one_message)	r   r0   r7   noderU   rh   
col_offsetrS   rT   r   r   r   r_      s   z MessagesHandlerMixIn.add_messagec                 C   s   | j d tvrA| jtjkr.|d u rtd| j  d|d ur,td| j  d| d| d S | jtjkrC|d u rEtd| j  dd S d S d S )Nr   zMessage z must provide line, got Nonez" must only provide line, got line=z, node=z must provide Node, got None)r0   r   r?   r   LINEr   NODE)rT   r7   r   r   r   r   check_message_definition   s.   
z-MessagesHandlerMixIn.check_message_definitionc                 C   s  |  ||| |d u r|d ur|j}|d u rt|dr|j}| |j||s:| j| |j|||j|||| d S t	|jd  }|  j
t|jd  O  _
| jd u r`|dd| j|diidi i| _| j|  d7  < | jd | j |  d7  < z| jd |j  d7  < W n ty   d| jd |j< Y nw |j}|r||; }|d u r| jd}	}
| j}nt|\}	}
| j}|d ur|| jjdd}nd}| jt|j|j|||	|
|pd|pdf|| d S )Nr   r   	by_moduleby_msgr.    configuration)r   
fromlinenohasattrr   rq   r0   r]   handle_ignored_messagerm   r   r   r   statsr5   r9   rk   rc   current_filer   rootfilereplacereporterpath_strip_prefixhandle_messager   )r   rT   r7   r   rU   rh   r   msg_catrc   rF   objabspathpathr   r   r   r     sf   


z$MessagesHandlerMixIn.add_one_messagec              	   C   s   i }|   D ]O}|j}|dkrUz)||| d< || d  | 7  < || d |j || d  |j7  < W q tyT   |t| t|jt|jd||< Y qw q|S )Nmasterr%   optionsr$   reports)r%   r   r$   r   )	get_checkersri   options_and_valuesupdater$   r   rk   listdict)r   
by_checkerr%   ri   r   r   r   _get_checkers_infosR  s$   
z(MessagesHandlerMixIn._get_checkers_infosc           	      C   s   t dd}|d7 }|  D ]4}|j}|tkrA|jrA| D ]#\}}|d u r(d}n|  d}|t |d7 }|td | d7 }qq|t dd7 }|d	7 }|  }t	|D ]}|| }|d
 }|d
= ||j
di |7 }qU|S )Nz"Pylint global options and switches-z/
Pylint provides global options and switches.

zGeneral optionsz options~
z%Pylint checkers' options and switchesz
Pylint checkers can provide three set of features:

* options that control their execution,
* messages that they can raise,
* reports that they can generate.

Below is a list of all checkers and their features.

r%   r   )r   r   ri   r   r   options_by_section
capitalizer   r   r`   get_full_documentation)	r   resultr%   ri   sectionr   titler   informationr   r   r   get_checkers_documentatione  s,   
z/MessagesHandlerMixIn.get_checkers_documentationstreamreturnc                 C   s   t |  dd |d dS )z*output a full documentation in ReST formatNr   )printr   )r   r   r   r   r   print_full_documentation  s   z-MessagesHandlerMixIn.print_full_documentationc                 C   s2   | d }| d= t |jdi | dd |d dS )z4Helper method used by doc/exts/pylint_extensions.py.r%   Nr   r   r   )r   r   )r   r   r%   r   r   r   _print_checker_doc  s   $z'MessagesHandlerMixIn._print_checker_doc)T)r<   NFrt   )NNNNN)(__name__
__module____qualname____doc__r   r   r   strintbool__annotations__r    r'   classmethodr+   r,   r;   rD   r   rE   r>   rB   rP   rW   r   rm   rq   rn   r_   staticmethodr   r   r   r   sysstdoutr   r   r   r   r   r   r   r   r      sR   
 


	



+
 

D%r   )r   ior   typingr   r   r   r   pylint.constantsr   r   r	   r
   r   r   r   r   r   pylint.exceptionsr   r   r   pylint.interfacesr   pylint.message.messager   pylint.utilsr   r   r   r   r   r   r   r   <module>   s   ,