a
    E
a	                     @   sx   d 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dZedZefddZe
d	d
ddZe e
ee d	S )zy
Astroid hook for the attrs library

Without this hook pylint reports unsupported-assignment-operation
for attrs classes
    )AstroidManager)	AnnAssignAssign
AssignNameCallUnknown)ClassDef)zattr.ibZattribzattr.attrib)zattr.sattrsz
attr.attrszattr.attributesc                 C   s>   | j s
dS | j jD ]&}t|tr&|j}| |v r dS qdS )zBReturn True if a decorated node has
    an attr decorator applied.FT)Z
decoratorsZnodes
isinstancer   func	as_string)nodeZdecorator_namesZdecorator_attribute r   8lib/python3.9/site-packages/astroid/brain/brain_attrs.pyis_decorated_with_attrs   s    
r   N)r   returnc                 C   s   t | dg| jd< | jD ]}t|ttfs,qt|jtr|jj	 t
vrNqnqt|dr^|jn|jg}|D ]<}t |j|j|d}t|trj|g| j|j< |g| j|j< qjqdS )zhGiven that the ClassNode has an attr decorator,
    rewrite class attributes as instance attributes
    )parentZ__attrs_attrs__targets)lineno
col_offsetr   N)r   localsbodyr
   r   r   valuer   r   r   ATTRIB_NAMEShasattrr   targetr   r   r   nameZinstance_attrs)r   Zcdef_body_noder   r   Zrhs_noder   r   r   attr_attributes_transform   s*    

r   )__doc__Zastroid.managerr   Zastroid.node_classesr   r   r   r   r   Zastroid.scoped_nodesr   	frozensetr   ZATTRS_NAMESr   r   Zregister_transformr   r   r   r   <module>   s   #