B
    S                 @   st   d dl mZmZmZmZ d dlmZmZ G dd deZ	G dd deZ
G dd deZd	d
 ZG dd deZdS )    )astevaluatebuiltins	pyobjects)
patchedastoccurrencesc               @   s   e Zd Zdd Zdd ZdS )Wildcardc             C   s   dS )z Return the name of this wildcardN )selfr	   r	   6lib/python3.7/site-packages/rope/refactor/wildcards.pyget_name   s    zWildcard.get_namec             C   s   dS )z0Return `True` if `suspect` matches this wildcardNr	   )r
   suspectargr	   r	   r   matches
   s    zWildcard.matchesN)__name__
__module____qualname__r   r   r	   r	   r	   r   r      s   r   c               @   s   e Zd Zdd ZdS )Suspectc             C   s   || _ || _|| _d S )N)namepymodulenode)r
   r   r   r   r	   r	   r   __init__   s    zSuspect.__init__N)r   r   r   r   r	   r	   r	   r   r      s   r   c               @   s:   e Zd ZdZdd Zdd ZdddZd	d
 Zd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             C   s
   || _ d S )N)project)r
   r   r	   r	   r   r   %   s    zDefaultWildcard.__init__c             C   s   dS )Ndefaultr	   )r
   r	   r	   r   r   (   s    zDefaultWildcard.get_name c             C   s,   t |}| ||sdS | ||s(dS dS )NFT)	parse_arg_check_exact_check_object)r
   r   r   argsr	   r	   r   r   +   s    zDefaultWildcard.matchesc             C   sb   d }d }| dd}xHdD ]@}||kr2|}|| }|d k	rt| j|||d}||j|jS qW dS )NunsureF)r   objecttypeinstance)r    T)get_CheckObjectr   r   r   )r
   r   r   kindexpectedr    ZcheckZcheckerr	   r	   r   r   4   s    

zDefaultWildcard._check_objectc             C   sB   |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   r$   
isinstancer   Nameidr   expr)r
   r   r   r   r	   r	   r   r   B   s    
zDefaultWildcard._check_exactN)r   )	r   r   r   __doc__r   r   r   r   r   r	   r	   r	   r   r      s   
	r   c             C   sh   t | tr| S i }| d}xF|D ]>}d|krT|dd}|d  ||d  < q"d|| < q"W |S )N,=   r   T)r)   dictsplitstrip)r   resulttokenstokenpartsr	   r	   r   r   M   s    


r   c               @   sX   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdddZdd Z	dd Z
dd ZdS )r%   r!   Fc             C   s"   || _ || _|| _| || _d S )N)r   r&   r    	_evaluater'   )r
   r   r'   r&   r    r	   r	   r   r   ]   s    z_CheckObject.__init__c             C   s   |  ||}|d ks| jd kr$| jS | j|| jdkdr<dS | jdkrT| | j|S | }| jdkrl|g}| jdkr| g}| jdkr|g}|| 	| || 	|  x"|D ]}| 
| j |rdS qW dS d S )Nr   )unboundTr!   r"   r#   F)_evaluate_noder'   r    _unsure_pynamer&   _same_pyname
get_objectZget_typeextend_get_super_classes_same_pyobject)r
   r   r   pynamepyobjectZobjectsr	   r	   r   __call__c   s(    





z_CheckObject.__call__c             C   s@   g }t |tjr<x*| D ]}|| || | qW |S )N)r)   r   ZAbstractClassZget_superclassesappendr>   r?   )r
   rB   r4   Z
superclassr	   r	   r   r?   z   s    
z_CheckObject._get_super_classesc             C   s   ||kS )Nr	   )r
   r'   rB   r	   r	   r   r@      s    z_CheckObject._same_pyobjectc             C   s   t ||S )N)r   Zsame_pyname)r
   r'   rA   r	   r	   r   r<      s    z_CheckObject._same_pynameTc             C   s   | j ot||S )N)r    r   Zunsure_pyname)r
   rA   r9   r	   r	   r   r;      s    z_CheckObject._unsure_pynamec             C   s4   | d}|d |d  }}t|dkr,d}||fS )N.r   r0   r   )r2   len)r
   r   r7   
expressionr&   r	   r	   r   _split_name   s
    
z_CheckObject._split_namec             C   sf   |  |j}|}t|tjrVt|jtjrVt	|\}}|j
|| }t||S t||S d S )N)Z	get_scopeZget_inner_scope_for_linelinenor)   r   r*   ZctxZStorer   Znode_regionZsource_coder   Zeval_strZ	eval_node)r
   r   r   ZscoperH   startendtextr	   r	   r   r:      s    z_CheckObject._evaluate_nodec             C   sx   | d}d }|d dkr2G dd dt}| }n| j|d }x0|dd  D ] }|| }|d krhd S | }qPW |S )NrE   r   )Z__builtin____builtins__c               @   s$   e Zd Zdd Zdd Zdd ZdS )z-_CheckObject._evaluate.<locals>._BuiltinsStubc             S   s
   t j | S )N)r   )r
   r   r	   r	   r   get_attribute   s    z;_CheckObject._evaluate.<locals>._BuiltinsStub.get_attributec             S   s
   t j | S )N)r   )r
   r   r	   r	   r   __getitem__   s    z9_CheckObject._evaluate.<locals>._BuiltinsStub.__getitem__c             S   s
   |t j kS )N)r   )r
   r   r	   r	   r   __contains__   s    z:_CheckObject._evaluate.<locals>._BuiltinsStub.__contains__N)r   r   r   rO   rP   rQ   r	   r	   r	   r   _BuiltinsStub   s   rR   r0   )r2   r!   r   Z
get_moduler=   )r
   codeZ
attributesrA   rR   rB   Z	attributer	   r	   r   r8      s    
	z_CheckObject._evaluateN)r!   F)T)r   r   r   r   rC   r?   r@   r<   r;   rI   r:   r8   r	   r	   r	   r   r%   [   s   

r%   N)Z	rope.baser   r   r   r   Zrope.refactorr   r   r!   r   r   r   r   r%   r	   r	   r	   r   <module>   s   	7