
    cl                         d dl mZmZmZmZ d dlmZmZ  G d d          Z G d d          Z	 G d d          Z
d	 Z G d
 d          ZdS )    )astbuiltinsevaluate	pyobjects)occurrences
patchedastc                       e Zd Zd Zd ZdS )Wildcardc                     dS )z Return the name of this wildcardN selfs    7lib/python3.11/site-packages/rope/refactor/wildcards.pyget_namezWildcard.get_name             c                     dS )z0Return `True` if `suspect` matches this wildcardNr   )r   suspectargs      r   matcheszWildcard.matches	   r   r   N)__name__
__module____qualname__r   r   r   r   r   r
   r
      s2        / / /? ? ? ? ?r   r
   c                       e Zd Zd ZdS )Suspectc                 0    || _         || _        || _        d S N)namepymodulenode)r   r   r    r   s       r   __init__zSuspect.__init__   s    	 			r   N)r   r   r   r!   r   r   r   r   r      s#            r   r   c                   2    e Zd ZdZd Zd Zd	dZd Zd ZdS )
DefaultWildcarda  The default restructuring wildcard

    The argument passed to this wildcard is in the
    ``key1=value1,key2=value2,...`` format.  Possible keys are:

    * name - for checking the reference
    * type - for checking the type
    * object - for checking the object
    * instance - for checking types but similar to builtin isinstance
    * exact - matching only occurrences with the same name as the wildcard
    * unsure - matching unsure occurrences

    c                     || _         d S r   )project)r   r%   s     r   r!   zDefaultWildcard.__init__#   s    r   c                     dS )Ndefaultr   r   s    r   r   zDefaultWildcard.get_name&   s    yr    c                     t          |          }|                     ||          sdS |                     ||          sdS dS )NFT)	parse_arg_check_exact_check_object)r   r   r   argss       r   r   zDefaultWildcard.matches)   sL    ~~  w// 	5!!$00 	5tr   c                     d }d }|                     dd          }dD ]B}||v r
|}||         }|0t          | j        |||          } ||j        |j                  c S CdS )NunsureF)r   objecttypeinstance)r/   T)get_CheckObjectr%   r   r    )r   r-   r   kindexpectedr/   checkcheckers           r   r,   zDefaultWildcard._check_object2   s    (E**; 	? 	?E} '; ?&t|XtFSSSww/>>>>>? tr   c                     |j         }|                    d          r-t          |t          j                  r|j        |j        k    sdS nt          |t          j                  sdS dS )NexactFT)r    r3   
isinstancer   Nameidr   expr)r   r-   r   r    s       r   r+   zDefaultWildcard._check_exact?   sk    |88G 	dCH-- TW5L u dCH-- utr   N)r(   )	r   r   r   __doc__r!   r   r   r,   r+   r   r   r   r#   r#      sn                      r   r#   c                 :   t          | t                    r| S i }|                     d          }|D ]i}d|v rL|                    dd          }|d                                         ||d                                         <   Rd||                                <   j|S )N,=   r   T)r;   dictsplitstrip)r   resulttokenstokenpartss        r   r*   r*   J   s    #t 
FYYs^^F ) )%< 	)KKQ''E',Qx~~'7'7F58>>##$$$(F5;;==!!Mr   c                   H    e Zd ZddZd Zd Zd Zd Zdd	Zd
 Z	d Z
d ZdS )r4   r0   Fc                 d    || _         || _        || _        |                     |          | _        d S r   )r%   r5   r/   	_evaluater6   )r   r%   r6   r5   r/   s        r   r!   z_CheckObject.__init__Y   s.    	x00r   c                    |                      ||          }|| j        | j        S |                     || j        dk              rdS | j        dk    r|                     | j        |          S |                                }| j        dk    r|g}| j        dk    r|                                g}| j        dk    re|g}|                    | 	                    |                     |                    | 	                    |                                                     |D ]2}| 
                    | j                                        |          r dS 3dS )Nr   )unboundTr0   r1   r2   F)_evaluate_noder6   r/   _unsure_pynamer5   _same_pyname
