
    Æe,                         d dl Zd dlmZmZmZmZmZ d dlm	Z	  G d d      Z
 G d de
      Z G d d	e
      Z G d
 de
      Z G d de
      Z G d d      Z G d de
      Zy)    N)astcodeanalyze
exceptionspynamesutils)
patchedastc                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  d        Zd Zd	 Zd
 Zd Zd Zd Zd Zd Ze	j                  d        Z ee      Z ee      Z ee      Zd Zd Zd Zd Zy)Scopec                 .    || _         || _        || _        y N)pycorepyobjectparent)selfr   r   parent_scopes       4/usr/lib/python3/dist-packages/rope/base/pyscopes.py__init__zScope.__init__   s     "    c                 6    | j                   j                         S )z2Return the names defined or imported in this scope)r   get_attributesr   s    r   	get_nameszScope.get_names   s    }}++--r   c                 6    | j                   j                         S )z&Return the names defined in this scope)r   _get_structural_attributesr   s    r   get_defined_nameszScope.get_defined_names   s    }}7799r   c                 |    || j                         vrt        j                  d|z        | j                         |   S )z*Return name `PyName` defined in this scopename %s not found)r   r   NameNotFoundErrorr   names     r   get_namezScope.get_name   s:    t~~''../BT/IJJ~~%%r   c                 $    | j                  |      S )zThe same as ``get_name(key)``)r!   r   keys     r   __getitem__zScope.__getitem__   s    }}S!!r   c                 &    || j                         v S )z'The same as ``key in self.get_names()``r   r#   s     r   __contains__zScope.__contains__   s    dnn&&&r   c                 "    | j                         S )zsReturn the subscopes of this scope

        The returned scopes should be sorted by the order they appear.
        )_create_scopesr   s    r   
get_scopeszScope.get_scopes"   s     ""$$r   c                     || j                         v r| j                         |   S | j                  | j                  j                  |      S y r   )r   r   _propagated_lookupr   s     r   lookupzScope.lookup*   sE    4>>##>>#D));;";;11$77r   c                 "    | j                         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   s    r   get_propagated_nameszScope.get_propagated_names1   s     ~~r   c                     || j                         v r| j                         |   S | j                  | j                  j                  |      S y r   )r0   r   r-   r   s     r   r-   zScope._propagated_lookup;   sI    4,,..,,.t44;;";;11$77r   c                 x    | j                   j                         D cg c]  }|j                          c}S c c}w r   )r   _get_defined_objects	get_scoper   	pydefineds     r   r*   zScope._create_scopesB   s5    37==3U3U3W
&/I!
 	
 
s   7c                 T    | }|j                   |j                   }|j                   |S r   )r   )r   currents     r   _get_global_scopezScope._get_global_scopeG   s+    nn(nnG nn(r   c                 J    | j                   j                         j                  S r   )r   get_astlinenor   s    r   	get_startzScope.get_startM   s    }}$$&---r   c                     | j                   j                         j                  }|r|d   j                  S | j	                         S )Nr   )r   r;   bodyr<   r=   )r   r?   s     r   get_body_startzScope.get_body_startP   s8    }}$$&++7>>!~~r   c                     | j                         j                  }|j                  j                  | j                        d   S N   )r9   r   logical_lineslogical_line_inlogical_endr   pymodules     r   get_endzScope.get_endV   s8    ))+44%%55d6F6FGJJr   c                 X    | j                         }|j                  j                  |       S r   )r9   _scope_finderfind_scope_end)r   global_scopes     r   get_logical_endzScope.get_logical_endZ   s'    --/))88>>r   c                      y r    r   s    r   get_kindzScope.get_kindc   s    r   c                     | j                          | j                  j                         }t        j                  |      }|S r   )#_calculate_scope_regions_for_moduler   r;   r   node_region)r   noderegions      r   
get_regionzScope.get_regionf   s5    002}}$$&''-r   c                 @    | j                         j                          y r   )r9   _calculate_scope_regionsr   s    r   rS   z)Scope._calculate_scope_regions_for_modulel   s     99;r   c                 N    | j                         }|d   |cxk  xr |d   k  S c S )z#Checks if offset is in scope regionr   rC   )rW   )r   offsetrV   s      r   	in_regionzScope.in_regiono   s.     "ay6-F1I----r   N)__name__
__module____qualname__r   r   r   r!   r%   r(   r   saveitr+   r.   r0   r-   r*   r9   r=   r@   rI   rN   propertystartendrF   rQ   rW   rS   r\   rP   r   r   r
   r
      s    #
.:&"' \\% % 

. K \\? ? YE
7
C?+K<.r   r
   c                        e Zd Z fdZd Zd Zd Zej                  d        Z	d Z
 fdZddZd	 Zeej                  d
               Zed        Z xZS )GlobalScopec                 R    t         |   ||d        |j                         | _        y r   )superr   _get_concluded_datanames)r   r   module	__class__s      r   r   zGlobalScope.__init__w   s$    .//1
