
    Æex                     @    d dl mZ d Z G d dej                        Zy)    )astc                 P    t               }|j                  |        |j                  S )a*  Return a list of ``(name, level)`` tuples for assigned names

    The `level` is `None` for simple assignments and is a list of
    numbers for tuple assignments for example in::

      a, (b, c) = x

    The levels for for `a` is ``[0]``, for `b` is ``[1, 0]`` and for
    `c` is ``[1, 1]``.

    )_NodeNameCollectorvisitnames)nodevisitors     7/usr/lib/python3/dist-packages/rope/base/nameanalyze.pyget_name_levelsr      s"     !"GMM$==    c                   D    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)r   Nc                 .    g | _         || _        d| _        y )Nr   )r   levelsindex)selfr   s     r
   __init__z_NodeNameCollector.__init__   s    

r   c                     g }| j                   0t        | j                         }|j                  | j                         | xj                  dz  c_        | j	                  ||       y N   )r   listappendr   _added)r   r   
new_levelss      r
   	_add_nodez_NodeNameCollector._add_node   sL    
;;"dkk*Jdjj)

a
D*%r   c                 l    t        |d      r(| j                  j                  |j                  |f       y y )Nid)hasattrr   r   r   )r   r   r   s      r
   r   z_NodeNameCollector._added#   s,    4JJtww/0 r   c                 &    | j                  |       y Nr   r   r   s     r
   _Namez_NodeNameCollector._Name'       tr   c                 R    | j                   j                  |j                  g f       y r   )r   r   namer!   s     r
   _ExceptHandlerz!_NodeNameCollector._ExceptHandler*   s    

499b/*r   c                 `   g }| j                   0t        | j                         }|j                  | j                         | xj                  dz  c_        t	        |      }t        j                  |      D ]  }|j                  |        | j                  j                  |j                         y r   )
r   r   r   r   r   r   iter_child_nodesr   r   extend)r   r   r   r	   childs        r
   _Tuplez_NodeNameCollector._Tuple-   s    
;;"dkk*Jdjj)

a
$Z0))$/ 	!EMM% 	!

'--(r   c                 &    | j                  |       y r   r    r!   s     r
   
_Subscriptz_NodeNameCollector._Subscript8   r#   r   c                 &    | j                  |       y r   r    r!   s     r
   
_Attributez_NodeNameCollector._Attribute;   r#   r   c                 &    | j                  |       y r   r    r!   s     r
   _Slicez_NodeNameCollector._Slice>   r#   r   r   )__name__
__module____qualname__r   r   r   r"   r&   r+   r-   r/   r1    r   r
   r   r      s/    
&1+	)r   r   N)	rope.baser   r   RopeNodeVisitorr   r5   r   r
   <module>r8      s    "*,, *r   