
    yIf~                        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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dZdS )    )annotations)TYPE_CHECKING)nodes)BaseChecker)	PYMETHODSdecorated_with_propertyis_overload_stubis_protocol_classoverrides_a_method)	INFERENCE)PyLinterc                  b     e Zd ZdZddddddgifiZd fdZddZddZeZddZ	ddZ
e
Z xZS )NoSelfUseCheckerno_self_useR6301zMethod could be a functionno-self-usezYUsed when a method doesn't use its bound instance, and so could be written as a function.	old_names)R0201zold-no-self-uselinterr   returnNonec                f    t                                          |           g | _        d | _        d S N)super__init___first_attrs_meth_could_be_func)selfr   	__class__s     Q/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/no_self_use.pyr   zNoSelfUseChecker.__init__%   s1       .004       node
nodes.Namec                p    | j         r,|j        | j         d         k    s| j         d         sd| _        dS dS dS )zYCheck if the name handle an access to a class member
        if so, register it.
        FN)r   namer   r   r"   s     r    
visit_namezNoSelfUseChecker.visit_name*   sO      	-I*2...d6G6K.',D$$$	- 	-..r!   nodes.FunctionDefc                j    |                                 sd S d| _        |                     |           d S )NT)	is_methodr   _check_first_arg_for_typer'   s     r    visit_functiondefz"NoSelfUseChecker.visit_functiondef3   s;    ~~ 	F#' &&t,,,,,r!   c                   |j         j        r|j         j        d         j        }n)|j         j         r|                                d         }nd}| j                            |           |j        dk    rd| j        d<   dS dS )z!Check the name of first argument.r   Nstaticmethodr%   )argsposonlyargsr&   argnamesr   appendtype)r   r"   	first_args      r    r,   z*NoSelfUseChecker._check_first_arg_for_type;   s     9  		-a05IIY^ 	*III  +++9&&$(Db!!! '&r!   c                   |                                 r| j                                        }|dS |j                                        }| j        r|j        dk    r|j        t          vr|	                                sxt          ||j                  set          |          sXt          |          sKt          |          s>t          |          s1|                     d|t                      dS dS dS dS dS dS dS dS dS dS dS )zOn method node, check if this method couldn't be a function.

        ignore class, static and abstract methods, initializer,
        methods overridden from a parent class.
        Nmethodr   )r"   
confidence)r+   r   popparentframer   r4   r&   r   is_abstractr   r   _has_bare_super_callr
   r	   add_messager   )r   r"   first
class_nodes       r    leave_functiondefz"NoSelfUseChecker.leave_functiondefI   sK    >> 	Q%))++E}**,,J(QI))IY..$$&& / **di@@ / /t44	 /
 ,D11 / )44 / (-- /   Ti PPPPP%	Q 	Q
Q Q))..............r!   r   r   r   r   )r"   r#   r   r   )r"   r)   r   r   )__name__
__module____qualname__r&   msgsr   r(   r-   visit_asyncfunctiondefr,   rA   leave_asyncfunctiondef__classcell__)r   s   @r    r   r      s        D((789
D5 5 5 5 5 5
- - - -- - - - /) ) ) )Q Q Q Q4 /r!   r   fundef_noder)   r   boolc                    |                      t          j                  D ]8}|j        }t	          |t          j                  r|j        dk    r
|j        s dS 9dS )Nr   TF)nodes_of_classr   Callfunc
isinstanceNamer&   r0   )rJ   callrO   s      r    r=   r=   f   s\    **5:66  ydEJ'' 	DI,@,@,@445r!   r   r   r   c                J    |                      t          |                      d S r   )register_checkerr   )r   s    r    registerrU   n   s%    
,V4455555r!   N)rJ   r)   r   rK   rB   )
__future__r   typingr   astroidr   pylint.checkersr   pylint.checkers.utilsr   r   r	   r
   r   pylint.interfacesr   pylint.lint.pylinterr   r   r=   rU    r!   r    <module>r^      s(  
 # " " " " "                   ' ' ' ' ' '              ( ' ' ' ' ' .------J/ J/ J/ J/ J/{ J/ J/ J/Z   6 6 6 6 6 6r!   