§
    ö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 dd„Zdd„Z G d„ de
¦  «        Zdd„ZdS )z#Dataclass checkers for Python code.é    )Úannotations)ÚTYPE_CHECKING)Únodes)ÚDATACLASS_MODULES)ÚBaseCheckerÚutils)Ú	INFERENCE)ÚPyLinterÚnodeúnodes.ModuleÚreturnÚboolc                ó   — | j         t          v S )z=Utility function to check if node is from dataclasses_module.)Únamer   )r   s    úU/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/dataclass_checker.pyÚ_is_dataclasses_moduler      s   € àŒ9Õ)Ð)Ð)ó    únodes.Name | nodes.AttributeÚ
check_withÚstrc                ó–   — t          | t          j        ¦  «        rt          | j        ¦  «        |k    S t          | j        ¦  «        |k    S )zdUtility function to check either a Name/Attribute node's name/attrname with a
    given string.
    )Ú
isinstancer   ÚNamer   r   Úattrname)r   r   s     r   Ú_check_name_or_attrname_eq_tor      s@   € õ �$�œ
Ñ#Ô#ð ,Ý�4”9‰~Œ~ Ò+Ð+ÝˆtŒ}ÑÔ Ò+Ð+r   c                  ób   — e Zd ZdZdZddiZ ej        d¦  «        dd
„¦   «         Zdd„Z	dd„Z
dS )ÚDataclassCheckerzoChecker that detects invalid or problematic usage in dataclasses.

    Checks for
    * invalid-field-call
    Ú	dataclassÚE3701)zInvalid usage of field(), %súinvalid-field-callz�The dataclasses.field() specifier should only be used as the value of an assignment within a dataclass, or within the make_dataclass() function.r    r   ú
nodes.Callr   ÚNonec                ó0   — |                       |¦  «         d S ©N)Ú_check_invalid_field_call)Úselfr   s     r   Ú
visit_callzDataclassChecker.visit_call6   s   € à×&Ò& tÑ,Ô,Ð,Ð,Ð,r   c                óJ  — t          |j        t          j        t          j        f¦  «        sdS t          |j        d¦  «        sdS t          j        |j        ¦  «        }t          |t          j        ¦  «        r!t          | 
                    ¦   «         ¦  «        sdS |j        }|rUt          |t          j        t          j        f¦  «        s/|j        }|r&t          |t          j        t          j        f¦  «        ¯/t          |t          j        ¦  «        r|                      ||¦  «         dS |r|j        s |                      d|dt"          ¬¦  «         dS t          |j        t          j        ¦  «        r||j        j        k    s |                      d|dt"          ¬¦  «         dS dS )af  Checks for correct usage of the dataclasses.field() specifier in
        dataclasses or within the make_dataclass() function.

        Emits message
        when field() is detected to be used outside a class decorated with
        @dataclass decorator and outside make_dataclass() function, or when it
        is used improperly within a dataclass.
        NÚfieldr    ©zFit should be used within a dataclass or the make_dataclass() function.©r   ÚargsÚ
confidence)z;it should be the value of an assignment within a dataclass.)r   Úfuncr   r   Ú	Attributer   r   Ú
safe_inferÚFunctionDefr   ÚrootÚparentÚClassDefÚCallÚ%_check_invalid_field_call_within_callÚis_dataclassÚadd_messager	   Ú	AnnAssignÚvalue)r&   r   Úinferred_funcÚ
scope_nodes       r   r%   z*DataclassChecker._check_invalid_field_call:   s¶  € õ ˜$œ)¥e¤jµ%´/Ð%BÑCÔCð 	ØˆFÝ,¨T¬Y¸Ñ@Ô@ð 	ØˆFÝÔ(¨¬Ñ3Ô3ˆå�}¥eÔ&7Ñ8Ô8ð	å& }×'9Ò'9Ñ';Ô';Ñ<Ô<ð	ð ˆFØ”[ˆ
Øð 	+¥¨J½¼ÍÌÐ8TÑ!UÔ!Uð 	+Ø#Ô*ˆJð ð 	+¥¨J½¼ÍÌÐ8TÑ!UÔ!Uð 	+õ �j¥%¤*Ñ-Ô-ð 	Ø×6Ò6°t¸ZÑHÔHÐHØˆFàð 		 Ô!8ð 		Ø×ÒØ$Øðõ %ð ñ ô ð ð ˆFå˜4œ;­¬Ñ8Ô8ð 	¸TÀTÄ[ÔEVÒ=VÐ=VØ×ÒØ$ØØUÝ$ð	 ñ ô ð ð ð ð >WÐ=Vr   r<   c                ód  — t          j        |j        ¦  «        }t          |j        t          j        t          j        f¦  «        rM|j        j        dk    r=t          |t          j        ¦  «        r#t          | 
                    ¦   «         ¦  «        rdS |                      d|dt          ¬¦  «         dS )zvChecks for special case where calling field is valid as an argument of the
        make_dataclass() function.
        Úmake_dataclassNr    r*   r+   )r   r0   r.   r   r   r   Ú
AssignNamer   r1   r   r2   r8   r	   )r&   r   r<   r;   s       r   r6   z6DataclassChecker._check_invalid_field_call_within_callh   s´   € õ Ô(¨¬Ñ9Ô9ˆå�z”­¬µUÔ5EÐ(FÑGÔGð	à”Ô$Ð(8Ò8Ð8Ý˜=­%Ô*;Ñ<Ô<ð 9å& }×'9Ò'9Ñ';Ô';Ñ<Ô<ð 9ð ˆFØ×ÒØ Øðõ !ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   N)r   r!   r   r"   )r   r!   r<   r!   r   r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úmsgsr   Úonly_required_for_messagesr'   r%   r6   © r   r   r   r   %   sŒ   € € € € € ðð ð €Dàð 
ð€Dð &€UÔ%Ð&:Ñ;Ô;ð-ð -ð -ñ <Ô;ð-ð,ð ,ð ,ð ,ð\
ð 
ð 
ð 
ð 
ð 
r   r   Úlinterr
   r"   c                óJ   — |                       t          | ¦  «        ¦  «         d S r$   )Úregister_checkerr   )rG   s    r   ÚregisterrJ   €   s%   € Ø
×ÒÕ,¨VÑ4Ô4Ñ5Ô5Ð5Ð5Ð5r   N)r   r   r   r   )r   r   r   r   r   r   )rG   r
   r   r"   )rC   Ú
__future__r   Útypingr   Úastroidr   Úastroid.brain.brain_dataclassesr   Úpylint.checkersr   r   Úpylint.interfacesr	   Úpylint.lintr
   r   r   r   rJ   rF   r   r   ú<module>rR      s  ðð
 *Ð )à "Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'àð %Ø$Ð$Ð$Ð$Ð$Ð$ð*ð *ð *ð *ð
,ð ,ð ,ð ,ðX
ð X
ð X
ð X
ð X
�{ñ X
ô X
ð X
ðv6ð 6ð 6ð 6ð 6ð 6r   