B
    ZC                 @   sT   d dl mZ d dlmZ dd Zdd Zdd ZG d	d
 d
eZG dd deZ	dS )    )ast)pycompatc             C   s   t | }t||S )z1Return the line which is visible from all `lines`)ast_suite_treefind_visible_for_suite)nodelinesroot r	   3lib/python3.7/site-packages/rope/refactor/suites.pyfind_visible   s    r   c             C   s"  t |dkr|d S |d }t| |dd  }| |}| |}dd }||r^||s^|S ||sr||rr|S ||s||sd S xt||kr|j|jkr| | k r| }|j}q| | kr| }|j}q| }| }|j}|j}qW ||krt||S t| | S )N   r   c             S   s   | d k	o| j  S )N)ignored)suiter	   r	   r
   valid   s    z%find_visible_for_suite.<locals>.valid)lenr   
find_suiteparent
_get_level	get_startmin)r   r   Zline1Zline2Zsuite1Zsuite2r   r	   r	   r
   r      s6    




r   c             C   s"   t | dr| j}nd}t| j|S )Nlinenor   )hasattrr   Suitebody)r   r   r	   r	   r
   r   ,   s    
r   c               @   sF   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S )r   NFc             C   s"   || _ || _|| _d | _|| _d S )N)r   r   child_nodes	_childrenr   )selfr   r   r   r   r	   r	   r
   __init__6   s
    zSuite.__init__c             C   s"   | j d kr| jr|  S dS | jS )Nr   )r   r   local_startr   )r   r	   r	   r
   r   =   s
    
zSuite.get_startc             C   s<   | j d kr6t| }x| jD ]}t|| qW |j| _ | j S )N)r   _SuiteWalkerr   r   walksuites)r   Zwalkerchildr	   r	   r
   get_childrenE   s    
zSuite.get_childrenc             C   s   | j d jS )Nr   )r   r   )r   r	   r	   r
   r   M   s    zSuite.local_startc             C   s.   | j d j}|  r*t||  d  }|S )N)r   r   r#   max	local_end)r   endr	   r	   r
   r&   P   s    zSuite.local_endc             C   sL   |d krd S x:|   D ].}| |  kr6| krn q||S qW | S )N)r#   r   r&   r   )r   liner"   r	   r	   r
   r   V   s     zSuite.find_suitec             C   s   | j d krdS | j  d S )Nr   r   )r   r   )r   r	   r	   r
   r   ^   s    
zSuite._get_level)NF)
__name__
__module____qualname__r   r   r#   r   r&   r   r   r	   r	   r	   r
   r   4   s   
r   c               @   sd   e Z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d Zdd Zdd ZdS )r   c             C   s   || _ g | _d S )N)r   r!   )r   r   r	   r	   r
   r   f   s    z_SuiteWalker.__init__c             C   s   |  | d S )N)_add_if_like_node)r   r   r	   r	   r
   _Ifj   s    z_SuiteWalker._Ifc             C   s   |  | d S )N)r,   )r   r   r	   r	   r
   _Form   s    z_SuiteWalker._Forc             C   s   |  | d S )N)r,   )r   r   r	   r	   r
   _Whilep   s    z_SuiteWalker._Whilec             C   s   | j t|j|j| j d S )N)r!   appendr   r   r   r   )r   r   r	   r	   r
   _Withs   s    z_SuiteWalker._Withc             C   s   d}t |jdkr^tjr,t|jd tj}n2tjr^yt|j	d tj
}W n tk
r\   Y nX |r~| tjrp|n|jd  n| jt|j|j| j | jt|j|j| j d S )NFr   r   )r   	finalbodyr   ZPY2
isinstancer   r   Z	TryExceptZPY3handlersZExceptHandler
IndexError
_TryExceptr!   r0   r   r   r   )r   r   Zproceed_to_except_handlerr	   r	   r
   _TryFinallyv   s    z_SuiteWalker._TryFinallyc             C   s(   t |jdkr| | n
| | d S )Nr   )r   r2   r7   r6   )r   r   r	   r	   r
   _Try   s    z_SuiteWalker._Tryc             C   sh   | j t|j|j| j x(|jD ]}| j t|j|j| j q"W |jrd| j t|j|j| j d S )N)r!   r0   r   r   r   r   r4   orelse)r   r   Zhandlerr	   r	   r
   r6      s
    z_SuiteWalker._TryExceptc             C   s>   | j t|j|j| j |jr:| j t|j|j| j d S )N)r!   r0   r   r   r   r   r9   )r   r   r	   r	   r
   r,      s    z_SuiteWalker._add_if_like_nodec             C   s"   | j t|j|j| jdd d S )NT)r   )r!   r0   r   r   r   r   )r   r   r	   r	   r
   _FunctionDef   s    z_SuiteWalker._FunctionDefc             C   s"   | j t|j|j| jdd d S )NT)r   )r!   r0   r   r   r   r   )r   r   r	   r	   r
   	_ClassDef   s    z_SuiteWalker._ClassDefN)r)   r*   r+   r   r-   r.   r/   r1   r7   r8   r6   r,   r:   r;   r	   r	   r	   r
   r   d   s   r   N)
Z	rope.baser   Zrope.base.utilsr   r   r   r   objectr   r   r	   r	   r	   r
   <module>   s   !0