a
    ]9a-                     @   s   d dl Zd dlZd dlZd dlmZmZmZ d dl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dS )    N)ast
exceptionsutils)
patchedastc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze	j
dd  ZeeZeeZeeZd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*Scopec                 C   s   || _ || _|| _d S N)pycorepyobjectparent)selfr   r	   parent_scope r   1lib/python3.9/site-packages/rope/base/pyscopes.py__init__	   s    zScope.__init__c                 C   s
   | j  S )z2Return the names defined or imported in this scope)r	   get_attributesr   r   r   r   	get_names   s    zScope.get_namesc                 C   s
   | j  S )z&Return the names defined in this scope)r	   Z_get_structural_attributesr   r   r   r   get_defined_names   s    zScope.get_defined_namesc                 C   s&   ||   vrtd| |   | S )z*Return name `PyName` defined in this scopename %s not found)r   r   NameNotFoundErrorr   namer   r   r   get_name   s    zScope.get_namec                 C   s
   |  |S )zThe same as ``get_name(key)``)r   r   keyr   r   r   __getitem__   s    zScope.__getitem__c                 C   s   ||   v S )z'The same as ``key in self.get_names()``r   r   r   r   r   __contains__    s    zScope.__contains__c                 C   s   |   S )zsReturn the subscopes of this scope

        The returned scopes should be sorted by the order they appear.
        )_create_scopesr   r   r   r   
get_scopes$   s    zScope.get_scopesc                 C   s2   ||   v r|   | S | jd ur.| j|S d S r   )r   r
   _propagated_lookupr   r   r   r   lookup,   s
    
zScope.lookupc                 C   s   |   S )a#  Return the visible names of this scope

        Return the names defined in this scope that are visible from
        scopes containing this scope.  This method returns the same
        dictionary returned by `get_names()` except for `ClassScope`
        which returns an empty dict.
        r   r   r   r   r   get_propagated_names3   s    zScope.get_propagated_namesc                 C   s2   ||   v r|   | S | jd ur.| j|S d S r   )r"   r
   r    r   r   r   r   r    =   s
    
zScope._propagated_lookupc                 C   s   dd | j  D S )Nc                 S   s   g | ]}|  qS r   	get_scope.0Z	pydefinedr   r   r   
<listcomp>E   s   z(Scope._create_scopes.<locals>.<listcomp>)r	   Z_get_defined_objectsr   r   r   r   r   D   s    zScope._create_scopesc                 C   s   | }|j d ur|j }q|S r   )r
   )r   currentr   r   r   _get_global_scopeI   s    
zScope._get_global_scopec                 C   s   | j  jS r   )r	   get_astlinenor   r   r   r   	get_startO   s    zScope.get_startc                 C   s"   | j  j}|r|d jS |  S )Nr   )r	   r*   bodyr+   r,   )r   r-   r   r   r   get_body_startR   s    
zScope.get_body_startc                 C   s   |   j}|j| jd S N   )r)   r	   logical_lineslogical_line_inlogical_endr   pymoduler   r   r   get_endX   s    
zScope.get_endc                 C   s   |   }|j| S r   )r)   _scope_finderfind_scope_end)r   Zglobal_scoper   r   r   get_logical_end\   s    zScope.get_logical_endc                 C   s   d S r   r   r   r   r   r   get_kinde   s    zScope.get_kindc                 C   s    |    | j }t|}|S r   )#_calculate_scope_regions_for_moduler	   r*   r   Znode_region)r   noderegionr   r   r   
get_regionh   s    

zScope.get_regionc                 C   s   |     d S r   )r)   _calculate_scope_regionsr   r   r   r   r;   n   s    z)Scope._calculate_scope_regions_for_modulec                 C   s(   |   }|d |  k o"|d k S   S )z#Checks if offset is in scope regionr   r0   )r>   )r   offsetr=   r   r   r   	in_regionq   s    zScope.in_regionN)__name__
__module____qualname__r   r   r   r   r   r   r   saveitr   r!   r"   r    r   r)   r,   r.   r6   r9   propertystartendr3   r:   r>   r;   rA   r   r   r   r   r      s2   


r   c                       s   e Zd Z fddZdd Zdd Zdd Zejd	d
 Z	dd Z
 fddZdddZdd Zeejdd Zedd Z  ZS )GlobalScopec                    s"   t t| ||d  | | _d S r   )superrI   r   Z_get_concluded_datanames)r   r   module	__class__r   r   r   y   s    zGlobalScope.__init__c                 C   s   dS r/   r   r   r   r   r   r,   }   s    zGlobalScope.get_startc                 C   s   dS NZModuler   r   r   r   r   r:      s    zGlobalScope.get_kindc                 C   sL   z| j | W S  tjyF   || jv r4| j|  Y S td| Y n0 d S )Nr   )r	   r   ZAttributeNotFoundErrorbuiltin_namesr   r   r   r   r   r      s    
