
    Æe                      l    d dl mZ d dlmZ d Zd Zd Z G d d      Z G d d	ej                        Z	y
)    )chain)astc                 0    t        |       }t        ||      S )z1Return the line which is visible from all `lines`)ast_suite_treefind_visible_for_suite)nodelinesroots      6/usr/lib/python3/dist-packages/rope/refactor/suites.pyfind_visibler      s    $D!$..    c                 X   t        |      dk(  r|d   S |d   }t        | |dd        }| j                  |      }| j                  |      }d } ||      r
 ||      s|S  ||      s
 ||      r|S  ||      s	 ||      sy ||k7  r|j                  |j                  k7  r|j	                         |j	                         k  r|j                         }|j                  }nv|j	                         |j	                         kD  r|j                         }|j                  }n8|j                         }|j                         }|j                  }|j                  }||k7  r|j                  |j                  k7  r||k(  rt        ||      S t        |j                         |j                               S )N   r   c                 (    | d uxr | j                    S Nignored)suites    r   validz%find_visible_for_suite.<locals>.valid   s    D 6%66r   )lenr   
find_suiteparent
_get_level	get_startmin)r
   r	   line1line2suite1suite2r   s          r   r   r      s~   
5zQQx!HE"4qr3E__U#F__U#F7 V}U6]=U6]=v
F
v}}=!2!2!44$$&E]]F 6#4#4#66$$&E]]F$$&E$$&E]]F]]F F
v}}= 5%  v!6#3#3#566r   c                 d    t        | d      r| j                  }nd}t        | j                  |      S )Nlinenor   )hasattrr!   Suitebody)r   r!   s     r   r   r   .   s+    tXF##r   c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
r#   Nc                 J    || _         || _        || _        d | _        || _        y r   )r   r!   child_nodes	_childrenr   )selfr'   r!   r   r   s        r   __init__zSuite.__init__7   s&    &r   c                 l    | j                   | j                  r| j                         S y| j                  S Nr   )r   r'   local_startr!   r)   s    r   r   zSuite.get_start>   s1    ;;'')){{r   c                     | j                   >t        |       }| j                  D ]  }|j                  |        |j                  | _         | j                   S r   )r(   _SuiteWalkerr'   visitsuites)r)   walkerchilds      r   get_childrenzSuite.get_childrenF   sL    >>!!$'F)) $U#$#]]DN~~r   c                 4    | j                   d   j                  S )Nr   )r'   r!   r.   s    r   r-   zSuite.local_startN   s    ")))r   c                     | j                   d   j                  }| j                         r+t        || j                         d   j	                               }|S )N)r'   r!   r5   max	local_end)r)   ends     r   r:   zSuite.local_endQ   sL    r"))c4,,.r2<<>?C
r   c                     |y | j                         D ]?  }|j                         |cxk  r|j                         k  s+n .|j                  |      c S  | S r   )r5   r-   r:   r   )r)   liner4   s      r   r   zSuite.find_suiteW   sW    <&&( 	.E  "d?eoo.??''--	. r   c                 V    | j                   y| j                   j                         dz   S )Nr   r   )r   r   r.   s    r   r   zSuite._get_level_   s'    ;;{{%%'!++r   )NF)
__name__
__module____qualname__r*   r   r5   r-   r:   r   r    r   r   r#   r#   6   s%    *,r   r#   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)r0   c                      || _         g | _        y r   )r   r2   )r)   r   s     r   r*   z_SuiteWalker.__init__f   s    
r   c                 &    | j                  |       y r   _add_if_like_noder)   r   s     r   _Ifz_SuiteWalker._Ifj       t$r   c                 &    | j                  |       y r   rF   rH   s     r   _Forz_SuiteWalker._Form   rJ   r   c                 &    | j                  |       y r   rF   rH   s     r   _Whilez_SuiteWalker._Whilep   rJ   r   c                     | j                   j                  t        |j                  |j                  | j
                               y r   r2   appendr#   r$   r!   r   rH   s     r   _Withz_SuiteWalker._Withs   )    5DKKDEr   c                     | j                   j                  t        |j                  |j                  | j
                               y r   rP   rH   s     r   
_AsyncWithz_SuiteWalker._AsyncWithv   rS   r   c           	         t        t        j                  |j                  D cg c]  }|j                  g|j
                  z    c}            }| j                  j                  t        ||j                  | j                               y c c}w r   )listr   from_iterablecasespatternr$   r2   rQ   r#   r!   r   )r)   r   casecase_bodiess       r   _Matchz_SuiteWalker._Matchy   sc    

 S$,,$))!; ST
 	5dkk4::FG !Ts   !B
c                    d}t        |j                        dk(  r(	 t        |j                  d   t        j
                        }|r| j                  |       nD| j                  j                  t        |j                  |j                  | j                               | j                  j                  t        |j                  |j                  | j                               y # t        $ r Y w xY w)NFr   r   )r   	finalbody
isinstancehandlersr   ExceptHandler
IndexError
_TryExceptr2   rQ   r#   r$   r!   r   )r)   r   proceed_to_except_handlers      r   _TryFinallyz_SuiteWalker._TryFinally   s    $)!t~~!#,6MM!$c&7&7-)
 %OOD!KKuTYYTZZHI5djjIJ  s   'C   	C,+C,c                 z    t        |j                        dk(  r| j                  |       y | j                  |       y r,   )r   r_   rf   rd   rH   s     r   _Tryz_SuiteWalker._Try   s-    t~~!#T"OOD!r   c                    | j                   j                  t        |j                  |j                  | j
                               |j                  D ]F  }| j                   j                  t        |j                  |j                  | j
                               H |j                  rE| j                   j                  t        |j                  |j                  | j
                               y y r   )r2   rQ   r#   r$   r!   r   ra   orelse)r)   r   handlers      r   rd   z_SuiteWalker._TryExcept   s    5DKKDE}} 	MGKKuW\\4;;

KL	M;;KKuT[[$++tzzJK r   c                 .   | j                   j                  t        |j                  |j                  | j
                               |j                  rE| j                   j                  t        |j                  |j                  | j
                               y y r   )r2   rQ   r#   r$   r!   r   rj   rH   s     r   rG   z_SuiteWalker._add_if_like_node   s\    5DKKDE;;KKuT[[$++tzzJK r   c                     | j                   j                  t        |j                  |j                  | j
                  d             y NTr   rP   rH   s     r   _FunctionDefz_SuiteWalker._FunctionDef   +    5DKKTRSr   c                     | j                   j                  t        |j                  |j                  | j
                  d             y rn   rP   rH   s     r   _AsyncFunctionDefz_SuiteWalker._AsyncFunctionDef   rp   r   c                     | j                   j                  t        |j                  |j                  | j
                  d             y rn   rP   rH   s     r   	_ClassDefz_SuiteWalker._ClassDef   rp   r   N)r?   r@   rA   r*   rI   rL   rN   rR   rU   r]   rf   rh   rd   rG   ro   rr   rt   rB   r   r   r0   r0   e   sQ    %%%FFHK"LL
TTTr   r0   N)
	itertoolsr   	rope.baser   r   r   r   r#   RopeNodeVisitorr0   rB   r   r   <module>rx      s<     /7D$,, ,,^BT3&& BTr   