a
    =a                     @   sR   d dl 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
 G dd dZdS )    N)DictList
ValuesView)UnknownMessageError)MessageDefinition)MessageIdStorec                   @   s   e Zd ZdZdd Zeee dddZdddd	Z	edd
ddZ
eee dddZeedddZee ddddZddddZdS )MessageDefinitionStorezThe messages store knows information about every possible message definition but has
    no particular state during analysis.
    c                 C   s   t  | _i | _tt| _d S N)r   message_id_store_messages_definitionscollectionsdefaultdictlist_msgs_by_categoryself r   Flib/python3.9/site-packages/pylint/message/message_definition_store.py__init__   s    zMessageDefinitionStore.__init__)returnc                 C   s
   | j  S )z The list of all active messages.)r   valuesr   r   r   r   messages   s    zMessageDefinitionStore.messagesNc                 C   s"   |   |jD ]}| | qdS )z1Register all messages definitions from a checker.N)Zcheck_consistencyr   register_message)r   Zcheckermessager   r   r   register_messages_from_checker    s    
z5MessageDefinitionStore.register_messages_from_checker)r   r   c                 C   s>   | j |j|j|j || j|j< | j|jd  |j dS )z6Register a MessageDefinition with consistency in mind.r   N)r
   Zregister_message_definitionmsgidsymbolZ	old_namesr   r   append)r   r   r   r   r   r   &   s
    z'MessageDefinitionStore.register_message)msgid_or_symbolr   c                    s    fdd j |D S )zCReturns the Message definition for either a numeric or symbolic id.c                    s   g | ]} j | qS r   )r   ).0mr   r   r   
<listcomp>0   s   zBMessageDefinitionStore.get_message_definitions.<locals>.<listcomp>)r
   Zget_active_msgids)r   r   r   r   r   get_message_definitions.   s    

z.MessageDefinitionStore.get_message_definitionsc                 C   s6   |  |}t|dkr$t|d jS tdd |D S )z8Generates a user-consumable representation of a message.   r   c                 S   s   g | ]
}|j qS r   )r   )r   Zmdr   r   r   r!   :       zAMessageDefinitionStore.get_msg_display_string.<locals>.<listcomp>)r"   lenreprr   )r   r   Zmessage_definitionsr   r   r   get_msg_display_string5   s    
z-MessageDefinitionStore.get_msg_display_string)msgids_or_symbolsr   c                 C   s|   |D ]r}z,|  |D ]}t|jdd td qW q tyt } z(t| td W Y d}~qW Y d}~qd}~0 0 qdS )z7Display help messages for the given message identifiersTZ
checkerref N)r"   printformat_helpr   )r   r(   Zmsgids_or_symbolZmessage_definitionexr   r   r   help_message<   s    z#MessageDefinitionStore.help_messagec                 C   sF   t | j dd d}|D ]}| s(qt|jdd qtd dS )z7Output full messages list documentation in ReST format.c                 S   s   | j S r	   )r   )r    r   r   r   <lambda>L   r$   z6MessageDefinitionStore.list_messages.<locals>.<lambda>)keyFr)   r*   N)sortedr   r   Zmay_be_emittedr+   r,   )r   r   r   r   r   r   list_messagesJ   s    z$MessageDefinitionStore.list_messages)__name__
__module____qualname____doc__r   propertyr   r   r   r   r   strr   r"   r'   r.   r2   r   r   r   r   r      s   	r   )r   typingr   r   r   Zpylint.exceptionsr   Z!pylint.message.message_definitionr   Zpylint.message.message_id_storer   r   r   r   r   r   <module>   s
   