§
    ö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Ð Øœ	ŸšÑ)Ô)ˆDŒIØˆŒÝÔ# 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 )zÒPermits 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ð 	'Ø&Ð&Ð&ØŒy˜5œ:Ò%Ð%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Ø”)Ð(˜TœYÐ(Ð(¨u¬zÐ,G¸5¼:Ð,GÐ,GÒGÐGr.   Úintc                ó<   — t          | j        › | j        › �¦  «        S )zMake Checker hashable.)Úhashr   r"   ©r,   s    r-   Ú__hash__zBaseChecker.__hash__M   s   € å�t”yÐ- $¤)Ð-Ð-Ñ.Ô.Ð.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ˆØ�{Š{˜4œ9Ÿ>š>Ñ+Ô+Ñ,Ô,ˆØÐCÐC˜DœIÐCÐC¸4ÐCÐCÐCÐCr.   c                ój   — |                       | j        |                      ¦   «         | j        ¬¦  «        S )z¬This 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À!¼uÀQ¼xÑ.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ØÐD°vÐDÐDÐDÑDˆFØÐI°t´yÐIÐIÐIÑIˆØð 	-à•m }Ð$DÐ$DÐ$DÀcÑJÔJÑJˆFØ� #™œÐ,Ð,Ð,Ñ,ˆFå˜G‘}”}ˆØð 	tØð tØ�-¨=Ð(BÐ(BÐ(BÀCÑHÔHÑH�Ø�_¨T°<Ñ@Ô@ÐDÐDÐDÑD��àÐs¨D¬IÐsÐsÐZ^ÔZcÐsÐsÐsÑs�Øð 	Ø•m }Ð$?Ð$?Ð$?ÀÑEÔEÑEˆFÝ$Ø—
’
‘”Ð"PÐ"Pðñ ô ð Gð G‘
��sð ×CÒCÀEÈ3ÑOÔO�Ø˜W×0Ò0¸EÐ0ÑBÔBÐFÐFÐFÑF��Ø�d‰NˆFØð 	Ø•m }Ð$>Ð$>Ð$>ÀÑDÔDÑDˆFØ!ð 9ð 9�ØÐ8˜f QœiÐ8Ð8¨6°!¬9Ð8Ð8Ð8Ñ8��Ø�d‰NˆFØ�$‰ˆØˆ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˜˜t Z°¸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ÈÀcÔ8JÒ*JÐ*JØF�	ØÐN ¤ÐNÐN¸jÐ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   z´Messages 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ð 	.Ý(Ô-ˆMˆMå(Ô-ˆMØ')ˆÝˆy‰>Œ>˜QÒÐØ09Ñ-ˆS�&˜% Ý)Ð8Ð8¨KÐ8Ð8ˆGˆGÝ�‰^Œ^˜qÒ Ð Ø#,Ñ ˆS�&˜%˜%ðˆIõ & iÑ0Ô0Ð0Ø×Ò˜7 MÑ2Ô2Ð2Ý   u¨c°5¸&ÐLÐLÀGÐ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Ò5°e¸YÑGÔGð
ð 
ð 
r.   )r_   r"   r`   r<   s   `r-   rz   zBaseChecker.messagesÑ   sB   ø€ ð
ð 
ð 
ð 
å$*¨4¬9¯?ª?Ñ+<Ô+<Ñ$=Ô$=ð
ñ 
ô 
ð 	
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â  € € € € € € ð €D€N€N€N�Nà€GÐÐÐÑà.0€DÐ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.   