r   c                      yrB   rP   r   s    r   r=   zGlobalScope.get_start{   s    r   c                      yNModulerP   r   s    r   rQ   zGlobalScope.get_kind~   s    r   c                     	 | j                   |   S # t        j                  $ r8 || j                  v r| j                  |   cY S t        j                  d|z        w xY w)Nr   )r   r   AttributeNotFoundErrorbuiltin_namesr   r   s     r   r!   zGlobalScope.get_name   sd    	K==&&00 	Kt)))))$//../BT/IJJ	Ks    0AAc                     | j                         }t        j                  | j                  j	                         |       y r   )_get_sourcer   	patch_astr   r;   )r   sources     r   rY   z$GlobalScope._calculate_scope_regions   s-    !!#T]]224f=r   c                 .    | j                   j                  S r   )r   source_coder   s    r   rt   zGlobalScope._get_source   s    }}(((r   c                    | j                   j                         Mt        | j                        }|j	                  t
        |                 | j                   j                  |       | j                   j                         S r   )ri   getdictrr   updaterg   r   set)r   resultrk   s     r   r   zGlobalScope.get_names   sY    ::>>#$,,-FMM%'+-.JJNN6"zz~~r   c                 <    | j                   j                  | ||      S r   )rK   get_holding_scope)r   r<   indentss      r   get_inner_scope_for_linez$GlobalScope.get_inner_scope_for_line   s    !!33D&'JJr   c                 :    | j                   j                  | |      S r   )rK   get_holding_scope_for_offset)r   r[   s     r   get_inner_scope_for_offsetz&GlobalScope.get_inner_scope_for_offset   s    !!>>tVLLr   c                 ,    t        | j                        S r   )_HoldingScopeFinderr   r   s    r   rK   zGlobalScope._scope_finder   s     #4==11r   c                 f    t         j                  j                  j                  j                         S r   )ropebasebuiltinsr   r   s    r   rr   zGlobalScope.builtin_names   s!    yy!!**99;;r   r   )r]   r^   r_   r   r=   rQ   r!   r   r`   rY   rt   r   r   r   ra   rK   rr   __classcell__rk   s   @r   re   re   v   sz    2K \\> >) KM 
\\2  2 < <r   re   c                   L     e Zd Z fdZd Zd Zd Zd Z ee      Z	d Z
 xZS )ComprehensionScopec                     t         |   |||j                  j                                d | _        d | _        d | _        || _        y r   )rg   r   r   r4   ri   returned_astsdefinedsvisitorr   r   r   r   rk   s       r   r   zComprehensionScope.__init__   s>    8??+D+D+FG
