
    cx4                     d   d dl Z d dlZd dlmZmZmZmZmZm	Z	 d dl
mZmZ d dlmZmZ  G d d          Z G d d          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e          Z G d d          Z G d d          ZdS )    N)codeanalyzeevaluate	pyobjects
taskhandleutilsworder)ChangeContents	ChangeSet)functionutilsoccurrencesc                      e Zd Zd Zd Zddej        fdZd Zd Z	 e
j        d          d             Zd	 Z e
j                    d
             Z e
j                    d             Z e
j                    dd            Z e
j                    d             Z e
j                    d             Zddej        fdZdS )ChangeSignaturec                 B   || _         || _        || _        |                                  | j        J| j                                        1t          | j                                        t          j                  s$t          j
        j                            d          d S )Nz8Change method signature should be performed on functions)projectresourceoffset_set_name_and_pynamepyname
get_object
isinstancer   
PyFunctionropebase
exceptionsRefactoringError)selfr   r   r   s       >lib/python3.11/site-packages/rope/refactor/change_signature.py__init__zChangeSignature.__init__
   s     !!###K	{%%''	 dk4466	8LMM	
 )&77J  	 	    c                    t          j        | j        | j                  | _        | j                            | j                  }t          j        || j                  \  | _	        | _
        | j
        d S | j
                                        }t          |t          j                  rd|v r|d         | _
        d| _        | j
                                        }d | _        | j        dk    rzt          |t          j                  rbt          |j        t          j                  rE|j        }|                                |j        |                                         f| _        d S d S d S d S )Nr   )r   get_name_atr   r   namer   get_pymoduler   eval_location2primaryr   r   r   r   PyClassothersr   parentget_name)r   this_pymodulepyobjectpyclasss       r   r   z$ChangeSignature._set_name_and_pyname   sZ   &t}dkBB	11$-@@$,$;M4;$W$W!dk; 	F;))++h	 122 	#zX7M 	#":.DK"DI;))++I#	S8Y%9::	S 8?I,=>>	S
 oG"++--w~g>N>N>P>P/QRDKKK	S 	S 	S 	S 	S 	Sr   Nc                    || j                                         }t          d| j        z            }|                    dt          |                    }t          j        | j         | j        | j        | j	        |o| 
                                          }| j        r8| j        \  }}	t          j        | j         ||	d          }
t          ||
g          }|D ]}|                    |j                   t          | j         |||          }|                                }|#|                    t%          ||                     |                                 |S )NzChanging signature of <%s>zCollecting Changes)instancein_hierarchyT)
only_calls)r   get_python_filesr
   r"   create_jobsetlenr   create_finderr   r%   	is_methodr'   _MultipleFindersstarted_jobpath_ChangeCallsInModuleget_changed_module
