
    c-                         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dS )    Nc                   "    e Zd Zd ZddZd ZdS )ChangeCollectorc                 "    || _         g | _        d S N)textchanges)selfr   s     5lib/python3.11/site-packages/rope/base/codeanalyze.py__init__zChangeCollector.__init__   s    	    Nc                 b    || j         ||         }| j                            |||f           d S r   )r   r   append)r	   startendnew_texts       r
   
add_changezChangeCollector.add_change   s=     	,ys+HUC233333r   c                 ~   | j         sd S | j                             d            g }d}| j         D ]/}|\  }}}|                    | j        ||         |z              |}0|t	          | j                  k     r"|                    | j        |d                     d                    |          }|| j        k    r|S d S )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    | 	4oo...l 	 	F%E3MM$)L$67$>???LL#di..( 	4MM$)LMM2333TY 	M	 	r   r   )__name__
__module____qualname__r   r   r"   r   r   r
   r   r      sF          4 4 4 4
    r   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
SourceLinesAdapterzYAdapts source to Lines interface

    Note: The creation of this class is expensive.
    c                 J    || _         d | _        |                                  d S r   )codestarts_initialize_line_starts)r	   source_codes     r
   r   zSourceLinesAdapter.__init__)   s(    	$$&&&&&r   c                 @   g | _         | j                             d           	 d}	 | j                            d|          dz   }| j                             |           9# t          $ r Y nw xY w| j                             t          | j                  dz              d S )Nr   T
   )r*   r   r)   index
ValueErrorr   )r	   is     r
   r+   z*SourceLinesAdapter._initialize_line_starts.   s    1	A&IOOD!,,q0""1%%%&  	 	 	D	3ty>>A-.....s   <A 
A,+A,c                 X    | j         | j        |dz
           | j        |         dz
           S Nr/   )r)   r*   r	   linenos     r
   get_linezSourceLinesAdapter.get_line:   s+    yVaZ04;v3F3JJKKr   c                 0    t          | j                  dz
  S r4   )r   r*   r	   s    r
   lengthzSourceLinesAdapter.length=   s    4;!##r   c                 6    t          j         | j        |          S r   )bisectr*   )r	   offsets     r
   get_line_numberz"SourceLinesAdapter.get_line_number@   s    }T[&1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 L L$ $ $2 2 2' ' '' ' ' ' 'r   r'   c                        e Zd Zd Zd Zd ZdS )ArrayLinesAdapterc                     || _         d S 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    z+/**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   sA          + + +    r   rF   c                        e Zd Zd Zd Zd ZdS )LinesToReadlinec                 "    || _         || _        d S r   )rI   current)r	   rI   r   s      r
   r   zLinesToReadline.__init__V   s    
r   c                     | j         | j                                        k    r5| xj         dz  c_         | j                            | j         dz
            dz   S dS )Nr/   r.   r   )rR   rI   r:   r7   r9   s    r
   readlinezLinesToReadline.readlineZ   sW    <4:,,... 	@LLALL:&&t|a'7884??rr   c                 *    |                                  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   sA                r   rP   c                   @    e Zd Zd Zd Z ej        d          Zd ZdS )_CustomGeneratorc                 >    || _         d| _        d| _        d| _        d S )Nr   r   F)rI   	in_string
open_countcontinuationrJ   s     r
   r   z_CustomGenerator.__init__e   s%    
!r   c                    | j                                         }g }d}||k    r||k    rc| j                             |                                          s7|dz  }||k    r,| j                             |                                          7||k    rp|}	 | j                             |          }|                     |           | j        s| j        s| j        r||k    rn|dz  }Q|                    ||f           |dz  }||k    |S r4   )	rI   r:   r7   strip_analyze_liner\   r[   rZ   r   )r	   sizer!   r2   r   lines         r
   rV   z_CustomGenerator.__call__k   sG   z  ""4i 	t) DJ$7$7$:$:$@$@$B$B Q t) DJ$7$7$:$:$@$@$B$B Dy :..q11D&&t,,,!.26/EI^9 FA uaj)))Q 4i 	  r   z,(\\*)((\'\'\'|"""|\'|")|#|\[|\]|\{|\}|\(|\))c                 
   d }| j                             |          D ]}|                    d          }|                    d          }t          |          dz  dk    rC|dv r8| j        s|| _        n)| j        |k    s| j        dv r|d| j        z  k    rd| _        | j        r|dk    r n*|dv r| xj        dz  c_        |d	v r| xj        dz  c_        |r$|dk    r|                    d
          r	d| _        d S d| _        d S )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   sV   &//55 	% 	%E[[^^FKKNNE6{{Q!# 00 (~ (%*DNN^u, (Nj0(5:a$.>P5P( &(DN~ | ~ %1$% %1$ 	&ESL 	&T]]4%8%8 	& $D %Dr   N)	r#   r$   r%   r   rV   recompilerh   r_   r   r   r
   rX   rX   d   sU        " " "  . 2:MNNL& & & & &r   rX   c                 0     t          |                       S r   )rX   rH   s    r
   custom_generatorrr      s    "E""$$$r   c                   B    e Zd Zd Zd ZddZddZd Zd Zd	 Z	d
 Z
dS )LogicalLineFinderc                     || _         d S r   rH   rJ   s     r
   r   zLogicalLineFinder.__init__   rK   r   c                 b   t          | j                            |                    }d}	 t          | j        ||          }	 |                     ||          S # t
          $ rK}|dz  }|dk    r||j        |z   dz
  }t          | j                            |                    }Y d }~nd }~ww xY w)Nr   Tr/      )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    $TZ%8%8%E%EFF		J)$*k7KKKJ//[III# J J J
