§
    ÷yIf¤  ã                  óŠ   — d Z ddlm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 erddlmZ  G d	„ d
e¦  «        Zdd„ZdS )z,Checks for magic values instead of literals.é    )Úannotations)Úmatch)ÚTYPE_CHECKING)Únodes)ÚBaseCheckerÚutils)ÚHIGH)ÚPyLinterc                  ó°   ‡ — e Zd ZdZdZddiZddddd	d
œffZdˆ fd„Zdd„Zd d„Z	d!d„Z
d"d„Zed#d„¦   «         Z ej        d¦  «        d!d„¦   «         Zˆ xZS )$ÚMagicValueCheckerz$Checks for constants in comparisons.zmagic-valueÚR2004)z;Consider using a named constant or an enum instead of '%s'.úmagic-value-comparisonz‹Using named constants instead of magic values helps improve readability and maintainability of your code, try to avoid them in comparisons.zvalid-magic-values)r   éÿÿÿÿé   Ú Ú__main__Úcsvz<argument names>zÆList of valid magic values that `magic-value-compare` will not detect. Supports integers, floats, negative numbers, for empty string enter ``''``, for backslash values just use one backslash e.g \n.)ÚdefaultÚtypeÚmetavarÚhelpÚlinterr
   ÚreturnÚNonec                óZ   •— t          ¦   «                              |¬¦  «         d| _        dS )zInitialize checker instance.©r   © N)ÚsuperÚ__init__Úvalid_magic_vals)Úselfr   Ú	__class__s     €úQ/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/magic_value.pyr   zMagicValueChecker.__init__0   s,   ø€ å‰Œ×Ò ÐÑ'Ô'Ð'Ø9;ˆÔÐÐó    c                ó¾   ‡ — ‰                       ¦   «         r1t          ˆ fd„‰ j        j        j        D ¦   «         ¦  «        ‰ _        d S ‰ j        j        j        ‰ _        d S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S ©N)Ú_parse_rcfile_magic_numbers)Ú.0Úvaluer!   s     €r#   ú	<genexpr>z)MagicValueChecker.open.<locals>.<genexpr>8   sE   øè è € ð *ð *àð ×0Ò0°Ñ7Ô7ð*ð *ð *ð *ð *ð *r$   )Ú_magic_vals_ext_configuredÚtupler   ÚconfigÚvalid_magic_valuesr    ©r!   s   `r#   ÚopenzMagicValueChecker.open5   sv   ø€ à×*Ò*Ñ,Ô,ð 	JÝ$)ð *ð *ð *ð *à!œ[Ô/ÔBð*ñ *ô *ñ %ô %ˆDÔ!Ð!Ð!ð
 %)¤KÔ$6Ô$IˆDÔ!Ð!Ð!r$   Úboolc                óL   — t          | j        j        j        t          ¦  «         S r'   )Ú
isinstancer   r.   r/   r-   r0   s    r#   r,   z,MagicValueChecker._magic_vals_ext_configured?   s   € Ý˜dœkÔ0ÔCÅUÑKÔKÐKÐKr$   Únodeúnodes.Comparec                ó*  — g }d}d}|j         }|                     t          |t          j        ¦  «        ¦  «         |j        d         d         }|                     t          |t          j        ¦  «        ¦  «         t          |¦  «        rdS d}||         r*|                      |¦  «        r|                     ¦   «         }n1||         r)|                      |¦  «        r|                     ¦   «         }|� |  	                    d||t          ¬¦  «         dS dS )z¦
        Magic values in any side of the comparison should be avoided,
        Detects comparisons that `comparison-of-constants` core checker cannot detect.
        r   r   Nr   )r5   ÚargsÚ
