B
    L'W+                 @   s   d dl 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G d	d
 d
eZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZdd Zdd ZG dd deZdS )    N)
exceptionsutilsc               @   s    e Zd ZdZdd Zdd ZdS )PyNamez1References to `PyObject`\s inside python programsc             C   s   dS )z8Return the `PyObject` object referenced by this `PyName`N )selfr   r   0lib/python3.7/site-packages/rope/base/pynames.py
get_object   s    zPyName.get_objectc             C   s   dS )zReturn a (module, lineno) tupleNr   )r   r   r   r   get_definition_location   s    zPyName.get_definition_locationN)__name__
__module____qualname____doc__r   r	   r   r   r   r   r      s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )DefinedNamec             C   s
   || _ d S )N)pyobject)r   r   r   r   r   __init__   s    zDefinedName.__init__c             C   s   | j S )N)r   )r   r   r   r   r      s    zDefinedName.get_objectc             C   s   | j  | j  jfS )N)r   
get_moduleZget_astlineno)r   r   r   r   r	      s    z#DefinedName.get_definition_locationN)r
   r   r   r   r   r	   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdS )AssignedNamezOnly a placeholderN)r
   r   r   r   r   r   r   r   r      s   r   c               @   s&   e Zd ZdddZdd Zdd ZdS )	UnboundNameNc             C   s"   || _ | j d krtjj | _ d S )N)r   ropebase	pyobjectsget_unknown)r   r   r   r   r   r   !   s    
zUnboundName.__init__c             C   s   | j S )N)r   )r   r   r   r   r   &   s    zUnboundName.get_objectc             C   s   dS )N)NNr   )r   r   r   r   r	   )   s    z#UnboundName.get_definition_location)N)r
   r   r   r   r   r	   r   r   r   r   r      s   
r   c               @   s"   e Zd ZdZd	ddZdd ZdS )
AssignmentValuezAn assigned expressionN Fc             C   s,   || _ |dkrg | _n|| _|| _|| _dS )zThe `level` is `None` for simple assignments and is
        a list of numbers for tuple assignments for example in::

           a, (b, c) = x

        The levels for for `a` is ``[0]``, for `b` is ``[1, 0]`` and for
        `c` is ``[1, 1]``.

        N)ast_nodelevels
evaluationassign_type)r   r   r   r   r   r   r   r   r   0   s    zAssignmentValue.__init__c             C   s   | j jS )N)r   r   )r   r   r   r   
get_linenoC   s    zAssignmentValue.get_lineno)Nr   F)r
   r   r   r   r   r   r   r   r   r   r   -   s    
r   c               @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )EvaluatedNamez+A name whose object will be evaluated laterNc             C   s&   || _ || _|| _t|t|| _d S )N)moduler   callback	_Inferred_get_concluded_datar   )r   r"   r!   r   r   r   r   r   J   s    zEvaluatedName.__init__c             C   s
   | j  S )N)r   get)r   r   r   r   r   P   s    zEvaluatedName.get_objectc             C   s   | j | jfS )N)r!   r   )r   r   r   r   r	   S   s    z%EvaluatedName.get_definition_locationc             C   s   | j d dS )z)Forget the `PyObject` this `PyName` holdsN)r   set)r   r   r   r   
invalidateV   s    zEvaluatedName.invalidate)NN)r
   r   r   r   r   r   r	   r'   r   r   r   r   r    G   s
   
r    c               @   s   e Zd ZdZdS )ParameterNamezOnly a placeholderN)r
   r   r   r   r   r   r   r   r(   [   s   r(   c               @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )ImportedModuleNr   c             C   s(   || _ || _|| _|| _t| j | _d S )N)importing_modulemodule_namelevelresourcer$   pymodule)r   r*   r+   r,   r-   r   r   r   r   a   s
    zImportedModule.__init__c             C   s    | j   }|d krd S |jS )N)r*   r   Zget_resourceparent)r   r-   r   r   r   _current_folderi   s    zImportedModule._current_folderc             C   s   | j  d kr| jj}| jd k	r8| j |j| j nj| jd k	ryH| j	dkrd|j
| j|  }n|j| j|  | j	}| j | W n tjk
r   Y nX | j  S )Nr   )r.   r%   r*   pycorer-   r&   ZprojectZget_pymoduler+   r,   r   r0   Zget_relative_moduler   ModuleNotFoundError)r   r1   r.   r   r   r   _get_pymoduleo   s     



zImportedModule._get_pymodulec             C   s    |   d krtjj S |   S )N)r3   r   r   r   r   )r   r   r   r   r      s    zImportedModule.get_objectc             C   s(   |   }t|tjjjsdS | dfS )N)NN   )r3   
isinstancer   r   r   ZPyDefinedObjectr   )r   r.   r   r   r   r	      s    z&ImportedModule.get_definition_location)Nr   N)r
   r   r   r   r0   r3   r   r	   r   r   r   r   r)   _   s    
r)   c               @   sJ   e Zd Zdd Zdd Zeejj	j
dd Zedd d	d
 ZdS )ImportedNamec             C   s   || _ || _d S )N)imported_moduleimported_name)r   r7   r8   r   r   r   r      s    zImportedName.__init__c             C   s>   y | j  | j }|| kr|S W n tjk
r6   Y nX t S )N)r7   r   r8   r   ZAttributeNotFoundErrorr   )r   resultr   r   r   _get_imported_pyname   s    z!ImportedName._get_imported_pynamec             C   s   |    S )N)r:   r   )r   r   r   r   r      s    zImportedName.get_objectc               C   s   dS )N)NNr   r   r   r   r   <lambda>   s    zImportedName.<lambda>c             C   s   |    S )N)r:   r	   )r   r   r   r   r	      s    z$ImportedName.get_definition_locationN)r
   r   r   r   r:   r   prevent_recursionr   r   r   r   r   r	   r   r   r   r   r6      s   	r6   c             C   s   | d krt jj S |  S )N)r   r   r   Z_ConcludedDatar$   )r!   r   r   r   r$      s    r$   c               C   s   t jjdd S )NzCircular Object Inference)r   r   r   ZIsBeingInferredErrorr   r   r   r   _circular_inference   s    r=   c               @   s8   e Zd Zd
ddZeedd Zdd Zdd	 Z	dS )r#   Nc             C   s    || _ || _| jd krd | _d S )N)get_inferred	concludedtemp)r   r>   r?   r   r   r   r      s    
z_Inferred.__init__c             O   sP   | j d ks| j  d kr*| | j|| |  d krH| tjj  |  S )N)	r?   r%   r&   r>   _getr   r   r   r   )r   argskwdsr   r   r   r%      s
    z_Inferred.getc             C   s    | j d k	r| j | || _d S )N)r?   r&   r@   )r   r   r   r   r   r&      s    
z_Inferred.setc             C   s   | j d k	r| j  S | jS )N)r?   r%   r@   )r   r   r   r   rA      s    

z_Inferred._get)N)
r
   r   r   r   r   r<   r=   r%   r&   rA   r   r   r   r   r#      s   
r#   )Zrope.base.pyobjectsr   Z	rope.baser   r   objectr   r   r   r   r   r    r(   r)   r6   r$   r=   r#   r   r   r   r   <module>   s   
/