
    eI                    ~    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
 ddlmZ erddlmZ  G d	 d
e      ZddZy)z:Check for use of dictionary mutation after initialization.    )annotations)TYPE_CHECKING)nodes)BaseChecker)only_required_for_messages)HIGH)PyLinterc                  6    e Zd ZdZddiZ ed      dd       Zy)DictInitMutateCheckerdict-init-mutateC3401)z>Declare all known key/values when initializing the dictionary.r   zXDictionaries can be initialized with a single statement using dictionary literal syntax.c                b   t        |j                  t        j                        sy|j                  d   }t        |j                        dk7  st        |t        j                        sy|j                         }|r2t        |t        j                        rt        |j                        dk7  ry|j                  d   }t        |t        j                        sy|j                  }t        |t        j                        sy|j                  |j                  k(  r| j                  d|t               yy)z
        Detect dictionary mutation immediately after initialization.

        At this time, detecting nested mutation is not supported.
        Nr      r   )node
confidence)
isinstancevaluer   Dicttargetslen
AssignNamenext_siblingAssign	SubscriptNamenameadd_messager   )selfr   	dict_namefirst_siblingsibling_targetsibling_names         D/usr/lib/python3/dist-packages/pylint/extensions/dict_init_mutate.pyvisit_assignz"DictInitMutateChecker.visit_assign   s     $**ejj1LLO	t||!Iu?O?O)P))+mU\\:=(()Q.&..q1.%//:%++,

3	./dtL /    N)r   znodes.AssignreturnNone)__name__
__module____qualname__r   msgsr   r$    r%   r#   r   r      s2    D 
D   23M 4Mr%   r   c                8    | j                  t        |              y )N)register_checkerr   )linters    r#   registerr0   A   s    
1&9:r%   N)r/   r	   r&   r'   )__doc__
__future__r   typingr   astroidr   pylint.checkersr   pylint.checkers.utilsr   pylint.interfacesr   pylint.lint.pylinterr	   r   r0   r,   r%   r#   <module>r9      s7   
 A "    ' < "-*MK *MZ;r%   