
    yIf$                    T   d dl mZ d dlZd dlZd dlmZ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 d d	lmZmZmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZm Z m!Z! d dl"m#Z#m$Z$ erd dl%m&Z& ej'         G d de                      Z( G d de(          Z) G d de(          Z*dS )    )annotationsN)IterableSequence)cleandoc)	TokenInfo)TYPE_CHECKINGAny)nodes)_ArgumentsProvider)
_MSG_ORDERMAIN_CHECKER_NAMEWarningScope)InvalidMessageError)
Confidence)MessageDefinition)ExtraMessageOptionsMessageDefinitionTuple
OptionDictOptionsReportsCallable)get_rst_sectionget_rst_title)PyLinterc                      e Zd ZU dZded<   dZded<   i Zded<   dZd	ed
<   dZded<   d<dZ	d=dZ
d=dZd>dZd?dZd?dZ	 	 	 d@dAd"Z	 	 	 	 	 	 	 dBdCd.ZdDd/ZdEd3ZedFd5            ZdDd6ZdDd7ZdGd8ZdHd;ZdS )IBaseChecker strname r   options!dict[str, MessageDefinitionTuple]msgsz,tuple[tuple[str, str, ReportsCallable], ...]reportsTboolenabledlinterr   returnNonec                    | j         | j                                         | _         || _        t          j        | |           dS )z5Checker instances should have the linter as argument.N)r   lowerr&   r   __init__)selfr&   s     P/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/base_checker.pyr+   zBaseChecker.__init__/   s=    9 	))DI#D&11111    otherr	   c                @   t          |t                    sdS | j        t          k    rdS |j        t          k    rdS t	          |           j                            d          }|t	          |          j                            d          z  r| S | j        |j        k    S )zPermits sorting checkers for stable doc and tests.

        The main checker is always the first one, then builtin checkers in alphabetical
        order, then extension checkers in alphabetical order.
        FTzpylint.checkers)
isinstancer   r   r   type
__module__
startswith)r,   r/   self_is_builtins      r-   __gt__zBaseChecker.__gt__6   s     %-- 	59)))5:***4t**/::;LMMT%[[3>>?PQQQ 	'&&&y5:%%r.   c                t    t          |t                    sdS | j         | j         |j         |j         k    S )z$Permit to assert Checkers are equal.F)r1   r   r   r"   )r,   r/   s     r-   __eq__zBaseChecker.__eq__G   sB    %-- 	5)(TY((uz,G5:,G,GGGr.   intc                <    t          | j         | j                   S )zMake Checker hashable.)hashr   r"   r,   s    r-   __hash__zBaseChecker.__hash__M   s    ty-$)--...r.   c                    | j         rdnd}d                    | j                                                  }| d| j         d| dS )NCheckerzDisabled checkerz', 'z 'z' (responsible for 'z'))r%   joinr"   keysr   )r,   statusr"   s      r-   __repr__zBaseChecker.__repr__Q   sQ    "lB0B{{49>>++,,CCDICC4CCCCr.   c                j    |                      | j        |                                 | j                  S )zThis might be incomplete because multiple classes inheriting BaseChecker
        can have the same name.

        See: MessageHandlerMixIn.get_full_documentation()
        )r"   r    r#   )get_full_documentationr"   _options_and_valuesr#   r<   s    r-   __str__zBaseChecker.__str__V   s8     **D$<$<$>$> + 
 
 	
r.   N%Iterable[tuple[str, OptionDict, Any]]*Sequence[tuple[str, str, ReportsCallable]]doc
str | Nonemoduleshow_optionsc                T   d}| j                             dd                                           d}|r	|d| dz  }|t          |d           dz  }|r	|d	| d
z  }|d| j          dz  }|r+|t          | dd          z  }|t	          |           dz  }t          |          }	|	rE|r-|t          | dd          z  }|t          d |	           dz  }n|d| j          d| j          dz  }|rw|t          | dd          z  }t          |                                d           D ]7\  }
}| 	                    |
|          }||
                    d           dz  }8|dz  }|r8|t          | dd          z  }|D ]}|d|d          d|d          dz  }|dz  }|dz  }|S )Nr   _ z checkerz.. _z:

~
zThis checker is provided by ``z``.
z"Verbatim name of the checker is ``z``.

z Documentation^z

z OptionszSee also :ref:`z# checker's options' documentation <z-options>`

