
    Æel                         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y)    )astbuiltinsevaluate	pyobjects)occurrences
patchedastc                       e Zd Zd Zd Zy)Wildcardc                      y)z Return the name of this wildcardN selfs    9/usr/lib/python3/dist-packages/rope/refactor/wildcards.pyget_namezWildcard.get_name           c                      y)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
      s    /?r   r
   c                       e Zd Zd Zy)Suspectc                 .    || _         || _        || _        y 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                   0    e Zd ZdZd Zd ZddZd Zd Zy)	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                     || _         y r   )project)r   r%   s     r   r!   zDefaultWildcard.__init__#   s	    r   c                      y)Ndefaultr   r   s    r   r   zDefaultWildcard.get_name&   s    r   c                 f    t        |      }| j                  ||      sy| j                  ||      syy)NFT)	parse_arg_check_exact_check_object)r   r   r   argss       r   r   zDefaultWildcard.matches)   s4    ~  w/!!$0r   c                     d }d }|j                  dd      }dD ]G  }||v r|}||   }|t        | j                  |||      } ||j                  |j                        c S  y)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   sv    (E*; 	?E};#&t||XtFSw//>>	? r   c                     |j                   }|j                  d      r5t        |t        j                        r|j
                  |j                  k(  syyt        |t        j                        syy)NexactFT)r    r2   
isinstancer   Nameidr   expr)r   r,   r   r    s       r   r*   zDefaultWildcard._check_exact?   sR    ||88GdCHH-TWW5L  dCHH-r   N) )	r   r   r   __doc__r!   r   r   r+   r*   r   r   r   r#   r#      s     r   r#   c                     t        | t              r| S i }| j                  d      }|D ]S  }d|v r:|j                  dd      }|d   j                         ||d   j                         <   Ad||j                         <   U |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~~'7F58>>#$$(F5;;=!) Mr   c                   F    e Zd ZddZd Zd Zd Zd ZddZd Z	d Z
d	 Zy
)r3   c                 Z    || _         || _        || _        | j                  |      | _        y r   )r%   r4   r.   	_evaluater5   )r   r%   r5   r4   r.   s        r   r!   z_CheckObject.__init__Y   s'    	x0r   c                    | j                  ||      }|| j                  | j                  S | j                  || j                  dk(        ry| j                  dk(  r| j                  | j                  |      S |j                         }| j                  dk(  r|g}| j                  dk(  r|j                         g}| j                  dk(  rQ|g}|j                  | j                  |             |j                  | j                  |j                                      D ].  }| j                  | j                  j                         |      s. y y)Nr   )unboundTr/   r0   r1   F)_evaluate_noder5   r.   _unsure_pynamer4   _same_pyname
get_objectget_typeextend_get_super_classes_same_pyobject)r   r   r    pynamepyobjectobjectss         r   __call__z_CheckObject.__call___   s*   $$Xt4>T]]2;;vtyyF/BC99$$T]]F;;((*HyyH$#*yyF"#,,./yyJ&#*t66x@At66x7H7H7JKL#  &&t}}'?'?'A8L  r   c                     g }t        |t        j                        rF|j                         D ]3  }|j	                  |       |j                  | j                  |             5 |S r   )r:   r   AbstractClassget_superclassesappendrU   rV   )r   rY   rG   
superclasss       r   rV   z_CheckObject._get_super_classesv   s[    h	 7 78&779 C
j)d55jABC r   c                     ||k(  S r   r   )r   r5   rY   s      r   rW   z_CheckObject._same_pyobject~   s    8##r   c                 .    t        j                  ||      S r   )r   same_pyname)r   r5   rX   s      r   rR   z_CheckObject._same_pyname   s    &&x88r   c                 J    | j                   xr t        j                  ||      S r   )r.   r   unsure_pyname)r   rX   rO   s      r   rQ   z_CheckObject._unsure_pyname   s    {{I{88IIr   c                 `    |j                  d      }|d   |d   }}t        |      dk(  rd}||fS )N.r   rC   r   )rE   len)r   r   rJ   
expressionr4   s        r   _split_namez_CheckObject._split_name   s;    

3 8U2YD
u:?D4r   c                 z   |j                         j                  |j                        }|}t        |t        j
                        rat        |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    ""$==dkkJ
j#((+
:>>3990U#//
;JE3''c2D$$UD11%%eZ88r   c                     |j                  d      }d }|d   dv r G d d      } |       }n| j                  j                  |d         }|dd  D ]  }||   }| y |j                         } |S )Nrg   r   )__builtin____builtins__c                       e Zd Zd Zd Zd Zy)-_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44r   N)r   r   r   r   r   r   r   r   r   _BuiltinsStubr~      s    335r   r   rC   )rE   r%   
get_modulerS   )r   code
attributesrX   r   rY   	attributes          r   rM   z_CheckObject._evaluate   s    ZZ_
a=;;5 5 %H||..z!}=H#AB 	+Ii(F~((*H		+
 r   N)r/   F)T)r   r   r   r!   r[   rV   rW   rR   rQ   rk   rP   rM   r   r   r   r3   r3   X   s0    1.$9J 9r   r3   N)	rope.baser   r   r   r   rope.refactorr   r   r
   r   r#   r)   r3   r   r   r   <module>r      s>    8 8 1? ? 3 3lW Wr   