confidence)ÚleftÚappendr4   r   ÚConstÚopsÚallÚ_is_magic_valueÚ	as_stringÚadd_messager	   )r!   r5   Úconst_operandsÚLEFT_OPERANDÚRIGHT_OPERANDÚleft_operandÚright_operandÚoperand_values           r#   Ú_check_constants_comparisonz-MagicValueChecker._check_constants_comparisonB   s,  € ð
 ˆØˆØˆà”yˆØ×Ò�j¨µu´{ÑCÔCÑDÔDÐDàœ œ AœˆØ×Ò�j¨½¼ÑDÔDÑEÔEÐEåˆ~ÑÔð 	àˆFàˆØ˜,Ô'ð 	6¨D×,@Ò,@ÀÑ,NÔ,Nð 	6Ø(×2Ò2Ñ4Ô4ˆMˆMØ˜MÔ*ð 	6¨t×/CÒ/CÀMÑ/RÔ/Rð 	6Ø)×3Ò3Ñ5Ô5ˆMØÐ$Ø×ÒØ(ØØ#Ýð	 ñ ô ð ð ð ð %Ð$r$   únodes.Constc                óH   — t          j        |¦  «         o|j        | j        vS r'   )r   Úis_singleton_constr*   r    ©r!   r5   s     r#   r?   z!MagicValueChecker._is_magic_valueb   s*   € ÝÔ,¨TÑ2Ô2Ð2ð 
ØŒJ˜tÔ4Ð5ð	
r$   Ú
parsed_valÚstrúfloat | strc                óþ   — |                       ¦   «                              d¦  «        } |                      d¦  «        r|                      d¦  «        r
| dd…         S t	          d| ¦  «        }|rt          | ¦  «        n| S )NÚunicode_escapeú'r   r   z[-+]?\d+(\.0*)?$)ÚencodeÚdecodeÚ
startswithÚendswithÚregex_matchÚfloat)rM   Ú	is_numbers     r#   r(   z-MagicValueChecker._parse_rcfile_magic_numbersg   s„   € à×&Ò&Ñ(Ô(×/Ò/Ð0@ÑAÔAˆ
à× Ò  Ñ%Ô%ð 	$¨*×*=Ò*=¸cÑ*BÔ*Bð 	$Ø˜a ˜dÔ#Ð#åÐ 3°ZÑ@Ô@ˆ	Ø$-Ð=�u�ZÑ Ô Ð °:Ð=r$   zmagic-comparisonc                ó0   — |                       |¦  «         d S r'   )rH   rL   s     r#   Úvisit_comparezMagicValueChecker.visit_compareq   s   € à×(Ò(¨Ñ.Ô.Ð.Ð.Ð.r$   ©r   r
   r   r   )r   r   )r   r2   )r5   r6   r   r   )r5   rI   r   r2   )rM   rN   r   rO   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚmsgsÚoptionsr   r1   r,   rH   r?   Ústaticmethodr(   r   Úonly_required_for_messagesr[   Ú__classcell__)r"   s   @r#   r   r      s)  ø€ € € € € Ø.Ð.à€Dàð 
ð€Dð !à5ØØ-ðHð	ð ð
	
ð€Gð<ð <ð <ð <ð <ð <ð
Jð Jð Jð JðLð Lð Lð Lðð ð ð ð@
ð 
ð 
ð 
ð
 ð>ð >ð >ñ „\ð>ð &€UÔ%Ð&8Ñ9Ô9ð/ð /ð /ñ :Ô9ð/ð /ð /ð /ð /r$   r   r   r
   r   r   c                óJ   — |                       t          | ¦  «        ¦  «         d S r'   )Úregister_checkerr   r   s    r#   Úregisterri   v   s%   € Ø
×ÒÕ-¨fÑ5Ô5Ñ6Ô6Ð6Ð6Ð6r$   Nr\   )r`   Ú
__future__r   Úrer   rW   Útypingr   Úastroidr   Úpylint.checkersr   r   Úpylint.interfacesr	   Úpylint.lintr
   r   ri   r   r$   r#   ú<module>rq      sê   ðð
 3Ð 2à "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "àð %Ø$Ð$Ð$Ð$Ð$Ð$ð^/ð ^/ð ^/ð ^/ð ^/˜ñ ^/ô ^/ð ^/ðB7ð 7ð 7ð 7ð 7ð 7r$   