zGlobalScope.get_namec                 C   s   |   }t| j | d S r   )_get_sourcer   Z	patch_astr	   r*   )r   sourcer   r   r   r?      s    z$GlobalScope._calculate_scope_regionsc                 C   s   | j jS r   )r	   source_coder   r   r   r   rQ      s    zGlobalScope._get_sourcec                    sB   | j  d u r8t| j}|tt|   | j | | j  S r   )	rK   getdictrP   updaterJ   rI   r   set)r   resultrM   r   r   r      s
    
zGlobalScope.get_namesNc                 C   s   | j | ||S r   )r7   get_holding_scope)r   r+   indentsr   r   r   get_inner_scope_for_line   s    z$GlobalScope.get_inner_scope_for_linec                 C   s   | j | |S r   )r7   get_holding_scope_for_offset)r   r@   r   r   r   get_inner_scope_for_offset   s    z&GlobalScope.get_inner_scope_for_offsetc                 C   s
   t | jS r   )_HoldingScopeFinderr	   r   r   r   r   r7      s    zGlobalScope._scope_finderc                 C   s   t jjj S r   )ropebasebuiltinsr   r   r   r   r   rP      s    zGlobalScope.builtin_names)N)rB   rC   rD   r   r,   r:   r   r   rE   r?   rQ   r   r[   r]   rF   r7   rP   __classcell__r   r   rM   r   rI   x   s   

rI   c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 ZeeZ	dd Z
  ZS )ComprehensionScopec                    s6   t t| |||j  d | _d | _d | _|| _d S r   )	rJ   rc   r   r
   r$   rK   returned_astsdefinedsvisitorr   r   r	   rf   rM   r   r   r      s    
zComprehensionScope.__init__c                 C   s   | j d u r|   | j S r   )rK   _visit_comprehensionr   r   r   r   
_get_names   s    
zComprehensionScope._get_namesc                 C   s   |   S r   ri   r   r   r   r   r      s    zComprehensionScope.get_namesc                 C   sf   | j d u rb| | j| j}t| j D ]}t|| q*t| j	
 | _ | j |j  |j| _d S r   )rK   rf   r   r	   r   get_child_nodesr*   walkrU   r
   r   rV   re   )r   new_visitorr<   r   r   r   rh      s    
z'ComprehensionScope._visit_comprehensionc                 C   s   |   S r   r,   r   r   r   r   r9      s    z"ComprehensionScope.get_logical_endc                 C   s   |   S r   rn   r   r   r   r   r.      s    z!ComprehensionScope.get_body_start)rB   rC   rD   r   ri   r   rh   r9   rF   r3   r.   rb   r   r   rM   r   rc      s   		rc   c                       s\   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )FunctionScopec                    s<   t t| |||j  d | _d | _d | _d | _|| _	d S r   )
rJ   ro   r   r
   r$   rK   rd   is_generatorre   rf   rg   rM   r   r   r      s    
