
    cR	                        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
mZ d dlmZ erd dlmZ  G d d	e          ZddZdS )    )annotations)TYPE_CHECKING)nodes)BaseChecker)DUNDER_METHODSDUNDER_PROPERTIESEXTRA_DUNDER_METHODS)HIGH)PyLinterc                  F    e Zd ZdZdZdZddiZdg ddd	d
ffZddZddZ	dS )DunderCheckerz!Checks related to dunder methods.dunderW3201)z(Bad or misspelled dunder method name %s.bad-dunder-nameznUsed when a dunder method is misspelled or defined with a name not within the predefined list of dunder names.zgood-dunder-namescsvz<comma-separated names>z2Good dunder names which should always be accepted.)defaulttypemetavarhelpreturnNonec                    t           t          z   | j        j        j        z   | _        t          j                    D ]S\  }}|| j        j        j        k    r9| j        	                    t          |                                                     Td S N)r	   r   linterconfiggood_dunder_names_dunder_methodsr   items
py_versionextendlistkeys)self
since_versdunder_methodss      8lib/python3.11/site-packages/pylint/extensions/dunder.pyopenzDunderChecker.open,   s      k 23 	
 +9*>*@*@ 	I 	I&JT[/:: I$++D1D1D1F1F,G,GHHH	I 	I    nodenodes.FunctionDefc                   |                                 sdS |j                            d          rM|j                            d          r5|j        | j        vr)|                     d||j        t                     dS dS dS dS )zoCheck if known dunder method is misspelled or dunder name is not one
        of the pre-defined names.
        N_r   )r*   args
confidence)	is_methodname
startswithendswithr   add_messager
   )r$   r*   s     r'   visit_functiondefzDunderChecker.visit_functiondef6   s    
 ~~ 	F I  %%
		""3''
	 	!55
	
 !i	      
	 
	 
	 
	 
	 
	r)   N)r   r   )r*   r+   r   r   )
__name__
__module____qualname____doc__r1   prioritymsgsoptionsr(   r5    r)   r'   r   r      s        ++DH 
D  4L	 	

GI I I I     r)   r   r   r   r   r   c                J    |                      t          |                      d S r   )register_checkerr   )r   s    r'   registerr@   L   s$    
M&1122222r)   N)r   r   r   r   )
__future__r   typingr   astroidr   pylint.checkersr   pylint.constantsr   r   r	   pylint.interfacesr
   pylint.lintr   r   r@   r=   r)   r'   <module>rH      s   
 # " " " " "                   ' ' ' ' ' ' T T T T T T T T T T " " " " " " %$$$$$$6 6 6 6 6K 6 6 6r3 3 3 3 3 3r)   