
    c7                     R   d dl mZmZmZmZ d dlmZ d dlmZ  G d d          Z	 G d de	          Z
 G d d	e	          Z G d
 de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Zd ZdS )    )
exceptionslibutils	pyobjectsstdmods)occurrences)
importinfoc                   &    e Zd Zd Zd Zd Zd ZdS )ImportInfoVisitorc                     	 d|j         j        j        z   }t          | |          } |||j                   S # t          j        $ r Y d S w xY w)Nvisit)import_info	__class____name__getattrr   ModuleNotFoundError)selfimport_method_namemethods       Alib/python3.11/site-packages/rope/refactor/importutils/actions.pydispatchzImportInfoVisitor.dispatch   sc    	!G$7$A$JJKT;//F6'7#6777- 	 	 	DD	s   47 A
	A
c                     d S N r   import_stmtr   s      r   visitEmptyImportz"ImportInfoVisitor.visitEmptyImport           c                     d S r   r   r   s      r   visitNormalImportz#ImportInfoVisitor.visitNormalImport   r   r   c                     d S r   r   r   s      r   visitFromImportz!ImportInfoVisitor.visitFromImport   r   r   N)r   
__module____qualname__r   r   r!   r#   r   r   r   r
   r
      sP                  r   r
   c                   &    e Zd Zd Zd Zd Zd ZdS )RelativeToAbsoluteVisitorc                 d    g | _         || _        || _        t          j        ||          | _        d S r   )to_be_absoluteprojectfolderr   ImportContextcontextr   r*   current_folders      r   __init__z"RelativeToAbsoluteVisitor.__init__   s0     $!/HHr   c                    | j                             |                     |                     g }|j        D ]k\  }}| j                            || j                  }||                    ||f           @t          j	        |          }|                    ||f           l|
                    ||j                  st          j        |          |_        d S d S Nr+   )r)   extend_get_relative_to_absolute_listnames_and_aliasesr*   find_moduler+   appendr   modname_are_name_and_alias_lists_equalr   NormalImportr   )r   r   r   	new_pairsnamealiasresourceabsolute_names           r   r!   z+RelativeToAbsoluteVisitor.visitNormalImport    s    ""4#F#F{#S#STTT	&8 	5 	5KD%|//T[/IIH   $///$,X66MmU34444::{4
 
 	I '1&=i&H&HK###	I 	Ir   c                     g }|j         D ]]\  }}|| j                            || j                  }|,t	          j        |          }||k    r|                    ||f           ^|S r2   )r6   r*   r7   r+   r   r9   r8   )r   r   resultr=   r>   r?   r@   s          r   r5   z8RelativeToAbsoluteVisitor._get_relative_to_absolute_list/   s    &8 	5 	5KD% |//T[/IIH $,X66M$ 5t]3444r   c                     |                     | j                  }|d S t          j        |          }|j        |k    r"t          j        |d|j                  |_        d S d S Nr   )	get_imported_resourcer-   r   r9   module_namer   