z	 Messagesc                R    t          j        | d         d                   | d         fS )Nr      )r   index)kvs    r-   <lambda>z4BaseChecker.get_full_documentation.<locals>.<lambda>   s"    j.>r!uQx.H.H"Q%-P r.   )keyF)
checkerrefz Reports:r   z: rU   )r   replacetitler   r   listr   sorteditems$create_message_definition_from_tupleformat_help)r,   r"   r    r#   rJ   rL   rM   resultchecker_titleoptions_listmsgidmsgmsg_defreports                 r-   rE   z"BaseChecker.get_full_documentation`   su    9,,S#66<<>>HHH 	+*V****F]=#66:::: 	EDvDDDDFItyIIII 	-m}$D$D$DcJJJF#,,,,FG}} 	t t-=(B(B(BCHHH_T<@@DDDDsDIssZ^Zcssss 	m}$?$?$?EEEF$

"P"P   G G
s CCE3OOW00E0BBFFFFdNF 	m}$>$>$>DDDF! 9 98fQi886!98888dNF$r.   rf   line
int | Nonenodenodes.NodeNG | Noneargs
confidenceConfidence | None
col_offset
end_linenoend_col_offsetc	           
     H    | j                             ||||||||           d S N)r&   add_message)	r,   rf   rj   rl   rn   ro   rq   rr   rs   s	            r-   rv   zBaseChecker.add_message   s9     	4tZZ	
 	
 	
 	
 	
r.   c                   d}g }| j         D ]s}|j        r
|>||j        dd         k    r+d}|d|j         d| dz  }|d| d	z  }t          |          |j        dd         }|                    |j                   tdS )
a<  Check the consistency of msgid.

        msg ids for a checker should be a string of len 4, where the two first
        characters are the checker id and the two last the msg id in this
        checker.

        :raises InvalidMessageError: If the checker id in the messages are not
        always the same.
        NrU      z(Inconsistent checker part in message id 'z' (expected 'xzxx' zbecause we already had z).)messagessharedrf   r   append)r,   
checker_idexisting_idsmessage	error_msgs        r-   check_consistencyzBaseChecker.check_consistency   s     
} 	/ 	/G ~ %*ac8J*J*JF	NNNjNNNN	G|GGGG	))444 qs+J....	/ 	/r.   	msg_tupler   r   c                b   t          | t          t          f          rt          j        }nt          j        }i }t          |          dk    r|\  }}}}t          di |}n+t          |          dk    r|\  }}}nd}	t          |	          |	                    d|           t          | ||||fi |S )N   rx   zMessages should have a msgid, a symbol and a description. Something like this :

"W1234": (
    "message",
    "message-symbol",
    "Message description with detail.",
    ...
),
scoper   )r1   BaseTokenCheckerBaseRawFileCheckerr   LINENODElenr   r   
setdefaultr   )
r,   rf   r   default_scoper    rg   symboldescrmsg_optionsr   s
             r-   ra   z0BaseChecker.create_message_definition_from_tuple   s     d-/ABCC 	.(-MM(-M')y>>Q09-S&%)88K88GG^^q  #, S&%%I &i0007M222 uc5&LLGLLLr.   list[MessageDefinition]c                h      fdt           j                                                  D             S )Nc                B    g | ]\  }}                     ||          S r   )ra   ).0rf   r   r,   s      r-   
<listcomp>z(BaseChecker.messages.<locals>.<listcomp>   s=     
 
 
 y 55eYGG
 
 
r.   )r_   r"   r`   r<   s   `r-   rz   zBaseChecker.messages   sB    
 
 
 
$*49??+<+<$=$=
 
 
 	
r.   c                    dS )z5Called before visiting project (i.e. set of modules).Nr   r<   s    r-   openzBaseChecker.open         r.   c                    dS )z3Called after visiting project (i.e set of modules).Nr   r<   s    r-   closezBaseChecker.close   r   r.   c                    d S ru   r   r<   s    r-   get_map_datazBaseChecker.get_map_data       tr.   data	list[Any]c                    d S ru   r   )r,   r&   r   s      r-   reduce_map_datazBaseChecker.reduce_map_data   r   r.   )r&   r   r'   r(   )r/   r	   r'   r$   )r'   r9   )r'   r   )NNT)r"   r!   r    rH   r#   rI   rJ   rK   rL   rK   rM   r$   r'   r   )NNNNNNN)rf   r   rj   rk   rl   rm   rn   r	   ro   rp   rq   rk   rr   rk   rs   rk   r'   r(   )r'   r(   )rf   r   r   r   r'   r   )r'   r   )r'   r	   )r&   r   r   r   r'   r(   )__name__r3   __qualname__r   __annotations__r    r"   r#   r%   r+   r6   r8   r=   rC   rG   rE   rv   r   ra   propertyrz   r   r   r   r   r   r.   r-   r   r   "   s         DNNNNG.0D0000<>G>>>>G2 2 2 2& & & &"H H H H/ / / /D D D D

 
 
 
 !!, , , , ,b  $((,!%!%%)
 
 
 
 
/ / / /2M M M M6 
 
 
 X
D D D DB B B B        r.   r   c                  4    e Zd ZdZej        dd            ZdS )	r   zEBase class for checkers that want to have access to the token stream.tokenslist[TokenInfo]r'   r(   c                    t                      )z#Should be overridden by subclasses.NotImplementedError)r,   r   s     r-   process_tokenszBaseTokenChecker.process_tokens   s     "###r.   N)r   r   r'   r(   )r   r3   r   __doc__abcabstractmethodr   r   r.   r-   r   r      s<        OO$ $ $ $ $ $r.   r   c                  4    e Zd ZdZej        dd            ZdS )	r   z9Base class for checkers which need to parse the raw file.rl   nodes.Moduler'   r(   c                    t                      )z]Process a module.

        The module's content is accessible via ``astroid.stream``
        r   )r,   rl   s     r-   process_modulez!BaseRawFileChecker.process_module   s     "###r.   N)rl   r   r'   r(   )r   r3   r   r   r   r   r   r   r.   r-   r   r      s<        CC$ $ $ $ $ $r.   r   )+
__future__r   r   	functoolscollections.abcr   r   inspectr   tokenizer   typingr   r	   astroidr
    pylint.config.arguments_providerr   pylint.constantsr   r   r   pylint.exceptionsr   pylint.interfacesr   !pylint.message.message_definitionr   pylint.typingr   r   r   r   r   pylint.utilsr   r   pylint.lintr   total_orderingr   r   r   r   r.   r-   <module>r      s  
 # " " " " " 



     . . . . . . . .             % % % % % % % %       ? ? ? ? ? ? H H H H H H H H H H 1 1 1 1 1 1 ( ( ( ( ( ( ? ? ? ? ? ?              8 7 7 7 7 7 7 7 %$$$$$$ @ @ @ @ @$ @ @ @F$ $ $ $ ${ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$r.   