B
    ¢čåS  ć               @   s8   d dl mZmZmZmZ d dlmZ G dd deZdS )é    )ŚpynamesŚevaluateŚ
exceptionsŚworder)ŚRenamec               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )ŚLocalToFieldc             C   s   || _ || _|| _d S )N)ŚprojectŚresourceŚoffset)Śselfr   r	   r
   © r   ś9lib/python3.7/site-packages/rope/refactor/localtofield.pyŚ__init__   s    zLocalToField.__init__c       	      C   s   t  | j| j”}| j | j”}t || j”}|  |”s@t	 
d”| ” \}}| ”  |”}|  |j|”}t| j| j| jj|| jgd}|S )NzUConvert local variable to field should be performed on 
a local variable of a method.)Z	resources)r   Zget_name_atr	   r
   r   Zget_pymoduler   Zeval_locationŚ_is_a_method_localr   ŚRefactoringErrorŚget_definition_locationŚ	get_scopeŚget_inner_scope_for_lineŚ_get_field_nameŚpyobjectr   Śget_changes)	r   ŚnameZthis_pymoduleŚpynameŚpymoduleŚlinenoŚfunction_scopeŚnew_nameZchangesr   r   r   r      s    
zLocalToField.get_changesc             C   s"   |j }||jkrt d| ”d S )NzThe field %s already exists)Śparentr   r   r   )r   r   r   Zclass_scoper   r   r   Ś_check_redefinition   s    
z LocalToField._check_redefinitionc             C   s   |  ” d }|d | }|S )Nr   Ś.)Zget_param_names)r   Z
pyfunctionr   Z	self_namer   r   r   r   r   %   s    zLocalToField._get_field_namec             C   s\   |  ” \}}| ”  |”}|j}t|tjoZ|| ”  ” koZ| 	” dkoZ|d k	oZ| 	” dkS )NZFunctionZClass)
r   r   r   r   Ś
isinstancer   ZAssignedNameZ	get_namesŚvaluesZget_kind)r   r   r   r   Zholding_scoper   r   r   r   r   *   s    zLocalToField._is_a_method_localN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   r   r   r   r   r      s
   r   N)	Z	rope.baser   r   r   r   Zrope.refactor.renamer   Śobjectr   r   r   r   r   Ś<module>   s   