add_changer	   finished_job)r   call_changerr/   	resourceshandlechangesjob_setfinderr"   r   constructor_finderfilechange_callschanged_files                 r   _change_callszChangeSignature._change_calls,   sp     	85577I849DEE&&';S^^LL*LIK\%:$..*:*:
 
 
 ; 	D;LD&!,!:dFt" " " &v/A&BCCF 	# 	#D	***/fdL L (::<<L G"">$#E#EFFF  """"r   c                 4    |                                  j        S )zGet function arguments.

        Return a list of ``(name, default)`` tuples for all but star
        and double star arguments.  For arguments that don't have a
        default, `None` will be used.
        )_definfoargs_with_defaultsr   s    r   get_argszChangeSignature.get_argsO   s     }}11r   c                 r    | j                                         }t          |j        t          j                  S N)r   r   r   r(   r   r&   )r   
pyfunctions     r   r5   zChangeSignature.is_methodX   s+    [++--
*+Y->???r   z(Use `ChangeSignature.get_args()` insteadc                 *    |                                  S rN   )rI   rK   s    r   get_definition_infoz#ChangeSignature.get_definition_info\   s    }}r   c                 n    t           j                            | j                                                  S rN   )r   DefinitionInforeadr   r   rK   s    r   rI   zChangeSignature._definfo`   s'    +001G1G1I1IJJJr   c                     t          | j                                        |                                 t	                      g          }|                     |          S rN   )_FunctionChangersr   r   rQ   ArgumentNormalizerrG   )r   changers     r   	normalizezChangeSignature.normalizec   sR    #K""$$d&>&>&@&@CUCWCWBX
 
 !!'***r   c                     t          | j                                        |                                 t	          |          g          }|                     |          S rN   )rV   r   r   rQ   ArgumentRemoverrG   r   indexrX   s      r   removezChangeSignature.removej   sU    #K""$$$$&&U##$
 

 !!'***r   c           
          t          | j                                        |                                 t	          ||||          g          }|                     |          S rN   )rV   r   r   rQ   ArgumentAdderrG   )r   r]   r"   defaultvaluerX   s         r   addzChangeSignature.adds   s[    #K""$$$$&&5$778
 

 !!'***r   c                     t          | j                                        |                                 t	          |          g          }|                     |          S rN   )rV   r   r   rQ   ArgumentDefaultInlinerrG   r\   s      r   inline_defaultzChangeSignature.inline_default|   sU    #K""$$$$&&#E**+
 

 !!'***r   c                     t          | j                                        |                                 t	          |          g          }|                     |          S rN   )rV   r   r   rQ   ArgumentReordererrG   )r   new_orderingrX   s      r   reorderzChangeSignature.reorder   sU    #K""$$$$&&|,,-
 

 !!'***r   Fc                     t          | j                                        |                                 |          }|                     ||||          S )a  Get changes caused by this refactoring

        `changers` is a list of `_ArgumentChanger`.  If `in_hierarchy`
        is `True` the changers are applied to all matching methods in
        the class hierarchy.
        `resources` can be a list of `rope.base.resource.File` that
        should be searched for occurrences; if `None` all python files
        in the project are searched.

        )rV   r   r   rI   rG   )r   changersr/   r>   task_handlefunction_changers         r   get_changeszChangeSignature.get_changes   sT    " -K""$$dmmoox
 
 !!lI{
 
 	
r   NN)__name__
__module____qualname__r   r   r   DEFAULT_TASK_HANDLErG   rL   r5   r   
deprecatedrQ   rI   rY   r^   rc   rf   rj   ro    r   r   r   r   	   s         S S S. -! ! ! !F2 2 2@ @ @ U@AA  BAK K K U+ + + U+ + + U+ + + + U+ + + U+ + + 2
 
 
 
 
 
r   r   c                   (    e Zd ZddZd Zd Zd ZdS )rV   Nc                 b    || _         || _        || _        |                                 | _        d S rN   )rO   definition_inforl   _get_changed_definition_infoschanged_definition_infos)r   rO   ry   rl   s       r   r   z_FunctionChangers.__init__   s2    $. (,(J(J(L(L%%%r   c                     | j         }|g}| j        D ]@}t          j        |          }|                    |           |                    |           A|S rN   )ry   rl   copydeepcopychange_definition_infoappend)r   ry   resultrX   s       r   rz   z/_FunctionChangers._get_changed_definition_infos   s`    .!"} 	+ 	+G"mO<<O**?;;;MM/****r   c                 @    | j         d                                         S N)r{   	to_string)r   calls     r   change_definitionz#_FunctionChangers.change_definition   s    ,R0::<<<r   c                 T   t           j                            ||| j        |          }t          j        | j        |          }t          | j        | j                  D ]\  }}|                    ||           |	                    | j        d                   
                                S r   )r   CallInforT   ry   ArgumentMappingzipr{   rl   change_argument_mappingto_call_infor   )r   r%   r   r   	call_infomappingry   rX   s           r   change_callz_FunctionChangers.change_call   s    !*//VT14
 
	  /0DiPP(+)4=)
 )
 	F 	F$OW ++OWEEEE##D$A"$EFFPPRRRr   rN   )rq   rr   rs   r   rz   r   r   rv   r   r   rV   rV      s^        M M M M  = = =S S S S Sr   rV   c                       e Zd Zd Zd ZdS )_ArgumentChangerc                     d S rN   rv   r   ry   s     r   r   z'_ArgumentChanger.change_definition_info       r   c                     d S rN   rv   )r   ry   argument_mappings      r   r   z(_ArgumentChanger.change_argument_mapping   r   r   N)rq   rr   rs   r   r   rv   r   r   r   r      s2              r   r   c                       e Zd ZdS )rW   N)rq   rr   rs   rv   r   r   rW   rW      s        Dr   rW   c                        e Zd Zd Zd Zd ZdS )r[   c                     || _         d S rN   )r]   r   r]   s     r   r   zArgumentRemover.__init__   s    


r   c                    | j         t          |j                  k     r|j        | j         = d S | j         t          |j                  k    r|j        	d |_        d S | j         t          |j                  k    r|j        |j        .| j         t          |j                  dz   k    r|j        |j        d |_        d S d S d S d S N   )r]   r3   rJ   args_argkeywords_arg)r   r   s     r   r   z&ArgumentRemover.change_definition_info   s    :I8999 	*,TZ888J#i:;;;	*"	* "&IJ#i:;;;		*"		* &		*
 J#i:;;a??		* "		* &		* &*I"""		* 		* 		* 		* 		* 		*r   c                     | j         t          |j                  k     r |j        d         }||j        v r|j        |= d S d S d S Nr   )r]   r3   rJ   
