B
    –ìZs  ã               @   s(   d dl mZ dd„ ZG dd„ deƒZdS )é    )Úastc             C   s   t ƒ }t | |¡ |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]``.

    )Ú_NodeNameCollectorr   ÚwalkÚnames)ÚnodeÚvisitor© r   ú1lib/python3.7/site-packages/rope/base/astutils.pyÚget_name_levels   s    r
   c               @   sV   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r   Nc             C   s   g | _ || _d| _d S )Nr   )r   ÚlevelsÚindex)Úselfr   r   r   r	   Ú__init__   s    z_NodeNameCollector.__init__c             C   sB   g }| j d k	r$t| j ƒ}| | j¡ |  jd7  _|  ||¡ d S )Né   )r   ÚlistÚappendr   Ú_added)r   r   Ú
new_levelsr   r   r	   Ú	_add_node   s    

z_NodeNameCollector._add_nodec             C   s    t |dƒr| j |j|f¡ d S )NÚid)Úhasattrr   r   r   )r   r   r   r   r   r	   r   $   s    
z_NodeNameCollector._addedc             C   s   |   |¡ d S )N)r   )r   r   r   r   r	   Ú_Name(   s    z_NodeNameCollector._Namec             C   s   | j  |jg f¡ d S )N)r   r   Úname)r   r   r   r   r	   Ú_ExceptHandler+   s    z!_NodeNameCollector._ExceptHandlerc             C   sl   g }| j d k	r$t| j ƒ}| | j¡ |  jd7  _t|ƒ}xt |¡D ]}t ||¡ qFW | j 	|j¡ d S )Nr   )
r   r   r   r   r   r   Zget_child_nodesr   r   Úextend)r   r   r   r   Zchildr   r   r	   Ú_Tuple.   s    

z_NodeNameCollector._Tuplec             C   s   |   |¡ d S )N)r   )r   r   r   r   r	   Ú
_Subscript9   s    z_NodeNameCollector._Subscriptc             C   s   |   |¡ d S )N)r   )r   r   r   r   r	   Ú
_Attribute<   s    z_NodeNameCollector._Attributec             C   s   |   |¡ d S )N)r   )r   r   r   r   r	   Ú_Slice?   s    z_NodeNameCollector._Slice)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   r   r   r	   r      s   
r   N)Z	rope.baser   r
   Úobjectr   r   r   r   r	   Ú<module>   s   