
    Æe-                         d dl Z d dlZd dlZd dlZ G d d      Z G d d      Z G d d      Z G d d	      Z G d
 d      Zd Z	 G d d      Z
d Z G d d      ZddZdad Zd ZddZd Zd Zd Zd Zy)    Nc                        e Zd Zd ZddZd Zy)ChangeCollectorc                      || _         g | _        y N)textchanges)selfr   s     7/usr/lib/python3/dist-packages/rope/base/codeanalyze.py__init__zChangeCollector.__init__   s    	    Nc                 b    || j                   || }| j                  j                  |||f       y r   )r   r   append)r	   startendnew_texts       r
   
add_changezChangeCollector.add_change   s1    yys+HUC23r   c                    | j                   sy | j                   j                  d        g }d}| j                   D ]+  }|\  }}}|j                  | j                  || |z          |}- |t	        | j                        k  r|j                  | j                  |d         dj                  |      }|| j                  k7  r|S y )Nc                     | d d S )N    )xs    r
   <lambda>z-ChangeCollector.get_changed.<locals>.<lambda>   s    "1 r   )keyr    )r   sortr   r   lenjoin)r	   pieceslast_changedchanger   r   r   results           r
   get_changedzChangeCollector.get_changed   s    ||o.ll 	F%E3MM$))L7$>?L	 #dii.(MM$))LM23TYYM r   r   )__name__
__module____qualname__r   r   r"   r   r   r
   r   r      s    4
r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
SourceLinesAdapterzYAdapts source to Lines interface

    Note: The creation of this class is expensive.
    c                 @    || _         d | _        | j                          y r   )codestarts_initialize_line_starts)r	   source_codes     r
   r   zSourceLinesAdapter.__init__)   s    	$$&r   c                 F   g | _         | j                   j                  d       	 d}	 | j                  j                  d|      dz   }| j                   j                  |       ;# t        $ r Y nw xY w| j                   j                  t        | j                        dz          y )Nr   
   )r*   r   r)   index
ValueErrorr   )r	   is     r
   r+   z*SourceLinesAdapter._initialize_line_starts.   s    1	AIIOOD!,q0""1%   		3tyy>A-.s   >A" "	A.-A.c                 `    | j                   | j                  |dz
     | j                  |   dz
   S Nr/   )r)   r*   r	   linenos     r
   get_linezSourceLinesAdapter.get_line:   s.    yyVaZ04;;v3F3JKKr   c                 2    t        | j                        dz
  S r4   )r   r*   r	   s    r
   lengthzSourceLinesAdapter.length=   s    4;;!##r   c                 B    t        j                   | j                  |      S r   )bisectr*   )r	   offsets     r
   get_line_numberz"SourceLinesAdapter.get_line_number@   s    }}T[[&11r   c                 &    | j                   |dz
     S r4   r*   r5   s     r
   get_line_startz!SourceLinesAdapter.get_line_startC   s    {{6A:&&r   c                 &    | j                   |   dz
  S r4   r@   r5   s     r
   get_line_endzSourceLinesAdapter.get_line_endF   s    {{6"Q&&r   N)r#   r$   r%   __doc__r   r+   r7   r:   r>   rA   rC   r   r   r
   r'   r'   #   s+    
'

/L$2''r   r'   c                       e Zd Zd Zd Zd Zy)ArrayLinesAdapterc                     || _         y r   linesr	   rI   s     r
   r   zArrayLinesAdapter.__init__K   	    
r   c                 &    | j                   |dz
     S r4   rH   )r	   line_numbers     r
   r7   zArrayLinesAdapter.get_lineN   s    zz+/**r   c                 ,    t        | j                        S r   )r   rI   r9   s    r
   r:   zArrayLinesAdapter.lengthQ   s    4::r   N)r#   r$   r%   r   r7   r:   r   r   r
   rF   rF   J   s    +r   rF   c                       e Zd Zd Zd Zd Zy)LinesToReadlinec                      || _         || _        y r   )rI   current)r	   rI   r   s      r
   r   zLinesToReadline.__init__V   s    
r   c                     | j                   | j                  j                         k  r@| xj                   dz  c_         | j                  j                  | j                   dz
        dz   S y)Nr/   r.   r   )rR   rI   r:   r7   r9   s    r
   readlinezLinesToReadline.readlineZ   sO    <<4::,,..LLAL::&&t||a'784??r   c                 "    | j                         S r   )rT   r9   s    r
   __call__zLinesToReadline.__call__`   s    }}r   N)r#   r$   r%   r   rT   rV   r   r   r
   rP   rP   U   s    r   rP   c                   B    e Zd Zd Zd Z ej                  d      Zd Zy)_CustomGeneratorc                 <    || _         d| _        d| _        d| _        y )Nr   r   F)rI   	in_string
open_countcontinuationrJ   s     r
   r   z_CustomGenerator.__init__e   s    