param_dict)r   ry   r   r"   s       r   r   z'ArgumentRemover.change_argument_mapping   s^    :O>??? 	-"5a8Dw)) -&t,,,	- 	-- -r   Nrq   rr   rs   r   r   r   rv   r   r   r[   r[      sA          * * *&- - - - -r   r[   c                   "    e Zd ZddZd Zd ZdS )r`   Nc                 >    || _         || _        || _        || _        d S rN   )r]   r"   ra   rb   )r   r]   r"   ra   rb   s        r   r   zArgumentAdder.__init__   s"    
	


r   c                     |j         D ]?}|d         | j        k    r,t          j        j                            d| j        z            @|j                             | j        | j        | j        f           d S )Nr   z!Adding duplicate parameter: <%s>.)	rJ   r"   r   r   r   r   insertr]   ra   )r   ry   pairs      r   r   z$ArgumentAdder.change_definition_info   s    #6 	 	DAw$)# i*;;7$)C   	*11$*ty$,>WXXXXXr   c                 @    | j         | j         |j        | j        <   d S d S rN   )rb   r   r"   )r   ry   r   s      r   r   z%ArgumentAdder.change_argument_mapping  s-    : 	7,0JGty)))	7 	7r   rp   r   rv   r   r   r`   r`      sI           Y Y Y7 7 7 7 7r   r`   c                        e Zd Zd Zd Zd ZdS )re   c                 "    || _         d| _        d S )NF)r]   r^   r   s     r   r   zArgumentDefaultInliner.__init__  s    
r   c                 f    | j         r)|j        | j                 d         d f|j        | j        <   d S d S r   )r^   rJ   r]   r   s     r   r   z-ArgumentDefaultInliner.change_definition_info  sB    ; 	24:>qA>O.tz:::	 	r   c                     |j         | j                 d         }|j         | j                 d         }|||j        vr||j        |<   d S d S d S )Nr   r   )rJ   r]   r   )r   ry   r   ra   r"   s        r   r   z.ArgumentDefaultInliner.change_argument_mapping  sh    !4TZ@C1$*=a@ 	/4w/A#A 	/'.Gt$$$	/ 	/ 	/ 	/r   Nr   rv   r   r   re   re     sA            / / / / /r   re   c                       e Zd ZddZd ZdS )rh   Nc                 "    || _         || _        dS )a  Construct an `ArgumentReorderer`

        Note that the `new_order` is a list containing the new
        position of parameters; not the position each parameter
        is going to be moved to. (changed in ``0.5m4``)

        For example changing ``f(a, b, c)`` to ``f(c, a, b)``
        requires passing ``[2, 0, 1]`` and *not* ``[1, 2, 0]``.

        The `autodef` (automatic default) argument, forces rope to use
        it as a default if a default is needed after the change.  That
        happens when an argument without default is moved after
        another that has a default value.  Note that `autodef` should
        be a string or `None`; the latter disables adding automatic
        default.

        N)	new_orderautodef)r   r   r   s      r   r   zArgumentReorderer.__init__  s    $ #r   c                    t          |j                  }t          | j                  D ]\  }}|j        |         ||<   d}t          t          |                    D ]#\  }\  }}|d}|r|| j        || j        f||<   $||_        d S )NFT)listrJ   	enumerater   r   )r   ry   new_args	new_indexr]   seen_defaultargra   s           r   r   z(ArgumentReorderer.change_definition_info/  s    :;; )$. 9 9 	L 	LIu"1"DU"KHY%.tH~~%>%> 	6 	6!E>C $# 6 6DL 6#&"5-5***r   rN   )rq   rr   rs   r   r   rv   r   r   rh   rh     s7           *
6 
6 
6 
6 
6r   rh   c                       e Zd Zd Zd Zeej        d                         Zeej        d                         Z	eej        d                         Z
dS )r9   c                 >    || _         || _        || _        || _        d S rN   )r   occurrence_finderr   r=   )r   r   r   r   r=   s        r   r   z_ChangeCallsInModule.__init__=  s&    !2 (r   c                    t          j        | j                  }t          j        | j                  }| j                            | j                  D ]}|                                s|	                                s+|
                                \  }}|                    |dz
            \  }}|                                rA|                                \  }}	| j                            ||	| j        ||                   }
n'| j                            | j        ||                   }
|
|                    |||
           |                                S r   )r   Wordersourcer   ChangeCollectorr   find_occurrencesr   	is_called
is_definedget_primary_rangeget_word_parens_rangeget_primary_and_pynamer=   r   r   r;   get_changed)r   word_finderchange_collector
occurrencestartendbegin_parens
end_parensr%   r   changed_calls              r   r:   z'_ChangeCallsInModule.get_changed_moduleC  sZ   mDK00&6t{CC0AA$-PP 	M 	MJ'')) *2G2G2I2I #5577JE3'2'H'Hq'Q'Q$L*##%% ","C"C"E"E#0<<VT[z1A%B     $0BBKj 01     M ++E:|LLL++---r   c                 @    | j                             | j                  S rN   )r   r#   r   rK   s    r   pymodulez_ChangeCallsInModule.pymoduleX  s     |((777r   c                 Z    | j         | j                                         S | j        j        S rN   )r   rT   r   source_coderK   s    r   r   z_ChangeCallsInModule.source]  s-     = 	-=%%'''=,,r   c                     | j         j        S rN   )r   linesrK   s    r   r   z_ChangeCallsInModule.linese  s     }""r   N)rq   rr   rs   r   r:   propertyr   saveitr   r   r   rv   r   r   r9   r9   <  s        ) ) ). . .* 
\8 8 \ X8 
\- - \ X- 
\# # \ X# # #r   r9   c                       e Zd Zd ZddZdS )r6   c                     || _         d S rN   )finders)r   r   s     r   r   z_MultipleFinders.__init__l  s    r   Nc                     g }| j         D ]+}|                    |                    ||                     ,|                    d            |S )Nc                 *    |                                  S rN   )r   )xs    r   <lambda>z3_MultipleFinders.find_occurrences.<locals>.<lambda>s  s    1+>+>+@+@ r   )key)r   extendr   sort)r   r   r   all_occurrencesrB   s        r   r   z!_MultipleFinders.find_occurrenceso  sb    l 	P 	PF""6#:#:8X#N#NOOOO!@!@AAAr   rp   )rq   rr   rs   r   r   rv   r   r   r6   r6   k  s7               r   r6   )r}   rope.base.exceptionsr   	rope.baser   r   r   r   r   r   rope.base.changer	   r
   rope.refactorr   r   r   rV   r   rW   r[   r`   re   rh   r9   r6   rv   r   r   <module>r      s7        Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4[
 [
 [
 [
 [
 [
 [
 [
|S S S S S S S SB       	 	 	 	 	) 	 	 	- - - - -& - - -<7 7 7 7 7$ 7 7 7(/ / / / /- / / /& 6  6  6  6  6(  6  6  6F,# ,# ,# ,# ,# ,# ,# ,#^	 	 	 	 	 	 	 	 	 	r   