!r   c                 R    | j                   | j                          | j                   S r   )ri   _visit_comprehensionr   s    r   
_get_nameszComprehensionScope._get_names   s"    ::%%'zzr   c                 "    | j                         S r   r   r   s    r   r   zComprehensionScope.get_names         r   c                    | j                   | j                  | j                  | j                        }t	        j
                  | j                  j                               D ]  }|j                  |        t        | j                  j                               | _         | j                   j                  |j                          |j                  | _        y y r   )ri   r   r   r   r   iter_child_nodesr;   visitr{   r   r   r|   r   )r   new_visitorrU   s      r   r   z'ComprehensionScope._visit_comprehension   s    ::,,t{{DMMBK,,T]]-B-B-DE (!!$'(dkk3356DJJJk//0'00DM r   c                 "    | j                         S r   r=   r   s    r   rN   z"ComprehensionScope.get_logical_end       ~~r   c                 "    | j                         S r   r   r   s    r   r@   z!ComprehensionScope.get_body_start   r   r   )r]   r^   r_   r   r   r   r   rN   ra   rF   r@   r   r   s   @r   r   r      s-    
!1  ?+K r   r   c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
FunctionScopec                     t         |   |||j                  j                                d | _        d | _        d | _        d | _        || _        y r   )	rg   r   r   r4   ri   r   is_generatorr   r   r   s       r   r   zFunctionScope.__init__   sF    8??+D+D+FG
! r   c                 R    | j                   | j                          | j                   S r   )ri   _visit_functionr   s    r   r   zFunctionScope._get_names   s"    ::  "zzr   c                    | j                   | j                  | j                  | j                        }t	        j
                  | j                  j                               D ]  }|j                  |        |j                   | _         | j                   j                  | j                  j                                |j                  | _
        |j                  | _        |j                  | _        y y r   )ri   r   r   r   r   r   r;   r   r|   get_parametersr   	generatorr   r   )r   r   ns      r   r   zFunctionScope._visit_function   s    ::,,t{{DMMBK))$--*?*?*AB %!!!$%$**DJJJdmm::<=!,!:!:D + 5 5D'00DM r   c                 R    | j                   | j                          | j                  S r   )ri   r   r   r   s    r   _get_returned_astsz FunctionScope._get_returned_asts   s$    ::  "!!!r   c                 R    | j                   | j                          | j                   S r   )r   r   r   s    r   _is_generatorzFunctionScope._is_generator   s&    $##%   r   c                 "    | j                         S r   r   r   s    r   r   zFunctionScope.get_names   r   r   c                     | j                   | j                          | j                   D cg c]  }|j                          c}S c c}w r   )r   r   r4   r5   s     r   r*   zFunctionScope._create_scopes   s9    ==   "7;}}E)	##%EEEs   Ac                      y)NFunctionrP   r   s    r   rQ   zFunctionScope.get_kind   s    r   c                     | j                         j                         D ]=  }t        |t        j                  t        j
                  f      s.|j                          ? y r   )r   values
isinstancer   AssignedNameEvaluatedName
invalidate)r   pynames     r   invalidate_datazFunctionScope.invalidate_data   sH    nn&--/ 	$F&7#7#79N9N"OP!!#	$r   )r]   r^   r_   r   r   r   r   r   r   r*   rQ   r   r   r   s   @r   r   r      s1    
	1"
!
!F
$r   r   c                   *     e Zd Z fdZd Zd Z xZS )
ClassScopec                 X    t         |   |||j                  j                                y r   )rg   r   r   r4   )r   r   r   rk   s      r   r   zClassScope.__init__   s!    8??+D+D+FGr   c                      y)NClassrP   r   s    r   rQ   zClassScope.get_kind  s    r   c                     i S r   rP   r   s    r   r0   zClassScope.get_propagated_names      	r   )r]   r^   r_   r   rQ   r0   r   r   s   @r   r   r      s    Hr   r   c                   x    e Zd Zd Zd Zd ZddZd Zd Ze	d        Z
d	 Zed
        Zed        Zed        Zy)r   c                     || _         y r   )rH   rG   s     r   r   z_HoldingScopeFinder.__init__
  s	     r   c                 ^    t        j                  | j                  j                  |            S r   )r   count_line_indentslinesget_line)r   r<   s     r   get_indentsz_HoldingScopeFinder.get_indents  s"    --djj.A.A&.IJJr   c                 @    | j                  |j                               S r   )r   r=   r   scopes     r   _get_scope_indentsz&_HoldingScopeFinder._get_scope_indents  s     122r   Nc                    || j                  |      }|}|}||j                         dk(  s| j                  |      |k  r|}|j                         |k(  r|j                         dk7  r|S d }|j	                         D ].  }|j                         |k  r||j                         k  s*|} n n |)|j                         dk(  r| j                  |      |k  r|S rn   )r   rQ   r   r=   r+   rI   )r   module_scoper<   line_indentscurrent_scope	new_scoper   s          r   r   z%_HoldingScopeFinder.get_holding_scope  s    ++F3L$!	# H,&&y1\A%M'')V3!**,8$$I&113 ??$.0$)	 # H,&&y1\A  r   c                     | j                   j                  |      }|j                         dk(  xs |j                         j	                  d      S )N #)r   r   striplstrip