get_objectget_typeextend_get_super_classes_same_pyobject)r   r   r    pynamepyobjectobjectss         r   __call__z_CheckObject.__call___   sq   $$Xt44 	T] 	;vtyF/BCC 	49 	$$T]F;;;((**HyH$ %#*yF" 0#,,../yJ& M#*t66x@@AAAt66x7H7H7J7JKKLLL#    &&t}'?'?'A'A8LL  44 5r   c                     g }t          |t          j                  rT|                                D ]?}|                    |           |                    |                     |                     @|S r   )r;   r   AbstractClassget_superclassesappendrU   rV   )r   rY   rG   
superclasss       r   rV   z_CheckObject._get_super_classesv   st    h	 788 	C&7799 C C
j)))d55jAABBBBr   c                     ||k    S r   r   )r   r6   rY   s      r   rW   z_CheckObject._same_pyobject~   s    8##r   c                 ,    t          j        ||          S r   )r   same_pyname)r   r6   rX   s      r   rR   z_CheckObject._same_pyname   s    &x888r   Tc                 :    | j         ot          j        ||          S r   )r/   r   unsure_pyname)r   rX   rO   s      r   rQ   z_CheckObject._unsure_pyname   s    {I{8IIIr   c                 ~    |                     d          }|d         |d         }}t          |          dk    rd}||fS )N.r   rC   r   )rE   len)r   r   rJ   
expressionr5   s        r   _split_namez_CheckObject._split_name   sD    

3 8U2YD
u::? 	D4r   c                 p   |                                                     |j                  }|}t          |t          j                  rZt          |j        t          j                  r;t          j	        |          \  }}|j
        ||         }t          j        ||          S t          j        ||          S r   )	get_scopeget_inner_scope_for_linelinenor;   r   r<   ctxStorer   node_regionsource_coder   eval_str	eval_node)r   r   r    scoperj   startendtexts           r   rP   z_CheckObject._evaluate_node   s    ""$$==dkJJ
j#(++ 	9
:>390U0U 	9#/
;;JE3'c	2D$UD111%eZ888r   c                    |                     d          }d }|d         dv r G d d          } |            }n | j                            |d                   }|dd          D ]#}||         }| d S |                                }$|S )Nrg   r   )__builtin____builtins__c                        e Zd Zd Zd Zd ZdS )-_CheckObject._evaluate.<locals>._BuiltinsStubc                 &    t           j         |         S r   r   r   r   s     r   get_attributez;_CheckObject._evaluate.<locals>._BuiltinsStub.get_attribute       #,T22r   c                 &    t           j         |         S r   r   r   s     r   __getitem__z9_CheckObject._evaluate.<locals>._BuiltinsStub.__getitem__   r   r   c                     |t           j         v S r   r   r   s     r   __contains__z:_CheckObject._evaluate.<locals>._BuiltinsStub.__contains__   s    8#444r   N)r   r   r   r   r   r   r   r   r   _BuiltinsStubr~      sA        3 3 33 3 35 5 5 5 5r   r   rC   )rE   r%   
get_modulerS   )r   code
attributesrX   r   rY   	attributes          r   rM   z_CheckObject._evaluate   s    ZZ__
a=;; 	>5 5 5 5 5 5 5 5 %}HH|..z!}==H#ABB 	+ 	+Ii(F tt((**HHr   N)r0   F)T)r   r   r   r!   r[   rV   rW   rR   rQ   rk   rP   rM   r   r   r   r4   r4   X   s        1 1 1 1  .  $ $ $9 9 9J J J J     9 9 9    r   r4   N)	rope.baser   r   r   r   rope.refactorr   r   r
   r   r#   r*   r4   r   r   r   <module>r      s   8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1? ? ? ? ? ? ? ?       3 3 3 3 3 3 3 3l  W W W W W W W W W Wr   