A: GK/!3,TZ-@-@-H-HIIJ			Js   A 
B-"AB((B-r/   Nc              #   J   K   |                      ||          D ]	\  }}|V  
d S r   )generate_regions)r	   
start_lineend_liner   r   s        r
   generate_startsz!LogicalLineFinder.generate_starts   s>      //
HEE 	 	JE3KKKK	 	r   c              #     K   d}t          | j        |          }	 |                     |          D ]A\  }}||z   dz
  }|                     |          }|	||k    r d S ||z   dz
  }||k    r||fV  Bd S # t          j        $ r Y d S w xY 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 1
s"[014
!22:>>
 J(,B EE,q0+ 1%x00001 1 " 	 	 	DD	s   A A4 A4 4BBc                    t          | j        |          }||z
  dz   }|                     ||          }|                     |d         |z   dz
            }|d         | j                                        }n|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B!9 	.*##%%CC)k)A-Cczr   c                     d}	 |                      |          D ]\  }}||k    r||fc S |dz   }nD# t          j        $ r2}|j        d         d         }|t	          ||dz
            fcY d }~S d }~ww xY w|d fS 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# " 	: 	: 	:fQilGc(GaK889999999	: $s   %1 1 A2 'A-'A2-A2c              #      K   d}t          j        |          D ]1}|d         d         }|d         t          j        k    r||fV  |dz   }2d S )Nr/   r   r   )r   generate_tokensrl   NEWLINE)r	   rT   r   current_tokenrR   s        r
   r   z LogicalLineFinder._logical_lines   sm      %5h?? 	' 	'M#A&q)GQ5=0 '))))"Q;		' 	'r   c                    |}|| j                                         k     rg| j                             |                                          }|r|                    d          s|S |dz  }|| j                                         k     g|S )Nrf   r/   )rI   r:   r7   r^   
startswith)r	   rM   rR   ra   s       r
   r   z"LogicalLineFinder._first_non_blank   s    
))+++ 	:&&w//5577D DOOC00 qLG	 
))+++ 	
 r   r/   N)r#   r$   r%   r   r   r   r   rz   r   r   r   r   r   r
   rt   rt      s          J J J       	 	 	
  
  
 ' ' '    r   rt   c                 D    t          |                                           S r   )rt   r   rH   s    r
   tokenizer_generatorr      s    U##44666r   c                   `    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dS )
CachingLogicalLineFinderc                 "    || _         || _        d S r   )rI   	_generate)r	   rI   generates      r
   r   z!CachingLogicalLineFinder.__init__   s    
!r   Nc                 F    | j         |                                  | j         S r   )_starts_init_logicalsr9   s    r
   r*   zCachingLogicalLineFinder.starts   s&    < 	"!!!|r   c                 F    | j         |                                  | j         S r   )_endsr   r9   s    r
   endszCachingLogicalLineFinder.ends  s&    : 	"!!!zr   c                     | j                                         dz   }dg|z  | _        dg|z  | _        |                     | j                   D ]\  }}d| j        |<   d| j        |<   dS )z.Should initialize _starts and _ends attributesr/   NT)rI   r:   r   r   r   )r	   r`   r   r   s       r
   r   z'CachingLogicalLineFinder._init_logicals  sx    z  ""Q&v}Vd]
..44 	# 	#JE3"&DL"DJsOO	# 	#r   c                    |}|dk    r%| j         |         s|dz  }|dk    r| j         |         |dk    r1	 | j                             d|          }n# t          $ r ||fcY S w xY w|| j                            d|          fS )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2))$<< 2 2 2#[11112tytU3344s   A A"!A"r/   c              #      K   || j                                         }t          ||          D ]}| j        |         r|V  d S r   )rI   r:   ranger*   )r	   r   r   r0   s       r
   r   z(CachingLogicalLineFinder.generate_starts!  s]       	+z((**H:x00 	 	E{5! 	 	r   r   )r#   r$   r%   rr   r   r   propertyr*   r   r   r   r   r   r   r   r
   r   r      s        '7 " " " " G  X
 E  X
# # #	5 	5 	5     r   r   P   c           	         t                      }t          |dd          D ]%}|                    |                     |                    }|t	          |                     |                    |k    r|j                                        }|dk    r|                    d          s|                    d          rd}t          |t          |dz   | 	                                dz                       D ]D}|                     |          D ]$}	|	dk    r n|	d	v r|dz  }|	d
v r|dz  }|dk     r n%|dk     r nE|dk     r!|c S 'dS )zApproximate block startr   Nr/   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011	"5>>!#4#455H	 l))++G1u ++D11 W5G5G5N5N q#a!eU\\^^a-?"@"@AA  A"^^A.. & &8 "!E9 '!QJE9 &!QJE$qy & %qy 19 HHH1r   c                  `    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  s0     90 	  "z'2488r   c                 J    d}| D ]}|dk    r|dz  }|dk    r|dz  }|c S dS )Nr    r/   	   r   )ra   r|   chars      r
   rx   rx   V  sR    G  3; 	qLGGT\ 	qLGGNNN1r   c                     d}d}|d|z  }nd}|| d                     ||                    dd          ||                    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  s{    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11r   c                  $    d} t          |           S )Nz(\b[rR]?[fF]|[fF][rR]?)r   r   s    r
   get_formatted_string_patternr   {  s    'F)&111r   c                  (    d} t          | d          S )Nz[bBfFrRuU]{,4}rn   )r   r   r   s    r
   get_any_string_patternr     s$    F)"   r   c                      dS )Nz#[^\n]*r   r   r   r
   get_comment_patternr     s    :r   )r   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 L L L L L L^7 7 7. . . . . . . .b   >       	 	 	   (2 2 2
2 2 2
      r   