startswith)r   r<   lines      r   _is_empty_linez"_HoldingScopeFinder._is_empty_line,  s=    zz""6*zz|r!BT[[]%=%=c%BBr   c                 @    | j                  |j                               S r   )r   r@   r   s     r   _get_body_indentsz%_HoldingScopeFinder._get_body_indents0  s     4 4 677r   c                     | j                         D ]+  }|j                  |      st        j                  ||      c S  | S r   )r+   r\   r   r   )r   r[   inner_scopes      r   r   z0_HoldingScopeFinder.get_holding_scope_for_offset3  sG     ++- 	K$$V,*GG 	
 r   c                    |j                   s| j                  j                         S |j                  j	                         j
                  d   j                  }| j                  j                  j                  |j                        }|d   |k\  r| j                  |      dz   }n| j                  |      }| j                  j                  t        |dz   | j                  j                               | j                  j                         dz         D ].  }| j                  |      r| j!                  |      |k  r|c S |}0 |S )NrC      )r   r   lengthr   r;   r?   r<   rH   rD   rE   rb   r   r   generate_startsminr   r   )r   r   rc   scope_startbody_indents
line_starts         r   rL   z"_HoldingScopeFinder.find_scope_end<  s   ||::$$&&nn$$&++B/66mm11AA%++Nq>S 2259A=L11%8L,,<<a**,-tzz/@/@/BQ/F
 	%J &&z2##J/,>J$C	% 
r   c                 .    | j                   j                  S r   )rH   r   r   s    r   r   z_HoldingScopeFinder.linesP  s    }}"""r   c                 .    | j                   j                  S r   )rH   rx   r   s    r   codez_HoldingScopeFinder.codeT  s    }}(((r   c                 .    | j                   j                  S r   )rH   rD   r   s    r   rD   z!_HoldingScopeFinder.logical_linesX  s    }}***r   r   )r]   r^   r_   r   r   r   r   r   r   staticmethodr   rL   ra   r   r   rD   rP   r   r   r   r   	  sw    !K32C8  ( # # ) ) + +r   r   c                   :     e Zd ZdZ fdZd Zd Zd Zd Z x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                 J    t         |   ||j                  |       || _        y r   )rg   r   r   ri   )r   r   r   ri   rk   s       r   r   zTemporaryScope.__init__d  s!    !6!6E
r   c                     | j                   S r   ri   r   s    r   r   zTemporaryScope.get_namesh      zzr   c                     | j                   S r   r   r   s    r   r   z TemporaryScope.get_defined_namesk  r   r   c                     g S r   rP   r   s    r   r*   zTemporaryScope._create_scopesn  r   r   c                      y)N	TemporaryrP   r   s    r   rQ   zTemporaryScope.get_kindq  s    r   )
r]   r^   r_   __doc__r   r   r   r*   rQ   r   r   s   @r   r   r   ]  s!    r   r   )rope.base.builtinsr   	rope.baser   r   r   r   r   rope.refactorr   r
   re   r   r   r   r   r   rP   r   r   <module>r      sj     B B $m. m.`/<% /<d   D1$E 1$h Q+ Q+hU r   