
    ep                         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
 ddlmZ  ed      Z ed      Zefdefd	Zd
e
ddfdZdeddfdZy)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)
safe_infer)zattr.Factoryzattr.ibattribzattr.attribz
attr.fieldzattrs.fieldfield)
zattr.sattrsz
attr.attrszattr.attributeszattr.definezattr.mutablezattr.frozenzattrs.definezattrs.mutablezattrs.frozenreturnc                    | j                   sy| j                   j                  D ]_  }t        |t              r|j                  }|j                         |v r yt        |      }|sA|j                         j                  dk(  s_ y y)z>Return whether a decorated node has an attr decorator applied.FTzattr._next_gen)	
decoratorsnodes
isinstancer   func	as_stringr
   rootname)nodedecorator_namesdecorator_attributeinferreds       ;/usr/lib/python3/dist-packages/astroid/brain/brain_attrs.pyis_decorated_with_attrsr   +   s{    ??#44 )40"5":":((*o=12,,0@@     r   Nc                 :   t        |       g| j                  d<   | j                  D ]  }t        |t        t
        f      st        |j                  t              r+|j                  j                  j                         t        vr_`t        |d      r|j                  n|j                  g}|D ]i  }t        |j                  |j                  |      }t        |t               s6|g| j                  |j"                  <   |g| j$                  |j"                  <   k  y)zhGiven that the ClassNode has an attr decorator,
    rewrite class attributes as instance attributes
    )parent__attrs_attrs__targets)lineno
col_offsetr   N)r   localsbodyr   r   r   valuer   r   r   ATTRIB_NAMEShasattrr!   targetr"   r#   r   r   instance_attrs)r   cdef_body_noder!   r)   rhs_nodes        r   attr_attributes_transformr-   ;   s    '.T&:%;DKK!")) >.69*=>n**D1##((224LH ~y1 "" ''( 	
  	>F%,,)44%H
 &*- -5:FKK(4<:##FKK0	>>r   managerc                 B    | j                  t        t        t               y )N)register_transformr	   r-   r   )r.   s    r   registerr1   ^   s    +-Dr   )__doc__astroid.managerr   astroid.nodes.node_classesr   r   r   r   r   astroid.nodes.scoped_nodesr	   astroid.utilr
   	frozensetr'   ATTRS_NAMESboolr   r-   r1    r   r   <module>r;      ss   
 + S S / #
   3> $   >H  >  >Fn  r   