zFunctionScope.__init__c                 C   s   | j d u r|   | j S r   )rK   _visit_functionr   r   r   r   ri      s    
zFunctionScope._get_namesc                 C   sr   | j d u rn| | j| j}t| j D ]}t|| q*|j | _ | j | j	  |j
| _
|j| _|j| _d S r   )rK   rf   r   r	   r   rk   r*   rl   rV   Zget_parametersrd   	generatorrp   re   )r   rm   nr   r   r   rq      s    
zFunctionScope._visit_functionc                 C   s   | j d u r|   | jS r   )rK   rq   rd   r   r   r   r   _get_returned_asts   s    
z FunctionScope._get_returned_astsc                 C   s   | j d u r|   | j S r   )rp   rt   r   r   r   r   _is_generator   s    
zFunctionScope._is_generatorc                 C   s   |   S r   rj   r   r   r   r   r      s    zFunctionScope.get_namesc                 C   s"   | j d u r|   dd | j D S )Nc                 S   s   g | ]}|  qS r   r#   r%   r   r   r   r'          z0FunctionScope._create_scopes.<locals>.<listcomp>)re   rq   r   r   r   r   r      s    
zFunctionScope._create_scopesc                 C   s   dS )NZFunctionr   r   r   r   r   r:      s    zFunctionScope.get_kindc                 C   s8   |    D ]&}t|tjjjtjjjfr|  qd S r   )	r   values
isinstancer_   r`   ZpynamesZAssignedNameZEvaluatedNameZ
invalidate)r   Zpynamer   r   r   invalidate_data   s    zFunctionScope.invalidate_data)rB   rC   rD   r   ri   rq   rt   ru   r   r   r:   ry   rb   r   r   rM   r   ro      s   
ro   c                       s,   e Zd Z fddZdd Zdd Z  ZS )
ClassScopec                    s   t t| |||j  d S r   )rJ   rz   r   r
   r$   )r   r   r	   rM   r   r   r     s    zClassScope.__init__c                 C   s   dS )NZClassr   r   r   r   r   r:     s    zClassScope.get_kindc                 C   s   i S r   r   r   r   r   r   r"     s    zClassScope.get_propagated_names)rB   rC   rD   r   r:   r"   rb   r   r   rM   r   rz     s   rz   c                   @   sv   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd Ze	dd Z
dd Zedd Zedd Zedd ZdS )r^   c                 C   s
   || _ d S r   )r5   r4   r   r   r   r     s    z_HoldingScopeFinder.__init__c                 C   s   t jj| j|S r   )r_   r`   ZcodeanalyzeZcount_line_indentslinesget_line)r   r+   r   r   r   get_indents  s    z_HoldingScopeFinder.get_indentsc                 C   s   |  | S r   )r}   r,   r   scoper   r   r   _get_scope_indents  s    z&_HoldingScopeFinder._get_scope_indentsNc                 C   s   |d u r|  |}|}|}|d ur| dks<| ||kr|}| |kr\| dkr\|S d }| D ]*}| |kr|| kr|} qqh qqhq|S rO   )r}   r:   r   r,   r   r6   )r   Zmodule_scoper+   Zline_indentsZcurrent_scopeZ	new_scoper   r   r   r   rY     s.    



z%_HoldingScopeFinder.get_holding_scopec                 C   s&   | j |}| dkp$| dS )N #)r{   r|   striplstrip
startswith)r   r+   liner   r   r   _is_empty_line5  s    z"_HoldingScopeFinder._is_empty_linec                 C   s   |  | S r   )r}   r.   r~   r   r   r   _get_body_indents9  s    z%_HoldingScopeFinder._get_body_indentsc                 C   s,   |   D ]}||rt||  S q| S r   )r   rA   r^   r\   )r   r@   Zinner_scoper   r   r   r\   <  s    

z0_HoldingScopeFinder.get_holding_scope_for_offsetc                 C   s   |j s| j S |j jd j}| jj	|j
}|d |krN| |d }n
| |}| jt|d | j | j d D ](}| |s| ||k r|  S |}q|S )Nr0      )r
   r{   lengthr	   r*   r-   r+   r5   r1   r2   rG   r   r   Zgenerate_startsminr   r}   )r   r   rH   Zscope_startZbody_indentslr   r   r   r8   E  s    


z"_HoldingScopeFinder.find_scope_endc                 C   s   | j jS r   )r5   r{   r   r   r   r   r{   Y  s    z_HoldingScopeFinder.linesc                 C   s   | j jS r   )r5   rS   r   r   r   r   code]  s    z_HoldingScopeFinder.codec                 C   s   | j jS r   )r5   r1   r   r   r   r   r1   a  s    z!_HoldingScopeFinder.logical_lines)N)rB   rC   rD   r   r}   r   rY   r   r   staticmethodr\   r8   rF   r{   r   r1   r   r   r   r   r^     s   



r^   c                       s@   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Z  Z	S )TemporaryScopezCurrently used for list comprehensions and generator expressions

    These scopes do not appear in the `get_scopes()` method of their
    parent scopes.
    c                    s    t t| ||j| || _d S r   )rJ   r   r   r	   rK   )r   r   r   rK   rM   r   r   r   m  s    
zTemporaryScope.__init__c                 C   s   | j S r   rK   r   r   r   r   r   s  s    zTemporaryScope.get_namesc                 C   s   | j S r   r   r   r   r   r   r   v  s    z TemporaryScope.get_defined_namesc                 C   s   g S r   r   r   r   r   r   r   y  s    zTemporaryScope._create_scopesc                 C   s   dS )NZ	Temporaryr   r   r   r   r   r:   |  s    zTemporaryScope.get_kind)
rB   rC   rD   __doc__r   r   r   r   r:   rb   r   r   rM   r   r   f  s   r   )Zrope.base.builtinsr_   Zrope.base.codeanalyzeZrope.base.pynamesZ	rope.baser   r   r   Zrope.refactorr   objectr   rI   rc   ro   rz   r^   r   r   r   r   r   <module>   s   p2$9T