
    c                      p    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	d
S )    )chain)astc                 @    t          |           }t          ||          S )z1Return the line which is visible from all `lines`)ast_suite_treefind_visible_for_suite)nodelinesroots      4lib/python3.11/site-packages/rope/refactor/suites.pyfind_visibler      s    $D!$...    c                    t          |          dk    r|d         S |d         }t          | |dd                    }|                     |          }|                     |          }d } ||          r ||          s|S  ||          s ||          r|S  ||          s ||          sd S ||k    r|j        |j        k    r|                                |                                k     r|                                }|j        }n||                                |                                k    r|                                }|j        }n6|                                }|                                }|j        }|j        }||k    r|j        |j        k    ||k    rt          ||          S t          |                                |                                          S )N   r   c                     | d uo| 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   
5zzQ Qx!HE"4qrr33E__U##F__U##F7 7 7 uV}} UU6]] 5== UU6]] 5== v t
F
 #v}= #!2!2!4!44 
	#$$&&E]FF  6#4#4#6#66 	#$$&&E]FF$$&&E$$&&E]F]F F
 #v}= #  !5%   v!!6#3#3#5#5666r   c                 `    t          | d          r| j        }nd}t          | j        |          S )Nlinenor   )hasattrr!   Suitebody)r   r!   s     r   r   r   .   s4    tX F###r   c                   :    e Zd Zd
dZd Zd Zd Zd Zd Zd	 Z	dS )r#   NFc                 L    || _         || _        || _        d | _        || _        d S r   )r   r!   child_nodes	_childrenr   )selfr'   r!   r   r   s        r   __init__zSuite.__init__7   s*    &r   c                 X    | j         | j        r|                                 S dS | j        S Nr   )r   r'   local_startr!   r)   s    r   r   zSuite.get_start>   s6    ; 	 '')))q{r   c                     | j         :t          |           }| j        D ]}|                    |           |j        | _         | j         S r   )r(   _SuiteWalkerr'   visitsuites)r)   walkerchilds      r   get_childrenzSuite.get_childrenF   sQ    > 	+!$''F) $ $U#####]DN~r   c                 &    | j         d         j        S )Nr   )r'   r!   r.   s    r   r-   zSuite.local_startN   s    "))r   c                     | j         d         j        }|                                 r:t          ||                                 d                                                   }|S )N)r'   r!   r5   max	local_end)r)   ends     r   r:   zSuite.local_endQ   sX    r") 	@c4,,..r2<<>>??C
r   c                     |d S |                                  D ]M}|                                |cxk    r|                                k    rn 6|                    |          c S N| S r   )r5   r-   r:   r   )r)   liner4   s      r   r   zSuite.find_suiteW   s     	4&&(( 	. 	.E  ""d . . . .eoo.?.? . . . . .''-----.r   c                 L    | j         dS | j                                         dz   S )Nr   r   )r   r   r.   s    r   r   zSuite._get_level_   s*    ; 	1{%%''!++r   )NF)
__name__
__module____qualname__r*   r   r5   r-   r:   r   r    r   r   r#   r#   6   s               * * *    , , , , ,r   r#   c                   b    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dS )r0   c                 "    || _         g | _        d S r   )r   r2   )r)   r   s     r   r*   z_SuiteWalker.__init__f   s    
r   c                 0    |                      |           d S r   _add_if_like_noder)   r   s     r   _Ifz_SuiteWalker._Ifj       t$$$$$r   c                 0    |                      |           d S r   rF   rH   s     r   _Forz_SuiteWalker._Form   rJ   r   c                 0    |                      |           d S r   rF   rH   s     r   _Whilez_SuiteWalker._Whilep   rJ   r   c                 v    | j                             t          |j        |j        | j                             d S r   r2   appendr#   r$   r!   r   rH   s     r   _Withz_SuiteWalker._Withs   0    5DKDDEEEEEr   c                 v    | j                             t          |j        |j        | j                             d S r   rP   rH   s     r   
_AsyncWithz_SuiteWalker._AsyncWithv   rS   r   c                     t          t          j        d |j        D                                 }| j                            t          ||j        | j                             d S )Nc                 .    g | ]}|j         g|j        z   S rB   )patternr$   ).0cases     r   
<listcomp>z'_SuiteWalker._Match.<locals>.<listcomp>{   s#     S S S$,$)!; S S Sr   )	listr   from_iterablecasesr2   rQ   r#   r!   r   )r)   r   case_bodiess      r   _Matchz_SuiteWalker._Matchy   s^     S S
 S S STT
 
 	5dk4:FFGGGGGr   c                    d}t          |j                  dk    r7	 t          |j        d         t          j                  }n# t          $ r Y nw xY w|r|                     |           n8| j        	                    t          |j        |j        | j                             | j        	                    t          |j        |j        | j                             d S )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M!$c&7- -))    $ 	JOOD!!!!KuTYTZHHIII5djIIJJJJJs   %A 
AAc                     t          |j                  dk    r|                     |           d S |                     |           d S r,   )r   rb   ri   rg   rH   s     r   _Tryz_SuiteWalker._Try   sK    t~!# 	"T"""""OOD!!!!!r   c                 |   | j                             t          |j        |j        | j                             |j        D ]:}| j                             t          |j        |j        | j                             ;|j        r:| j                             t          |j        |j        | j                             d S d S r   )r2   rQ   r#   r$   r!   r   rd   orelse)r)   r   handlers      r   rg   z_SuiteWalker._TryExcept   s    5DKDDEEE} 	M 	MGKuW\4;
KKLLLL; 	LKuT[$+tzJJKKKKK	L 	Lr   c                     | j                             t          |j        |j        | j                             |j        r:| j                             t          |j        |j        | j                             d S d S r   )r2   rQ   r#   r$   r!   r   rm   rH   s     r   rG   z_SuiteWalker._add_if_like_node   so    5DKDDEEE; 	LKuT[$+tzJJKKKKK	L 	Lr   c                 z    | j                             t          |j        |j        | j        d                     d S NTr   rP   rH   s     r   _FunctionDefz_SuiteWalker._FunctionDef   5    5DKTRRRSSSSSr   c                 z    | j                             t          |j        |j        | j        d                     d S rq   rP   rH   s     r   _AsyncFunctionDefz_SuiteWalker._AsyncFunctionDef   rs   r   c                 z    | j                             t          |j        |j        | j        d                     d S rq   rP   rH   s     r   	_ClassDefz_SuiteWalker._ClassDef   rs   r   N)r?   r@   rA   r*   rI   rL   rN   rR   rU   r`   ri   rk   rg   rG   rr   ru   rw   rB   r   r   r0   r0   e   s         % % %% % %% % %F F FF F FH H HK K K" " "L L LL L L
T T TT T TT T T T Tr   r0   N)
	itertoolsr   	rope.baser   r   r   r   r#   RopeNodeVisitorr0   rB   r   r   <module>r{      s               / / /7 7 7D$ $ $,, ,, ,, ,, ,, ,, ,, ,,^BT BT BT BT BT3& BT BT BT BT BTr   