
    e\	                        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y)    )annotations)TYPE_CHECKING)nodes)BaseChecker)DUNDER_METHODSDUNDER_PROPERTIESEXTRA_DUNDER_METHODS)HIGH)PyLinterc                  D    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	y)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helpc                N   t         t        z   | j                  j                  j                  z   | _        t        j                         D ][  \  }}|| j                  j                  j                  k  s*| j
                  j                  t        |j                                      ] y N)r	   r   linterconfiggood_dunder_names_dunder_methodsr   items
py_versionextendlistkeys)self
since_versdunder_methodss      :/usr/lib/python3/dist-packages/pylint/extensions/dunder.pyopenzDunderChecker.open,   s      kk  223 	
 +9*>*>*@ 	I&JT[[//:::$$++D1D1D1F,GH	I    c                   |j                         sy|j                  j                  d      rY|j                  j                  d      r=|j                  | j                  vr$| j                  d||j                  t               yyyy)zoCheck if known dunder method is misspelled or dunder name is not one
        of the pre-defined names.
        N_r   )nodeargs
confidence)	is_methodname
startswithendswithr   add_messager
   )r"   r*   s     r%   visit_functiondefzDunderChecker.visit_functiondef6   s{    
 ~~ II  %		""3'		!5!55!ii	   6 ( &r'   N)returnNone)r*   znodes.FunctionDefr3   r4   )
__name__
__module____qualname____doc__r.   prioritymsgsoptionsr&   r2    r'   r%   r   r      sK    +DH 
D  4L		

GIr'   r   c                8    | j                  t        |              y r   )register_checkerr   )r   s    r%   registerr?   L   s    
M&12r'   N)r   r   r3   r4   )
__future__r   typingr   astroidr   pylint.checkersr   pylint.constantsr   r   r	   pylint.interfacesr
   pylint.lintr   r   r?   r<   r'   r%   <module>rG      s4   
 #    ' T T "$6K 6r3r'   