!r   c                    | j                   j                         }g }d}||k  r||k  r]| j                   j                  |      j                         s4|dz  }||k  r*| j                   j                  |      j                         s4||k  rw|}	 | j                   j                  |      }| j	                  |       | j
                  s| j                  s| j                  r||k(  rn|dz  }\|j                  ||f       |dz  }||k  r|S r4   )	rI   r:   r7   strip_analyze_liner\   r[   rZ   r   )r	   sizer!   r2   r   lines         r
   rV   z_CustomGenerator.__call__k   s    zz  "4it)DJJ$7$7$:$@$@$BQ t)DJJ$7$7$:$@$@$BDy::..q1D&&t,!..$//T^^9FA  uaj)Q 4i  r   z,(\\*)((\'\'\'|"""|\'|")|#|\[|\]|\{|\}|\(|\))c                 *   d }| j                   j                  |      D ]  }|j                  d      }|j                  d      }t        |      dz  dk(  r7|dv rJ| j                  s|| _        n6| j                  |k(  s | j                  dv r|d| j                  z  k(  rd| _        | j                  r|dk(  r n6|dv r| xj
                  dz  c_        |d	v s| xj
                  dz  c_         |r|dk7  r|j                  d
      rd| _        y d| _        y )Nr/   r   )z'''z"""'")rd   rc      r   #z([{z)]}\TF)_main_tokensfinditergroupr   rZ   r[   endswithr\   )r	   ra   tokenmatchprefixs        r
   r_   z_CustomGenerator._analyze_line   s    &&//5 	%E[[^FKKNE6{Q!#00~~%*DN^^u,NNj0Ua$..>P5P%'DN~~|~1$%1$)	%* ESLT]]4%8 $D %Dr   N)	r#   r$   r%   r   rV   recompilerh   r_   r   r   r
   rX   rX   d   s$    ". 2::MNL&r   rX   c                 "     t        |              S r   )rX   rH   s    r
   custom_generatorrr      s    "E"$$r   c                   @    e Zd Zd Zd Zd
dZd
dZd Zd Zd Z	d	 Z
y)LogicalLineFinderc                     || _         y r   rH   rJ   s     r
   r   zLogicalLineFinder.__init__   rK   r   c                 V   t        | j                  j                  |            }d}	 t        | j                  ||      }	 | j	                  ||      S # t
        $ rL}|dz  }|dk(  r||j                  |z   dz
  }t        | j                  j                  |            }Y d }~nd }~ww xY w)Nr   r/      )count_line_indentsrI   r7   get_block_start_block_logical_lineIndentationErrorr6   )r	   rM   indentstriesblock_starter6   s          r
   logical_line_inz!LogicalLineFinder.logical_line_in   s    $TZZ%8%8%EF)$**k7KKJ//[II# J
A:GK/!3,TZZ-@-@-HIJ	 s    A 	B'AB""B'Nc              #   H   K   | j                  ||      D ]	  \  }}|  y wr   )generate_regions)r	   
start_lineend_liner   r   s        r
   generate_startsz!LogicalLineFinder.generate_starts   s+     //
HE 	JE3K	s    "c              #     K   d}t        | j                  |      }	 | j                  |      D ];  \  }}||z   dz
  }| j                  |      }|||k\  r y ||z   dz
  }||k\  s6||f = y # t        j
                  $ r Y y w xY wwr4   )rP   rI   _logical_lines_first_non_blanktokenize
TokenError)	r	   r   r   r~   rT   r   r   
real_startreal_ends	            r
   r   z"LogicalLineFinder.generate_regions   s     "4::{;
	"11(; 1
s"[014
!22:>
'J(,B,q0+%x001 "" 		s:   B8A, BA, #A, +B,B?BBBc                     t        | j                  |      }||z
  dz   }| j                  ||      }| j                  |d   |z   dz
        }|d   | j                  j	                         }||fS |d   |z   dz
  }||fS Nr/   r   )rP   rI   _calculate_logicalr   r:   )r	   r~   rM   rT   shiftedregionr   r   s           r
   rz   z%LogicalLineFinder._block_logical_line   s    "4::{;+a/((7;%%fQi+&=&AB!9**##%C cz )k)A-Cczr   c                     d}	 | j                  |      D ]  \  }}||k  r||fc S |dz   } 	 |d fS # t        j                  $ r-}|j                  d   d   }|t	        ||dz
        fcY d }~S d }~ww xY wr   )r   r   r   argsmax)r	   rT   rM   last_endr   r   r   rR   s           r
   r   z$LogicalLineFinder._calculate_logical   s    	:"11(; #
s#%!3<'7# $ "" 	:ffQilGc(GaK899	:s   !2 2 A2"A-'A2-A2c              #      K   d}t        j                  |      D ],  }|d   d   }|d   t        j                  k(  s"||f |dz   }. y w)Nr/   r   r   )r   generate_tokensrl   NEWLINE)r	   rT   r   current_tokenrR   s        r
   r   z LogicalLineFinder._logical_lines   sY     %55h? 	'M#A&q)GQ5==0))"Q;		's
   9A
A
c                    |}|| j                   j                         k  ra| j                   j                  |      j                         }|r|j	                  d      s|S |dz  }|| j                   j                         k  ra|S )Nrf   r/   )rI   r:   r7   r^   
startswith)r	   rM   rR   ra   s       r
   r   z"LogicalLineFinder._first_non_blank   ss    

))++::&&w/557DDOOC0qLG	 

))++
 r   r/   N)r#   r$   r%   r   r   r   r   rz   r   r   r   r   r   r
   rt   rt      s+    J 	
 'r   rt   c                 4    t        |       j                         S r   )rt   r   rH   s    r
   tokenizer_generatorr      s    U#4466r   c                   R    e Zd ZefdZdZed        ZdZed        Z	d Z
d ZddZy)	CachingLogicalLineFinderc                      || _         || _        y r   )rI   	_generate)r	   rI   generates      r
   r   z!CachingLogicalLineFinder.__init__   s    
!r   Nc                 R    | j                   | j                          | j                   S r   )_starts_init_logicalsr9   s    r
   r*   zCachingLogicalLineFinder.starts   s"    <<!||r   c                 R    | j                   | j                          | j                   S r   )_endsr   r9   s    r
   endszCachingLogicalLineFinder.ends  s"    ::!zzr   c                     | j                   j                         dz   }dg|z  | _        dg|z  | _        | j	                  | j                         D ]#  \  }}d| j                  |<   d| j                  |<   % y)z.Should initialize _starts and _ends attributesr/   NT)rI   r:   r   r   r   )r	   r`   r   r   s       r
   r   z'CachingLogicalLineFinder._init_logicals  sn    zz  "Q&v}Vd]
..4 	#JE3"&DLL"DJJsO	#r   c                    |}|dkD  r)| j                   |   s|dz  }|dkD  r| j                   |   s|dk(  r	 | j                   j                  d|      }|| j                  j                  d|      fS # t        $ r ||fcY S w xY w)Nr   r/   T)r*   r0   r1   r   )r	   rM   r   s      r
   r   z(CachingLogicalLineFinder.logical_line_in  s    aiE 2QJE aiE 2A:2))$< tyytU344  2#[112s   A1 1B Bc              #      K   || j                   j                         }t        ||      D ]  }| j                  |   s|  y wr   )rI   r:   ranger*   )r	   r   r   r0   s       r
   r   z(CachingLogicalLineFinder.generate_starts!  sE     zz((*H:x0 	E{{5!	s
   ;AAr   )r#   r$   r%   rr   r   r   propertyr*   r   r   r   r   r   r   r   r
   r   r      sK    '7 " G 
 E 
#	5r   r   c           	      0   t               }t        |dd      D ]  }|j                  | j                  |            }|&t	        | j                  |            |k  sD|j
                  j                         }|dkD  r|j                  d      s|j                  d      rud}t        |t        |dz   | j                         dz               D ]@  }| j                  |      D ]#  }	|	dk(  r n|	dv r|dz  }|	d	v s|dz  }|dk  s# n |dk  s@ n |dk  r|c S  y)
zApproximate block startr   r/   ifforrw   rf   z[(z)])
get_block_start_patternsr   searchr7   rx   stringlstripr   minr:   )
rI   r6   maximum_indentspatternr2   rm   stripedbracsjcs
             r
   ry   ry   )  s'   &(G61b! u~~a01"5>>!#45Hll))+G1u++D1W5G5G5Nq#a!eU\\^a-?"@A A"^^A. &8!9!QJE9!QJE$qy %& qy 19H12 r   c                  f    t         s&d} t        j                  | t        j                        a t         S )NzS^\s*(((def|class|if|elif|except|for|while|with)\s)|((try|else|finally|except)\s*:)))_block_start_patternro   rp   M)r   s    r
   r   r   K  s,    0 	  "zz'2448r   c                 H    d}| D ]  }|dk(  r|dz  }|dk(  r|dz  }|c S  y)Nr    r/   	   r   )ra   r|   chars      r
   rx   rx   V  s@    G 3;qLGT\qLGN r   c                     d}d}|d|z  }nd}|| dj                  ||j                  dd      ||j                  dd      g      fz  S )Nz """(\\.|"(?!"")|\\\n|[^"\\])*"""z"(\\.|\\\n|[^"\\\n])*"z(?P<%s>%%s)(%%s)z%s(%s)|rd   rc   )r   replace)rn   prefix_group_namelongstrshortstrr   s        r
   get_string_pattern_with_prefixr   b  sl    1G(H$$'88S)  c*		

 
 
r   c                      d} t        |       S )Nz(?<![fF])(\b[uUbB]?[rR]?)?r   rn   s    r
   get_string_patternr   v  s    *F)&11r   c                      d} t        |       S )Nz(\b[rR]?[fF]|[fF][rR]?)r   r   s    r
   get_formatted_string_patternr   {  s    'F)&11r   c                       d} t        | d      S )Nz[bBfFrRuU]{,4}rn   )r   r   r   s    r
   get_any_string_patternr     s    F)" r   c                       y)Nz#[^\n]*r   r   r   r
   get_comment_patternr     s    r   )P   r   )r<   ro   rl   r   r   r'   rF   rP   rX   rr   rt   r   r   ry   r   r   rx   r   r   r   r   r   r   r   r
   <module>r      s     	   8$' $'N  :& :&z%L L^7. .b>   	(2
2
r   