
    e                    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	 d dl
mZ erd dlmZ  G d d	e	      Zdd
Zy)    )annotations)zip_longest)TYPE_CHECKING)nodes)BaseChecker)HIGH)PyLinterc                  :    e Zd ZdZdZdddZdZddZddZdd	Z	y
)LambdaExpressionCheckerz2Check for unnecessary usage of lambda expressions.zlambda-expressions)z\Lambda expression assigned to a variable. Define a function using the "def" keyword instead.unnecessary-lambda-assignmentzvUsed when a lambda expression is assigned to variable rather than defining a standard function with the "def" keyword.)zILambda expression called directly. Execute the expression inline instead.unnecessary-direct-lambda-callz[Used when a lambda expression is directly called rather than executing its contents inline.)C3001C3002 c                   t        |j                  d   t        j                        rGt        |j                  t        j
                        r#| j                  d|j                  t               yt        |j                  d   t        j                        rt        |j                  t        j                  t        j                  f      rt        |j                  d   j                  |j                  j                        D ]Y  \  }}|| yt        |t        j                        s't        |t        j
                        sB| j                  d|t               [ yyy)z5Check if lambda expression is assigned to a variable.r   r   node
confidenceN)
isinstancetargetsr   
AssignNamevalueLambdaadd_messager   TupleListr   elts)selfr   lhs_elemrhs_elems       D/usr/lib/python3/dist-packages/pylint/checkers/lambda_expressions.pyvisit_assignz$LambdaExpressionChecker.visit_assign(   s   dll1ou'7'78ZJJ>
 /ZZ  
 Q5*JJejj1;
 '2Q$$djjoo' "( #x'7h(8(89jell? $$7%#' % ;
5    c                    t        |j                  t        j                        rHt        |j                  t        j
                        r#| j                  d|j                  t               y y y )Nr   r   )r   targetr   r   r   r   r   r   r   r   s     r!   visit_namedexprz'LambdaExpressionChecker.visit_namedexprH   sT    dkk5#3#34JJ:
 /ZZ  :
4r#   c                ~    t        |j                  t        j                        r| j	                  d|t
               yy)z.Check if lambda expression is called directly.r   r   N)r   funcr   r   r   r   r&   s     r!   
visit_callz"LambdaExpressionChecker.visit_callR   s5    dii.0   /r#   N)r   znodes.AssignreturnNone)r   znodes.NamedExprr+   r,   )r   z
nodes.Callr+   r,   )
__name__
__module____qualname____doc__namemsgsoptionsr"   r'   r*   r   r#   r!   r   r      s2    <D

D G@r#   r   c                8    | j                  t        |              y )N)register_checkerr   )linters    r!   registerr7   \   s    
3F;<r#   N)r6   r	   r+   r,   )
__future__r   	itertoolsr   typingr   astroidr   pylint.checkersr   pylint.interfacesr   pylint.lintr	   r   r7   r   r#   r!   <module>r?      s3   
 # !    ' "$Fk FR=r#   