FromImportr6   r   )r   r   r   r?   r@   s        r   r#   z)RelativeToAbsoluteVisitor.visitFromImport<   ss    44T\BB 	4 (22"m3 	&0&;q+"?' 'K###	 	r   N)r   r$   r%   r0   r!   r5   r#   r   r   r   r'   r'      sV        I I II I I      r   r'   c                   &    e Zd Zd Zd Zd Zd ZdS )FilteringVisitorc                     g | _         || _        |                     |          | _        t	          j        ||          | _        d S r   )r)   r*   _transform_can_select
can_selectr   r,   r-   r   r*   r+   rL   s       r   r0   zFilteringVisitor.__init__H   s>     44Z@@!/@@r   c                     fd}|S )Nc                 &    | }||} |          S r   r   )r=   r>   importedrL   s      r   can_select_name_and_aliaszIFilteringVisitor._transform_can_select.<locals>.can_select_name_and_aliasO   s%    H ! :h'''r   r   )r   rL   rQ   s    ` r   rK   z&FilteringVisitor._transform_can_selectN   s$    	( 	( 	( 	( 	( )(r   c                 R      fd|j         D             }t          j        |          S )Nc                 J    g | ]\  }}                     ||          ||f S r   )rL   ).0r=   r>   r   s      r   
<listcomp>z6FilteringVisitor.visitNormalImport.<locals>.<listcomp>X   sE     
 
 
etU++
5M
 
 
r   )r6   r   r;   )r   r   r   r<   s   `   r   r!   z"FilteringVisitor.visitNormalImportW   sA    
 
 
 
*<
 
 
	
 &y111r   c                    t          |          r|S g }|                                rV|                    | j                  D ]:}|                     |d           r"|                    |j        d                     n;n:|j        D ]2\  }}|                     ||          r|                    ||f           3t          j        |j	        |j
        |          S rD   )
_is_futureis_star_importget_imported_namesr-   rL   r8   r6   r   rG   rF   level)r   r   r   r<   r=   r>   s         r   r#   z FilteringVisitor.visitFromImport_   s    k"" 		%%'' 	4#66t|DD  ??4.. $$[%B1%EFFFE  +< 4 4e??4// 4$$dE]333$#[%6	
 
 	
r   N)r   r$   r%   r0   rK   r!   r#   r   r   r   rI   rI   G   sS        A A A) ) )2 2 2
 
 
 
 
r   rI   c                       e Zd Zd Zd ZdS )RemovingVisitorc                 N    g | _         || _        t          |||          | _        d S r   )r)   r*   rI   	filteringrM   s       r   r0   zRemovingVisitor.__init__r   s(     )'6:FFr   c                 P    | j                             |          }|	||_        d S d S r   )r^   r   r   r   r   rB   s      r   r   zRemovingVisitor.dispatchw   s7    ((11 	)"(G	) 	)r   N)r   r$   r%   r0   r   r   r   r   r\   r\   q   s5        G G G
) ) ) ) )r   r\   c                   *    e Zd ZdZd Zd Zd Zd ZdS )AddingVisitorzA class for adding imports

    Given a list of `ImportInfo`, it tries to add each import to the
    module and returns `True` and gives up when an import can be added
    to older ones.

    c                 0    || _         || _        d | _        d S r   )r*   import_listr   )r   r*   rd   s      r   r0   zAddingVisitor.__init__   s    &r   c                 d    | j         D ]'}|| _        t                              | |          r dS (d S )NT)rd   r   r
   r   )r   r   r   s      r   r   zAddingVisitor.dispatch   sJ    + 	 	K*D ))$88 tt	 	r   c                 &   t          | j        |j                  sdS t          |j                  t          | j        j                  cxk    rdk    rn n|j        d         }| j        j        d         }|d         |d         cxk    r[n nX|d                             |d         dz             rdS |d                             |d         dz             r| j        |_        dS | j                            |j        | j        j                  rdS d S )NF   r   .T)
isinstancer   r   lenr6   
startswithr:   )r   r   r   	imported1	imported2s        r   r!   zAddingVisitor.visitNormalImport   s]   $*K,ABB 	5 -..4#566	  	  	  	  	  	  	  	  	 
 $5a8I(:1=I|y|                Q<**9Q<#+=>>  4Q<**9Q<#+=>>  .2.>K+4 ;;)4+;+M
 
 	 4	 	r   c                 >   t          | j        |j                  r|j        | j        j        k    r|j        | j        j        k    r|                                rdS | j                                        r| j        |_        dS | j        j                            d          r| j        j	        |j	        k    S t          |j	                  }| j        j	        D ]}||vr|                    |           t          j        |j        |j        |          |_        dS d S d S d S )NTsplit_imports)ri   r   r   rF   rZ   rX   r*   prefsgetr6   listr8   r   rG   )r   r   r   r<   pairs        r   r#   zAddingVisitor.visitFromImport   sK   t')>??	'4+;+GG	 !T%5%;;	
 ))++ t..00 *.*:'t|!%%o66 $6+:WW [:;;I(: + +y( +$$T***&0&;'):I' 'K# 4+	 	 	 	 	 	r   N)r   r$   r%   __doc__r0   r   r!   r#   r   r   r   rb   rb   }   sZ              
    0    r   rb   c                        e Zd Zd Zd Zd ZdS )ExpandStarsVisitorc                 t    || _         t          |||          | _        t          j        ||          | _        d S r   )r*   rI   r^   r   r,   r-   rM   s       r   r0   zExpandStarsVisitor.__init__   s4    )'6:FF!/@@r   c                 :    | j                             |           d S r   )r^   r   r   s      r   r!   z$ExpandStarsVisitor.visitNormalImport   s    ,,,,,r   c                 .   |                                 rfd |                    | j                  D             }t          j        |j        |j        |          }| j                            d |          |_	        d S | j        
                    |           d S )Nc                     g | ]}|d fS r   r   )rT   r=   s     r   rU   z6ExpandStarsVisitor.visitFromImport.<locals>.<listcomp>   s)       !%t  r   )rX   rY   r-   r   rG   rF   rZ   r^   r#   r   r   )r   r   r   r<   
new_imports        r   r#   z"ExpandStarsVisitor.visitFromImport   s    %%'' 		1 )4)G)G)U)U  I $.'):I J '+n&D&DT:&V&VK###N##K00000r   N)r   r$   r%   r0   r!   r#   r   r   r   rv   rv      sD        A A A
- - -
1 
1 
1 
1 
1r   rv   c                   &    e Zd Zd Zd Zd Zd ZdS )SelfImportVisitorc                     || _         || _        || _        t                      | _        t                      | _        t          j        ||          | _        d S r   )	r*   r+   r?   setto_be_fixedto_be_renamedr   r,   r-   )r   r*   r/   r?   s       r   r0   zSelfImportVisitor.__init__   sG    $ 55 UU!/HHr   c                 \   g }|j         D ]k\  }}| j                            || j                  }|,|| j        k    r!|}||}| j                            |           T|                    ||f           l|                    ||j                   st          j
        |          |_        d S d S r2   )r6   r*   r7   r+   r?   r   addr8   r:   r   r;   r   )r   r   r   r<   r=   r>   r?   rP   s           r   r!   z#SelfImportVisitor.visitNormalImport   s    	&8 	0 	0KD%|//T[/IIH 0DM(A 0 %$H $$X....  $////::{4
 
 	I '1&=i&H&HK###	I 	Ir   c                    |                     | j                  }|d S || j        k    r|                     ||           d S | j                            |          }g }|j        D ]\  }}	 ||                                         }t          |t          j
                  r>|                                | j        k    r!|}	||}	| j                            |	           n|                    ||f           # t          j        $ r |                    ||f           Y w xY w|                    ||j                  s't%          j        |j        |j        |          |_        d S d S r   )rE   r-   r?   _importing_names_from_selfr*   get_pymoduler6   
get_objectri   r   PyModuleget_resourcer   r   r8   r   AttributeNotFoundErrorr:   r   rG   rF   rZ   r   )
r   r   r   r?   pymoduler<   r=   r>   rB   rP   s
             r   r#   z!SelfImportVisitor.visitFromImport   s   44T\BB 	Ft}$ 	++KEEEF<,,X66	&8 	0 	0KD%0!$2244vy'9::	4++-->	4  $H )#($((2222$$dE]3334 0 0 0  $/////0::{4
 
 	 '1&;'):I' 'K###	 	s   +B	C55&DDc                     |                                 s+|j        D ]#\  }}|| j                            ||f           $|                                 d S r   )rX   r6   r   r   empty_import)r   r   r   r=   r>   s        r   r   z,SelfImportVisitor._importing_names_from_self  sh    ))++ 	:*< : :e :&**E4=999  """""r   N)r   r$   r%   r0   r!   r#   r   r   r   r   r}   r}      sV        I I II I I   ># # # # #r   r}   c                   &    e Zd Zd Zd Zd Zd ZdS )SortingVisitorc                     || _         || _        t                      | _        t                      | _        t                      | _        t                      | _        t          j        ||          | _	        d S r   )
r*   r+   r   standardthird_party
in_projectfuturer   r,   r-   r.   s      r   r0   zSortingVisitor.__init__  sU    $55%%ee!/HHr   c                     |j         rJ|j         d         \  }}| j                            || j                  }|                     |||           d S d S )Nr   r3   )r6   r*   r7   r+   _check_imported_resource)r   r   r   r=   r>   r?   s         r   r!   z SortingVisitor.visitNormalImport#  se    ( 	G%7:KD%|//T[/IIH))+xFFFFF	G 	Gr   c                 r    |                     | j                  }|                     |||j                   d S r   )rE   r-   r   rF   )r   r   r   r?   s       r   r#   zSortingVisitor.visitFromImport)  s8    44T\BB%%k8[=TUUUUUr   c                    |j         }|,|j        | j        k    r| j                            |           d S t	          |          r| j                            |           d S |                    d          d         t          j                    v r| j	                            |           d S | j
                            |           d S )Nrh   r   )r   r*   r   r   rW   r   splitr   standard_modulesr   r   )r   r   r?   imported_nameinfos        r   r   z'SortingVisitor._check_imported_resource-  s    & 	.H$4$D 	.O,,,,, 	.KOOK(((((  %%a(G,D,F,FF 	.Mk*****  -----r   N)r   r$   r%   r0   r!   r#   r   r   r   r   r   r     sY        I I IG G GV V V	. 	. 	. 	. 	.r   r   c                        e Zd Zd Zd Zd ZdS )LongImportVisitorc                 r    || _         || _        t                      | _        || _        || _        g | _        d S r   )maxdots	maxlengthr   r   r/   r*   new_imports)r   r/   r*   r   r   s        r   r0   zLongImportVisitor.__init__:  s9    " UU,r   c           	      <   |j         D ]\  }}||                     |          rw| j                            |           |                    d          }|d |         }||dz   d          }| j                            t          j        |d|d ff                     d S )Nrh   rg   r   )	r6   _is_longr   r   rindexr   r8   r   rG   )r   r   r   r=   r>   last_dotfrom_rP   s           r   r!   z#LongImportVisitor.visitNormalImportB  s    &8 	 	KD% t!4!4 "&&t,,,;;s++YhY1/ '')%h5E4GHH  	 	r   c                 v    |                     d          | j        k    pd|v ot          |          | j        k    S )Nrh   )countr   rj   r   )r   r=   s     r   r   zLongImportVisitor._is_longM  s9    zz#- 
4K6CII6	
r   N)r   r$   r%   r0   r!   r   r   r   r   r   r   9  sA          	 	 	
 
 
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )RemovePyNameVisitorc                 V    || _         || _        t          j        ||          | _        d S r   )r   pynamer   r,   r-   )r   r*   r   r   r+   s        r   r0   zRemovePyNameVisitor.__init__T  s(     !/@@r   c                 8   g }|                                 se|j        D ]]\  }}	 | j        |p|         }t          j        | j        |          r0n# t          j        $ r Y nw xY w|                    ||f           ^t          j
        |j        |j        |          S r   )rX   r6   r   r   same_pynamer   r   r   r8   r   rG   rF   rZ   )r   r   r   r<   r=   r>   r   s          r   r#   z#RemovePyNameVisitor.visitFromImportY  s    	))++ 	0*< 0 0e!]5=D9F".t{FCC ! !!8   D  $////$#[%6	
 
 	
s   )AA! A!c                 R    t                               | |          }|	||_        d S d S r   )r
   r   r   r`   s      r   r   zRemovePyNameVisitor.dispatchh  s7    "++D':: 	)"(G	) 	)r   N)r   r$   r%   r0   r#   r   r   r   r   r   r   S  sD        A A A

 
 
) ) ) ) )r   r   c                 L    t          | t          j                  o
| j        dk    S )N
__future__)ri   r   rG   rF   )r   s    r   rW   rW   n  s"    dJ122Wt7G<7WWr   N)	rope.baser   r   r   r   rope.refactorr   rope.refactor.importutilsr   r
   r'   rI   r\   rb   rv   r}   r   r   r   rW   r   r   r   <module>r      s#   > > > > > > > > > > > > % % % % % % 0 0 0 0 0 0       &+ + + + + 1 + + +\'
 '
 '
 '
 '
( '
 '
 '
T	) 	) 	) 	) 	)' 	) 	) 	)C C C C C% C C CL1 1 1 1 1* 1 1 1,=# =# =# =# =#) =# =# =#@. . . . .& . . .@
 
 
 
 
) 
 
 
4) ) ) ) )+ ) ) )6X X X X Xr   