
    Æe|                      p    d dl mZmZ d dlmZ  G d d      Z G d d      Z G d d      Z G d	 d
      Zy)    )	pyobjectsworder)Lambdac                   @    e Zd Zd Zd ZddZed        Zed        Zy)DefinitionInfoc                 J    || _         || _        || _        || _        || _        y N)function_name	is_methodargs_with_defaultsargs_argkeywords_arg)selfr
   r   r   r   r   s         =/usr/lib/python3/dist-packages/rope/refactor/functionutils.py__init__zDefinitionInfo.__init__   s*     +""4 (    c                 B    | j                    d| j                          dS )N())r
   arguments_to_stringr   s    r   	to_stringzDefinitionInfo.to_string   s&    $$%Qt'?'?'A&B!DDr   c                 R   g }| j                   D ]/  \  }}||j                  | d|        |j                  |       1 | j                  |j                  d| j                  z          | j                  r|j                  d| j                  z          dj	                  ||d        S )N=***, )r   appendr   r   join)r   
from_indexparamsargdefaults        r   r   z"DefinitionInfo.arguments_to_string   s     33 	#LC"Qwi01c"		#
 ==$MM#-.MM$!2!223yy
,--r   c                    | j                         }|dk(  }|dk(  }t        |||      }|j                         \  }}d }d }	|r|d   j                  d      r|d   dd  }	|d= |r|d   j                  d      r|d   dd  }|d= |D 
cg c]  }
|
d f }}
|j	                  |       t        |j                         ||||	      S c c}
w )Nmethodlambdar      r      )get_kind_FunctionParserget_parameters
startswithextendr   get_function_name)
pyfunctioncodekindr   	is_lambdainfoargskeywordsr   r   namer   s               r   _readzDefinitionInfo._read   s    ""$H$	H$	tY	:,,.hDH''-8AB<LRDH'',Bx|HR7;<ttTl<<!!(+""$
 	
 =s   C c                 \   | j                         }t        j                  |j                        }| j	                         j
                  }|j                  j                  |      }t        | t              r|j                  |      }n|j                  |      }t        j                  | |      S r	   )
get_moduler   Wordersource_codeget_astlinenolinesget_line_start
isinstancer   get_lambda_and_argsget_function_and_args_in_headerr   r8   )r0   pymoduleword_finderr>   startcalls         r   readzDefinitionInfo.read8   s    ((*mmH$8$89##%,,--f5j&)2259D>>uED##J55r   N)r   )	__name__
__module____qualname__r   r   r   staticmethodr8   rH    r   r   r   r      s:    )E. 
 
0 	6 	6r   r   c                   h    e Zd Zd Zd Zed        Zed        Zed        Zed        Z	ed        Z
y)	CallInfoc                 f    || _         || _        || _        || _        || _        || _        || _        y r	   )r
   r5   r6   r   r   implicit_argconstructor)r   r
   r5   r6   r   r   rQ   rR   s           r   r   zCallInfo.__init__F   s9     +	  ((&r   c           	      z   | j                   }| j                  r| j                  d   dz   | j                   z   }g }d}| j                  s| j                  rd}| j                  |d  r|j	                  | j                  |d         | j
                  r3|j	                  | j
                  D cg c]  \  }}| d|  c}}       | j                  |j                  d| j                  z          | j                  r|j                  d| j                  z          dj                  |dj                  |            S c c}}w )	Nr   .r)   r   r   r   z{}({})r   )r
   rQ   r5   rR   r.   r6   r   r   r   formatr   )r   functionr!   rF   r7   values         r   r   zCallInfo.to_stringX   s   %%yy|c)D,>,>>H 0 0E99UVMM$))EF+,==MMNudV1UG,NO==$MM#-.MM$!2!223x6):;; Os   )D7
c           	         t         j                  | |      }t         j                  |      }t         j                  |      }t	        ||xs |      }|j                         \  }}	d }
d }|r|d   j                  d      r|d   dd  }|d= |r|d   j                  d      r|d   dd  }
|d= |r"|j                  d|j                  d   d          t        |j                         ||	|
||xs ||      S )Nr'   r   r(   r   r)   r   )
rO   _is_method_call	_is_class_is_classmethodr+   r,   r-   insertr   r/   )primarypynamedefinition_infor1   is_method_callis_constructoris_classmethodr4   r5   r6   r   r   s               r   rH   zCallInfo.readj   s   !11'6B!++F3!11&9t^%E~F,,.hDH''-8AB<LRDH'',Bx|HRKK?==a@CD""$,n
 	
r   c                     | d uxrM t        | j                         j                         t        j                        xr t
        j                  |      S r	   )rA   
get_objectget_typer   PyClassrO   
_is_method)r]   r^   s     r   rY   zCallInfo._is_method_call   sK     4 ,7--/88:I<M<MN,##F+	
r   c                 ^    | d uxr( t        | j                         t        j                        S r	   )rA   rd   r   rf   r^   s    r   rZ   zCallInfo._is_class   s(    T!Xj1B1B1DiFWFW&XXr   c                     | It        | j                         t        j                        r!| j                         j	                         dk(  S y)Nr%   FrA   rd   r   
PyFunctionr*   ri   s    r   rg   zCallInfo._is_method   s@    *V->->-@)BVBV"W$$&//1X==r   c                     | It        | j                         t        j                        r!| j                         j	                         dk(  S y)NclassmethodFrk   ri   s    r   r[   zCallInfo._is_classmethod   s@    *V->->-@)BVBV"W$$&//1]BBr   N)rI   rJ   rK   r   r   rL   rH   rY   rZ   rg   r[   rM   r   r   rO   rO   E   sr    '$<$ 
 
4 
 
 Y Y  
  r   rO   c                       e Zd Zd Zd Zy)ArgumentMappingc                    || _         i | _        g | _        g | _        t	        |j
                        D ]Z  \  }}|t        |j                        k  r"|j                  |   d   }|| j                  |<   @| j                  j                  |       \ |j                  D ]N  \  }}d}|j                  D ]  }|d   |k(  s|| j                  |<    1 | j                  j                  ||f       P y )Nr   r'   )
	call_info
param_dictkeyword_argsr   	enumerater5   lenr   r   r6   )r   r_   rr   indexrW   r7   pairs          r   r   zArgumentMapping.__init__   s    "%inn5 	,LE5s?==>>&99%@C(-%$$U+	, %-- 	8KD%E':: 87d?,1DOOD)8
 !!(($7	8r   c           	         g }g }t        t        |j                              D ]  }|j                  |   d   }|| j                  v r|j	                  | j                  |          Bt        |t        |j                              D ]C  }|j                  |   d   }|| j                  v s$|j	                  || j                  |   f       E  n |j                  | j                         |j                  | j                         t        | j                  j                  ||| j                  j                  | j                  j                  | j                  j                  | j                  j                        S )Nr   )rangerv   r   rs   r   r.   r   rt   rO   rr   r
   r   rQ   rR   )r   r_   r5   r6   rw   r7   is          r   to_call_infozArgumentMapping.to_call_info   s<   3AABC 		E"55e<Q?Dt&DOOD12uc/*L*L&MN GA*==a@CDt. tt/D(EFG 		 	DMM"))*NN((NN##NN''NN''NN&&
 	
r   N)rI   rJ   rK   r   r|   rM   r   r   rp   rp      s    8(
r   rp   c                   ,    e Zd ZddZd Zd Zd Zd Zy)r+   c                 B   || _         || _        t        j                  | j                         | _        |r!| j                   j                  d      | _        n | j                   j                  d      | _        | j                  j                  | j                        | _        y )N:r   )	rG   rQ   r   r;   rE   rindexlast_parens_find_parens_startfirst_parens)r   rG   rQ   r3   s       r   r   z_FunctionParser.__init__   sv    	(!==3#yy//4D#yy//4D ,,??@P@PQr   c                 8   | j                   j                  | j                  | j                        \  }}| j	                         rT| j
                  d | j
                  j                  dd| j                         }|j                  d|j                                ||fS )NrT   r   )	rE   r,   r   r   is_called_as_a_methodrG   r   r\   strip)r   r5   r6   instances       r   r,   z_FunctionParser.get_parameters   s    ))88t//
h %%'yy!N499#3#3CD<M<M#NOHKK8>>+,X~r   c                     | j                         rC| j                  j                  | j                  j	                  dd| j
                        dz
        S y )NrT   r   r)   )r   rE   get_primary_atrG   r   r   r   s    r   get_instancez_FunctionParser.get_instance   sM    %%'##22		  a):):;a?  (r   c                     | j                         r(| j                  j                  | j                  dz
        S | j                  j	                  | j                  dz
        S )Nr)   )r   rE   get_word_atr   r   r   s    r   r/   z!_FunctionParser.get_function_name   sR    %%'##//0A0AA0EFF##2243D3Dq3HIIr   c                 T    | j                   xr d| j                  d | j                   v S )NrT   )rQ   rG   r   r   s    r   r   z%_FunctionParser.is_called_as_a_method   s*      JSDII6I8I8I,J%JJr   N)F)rI   rJ   rK   r   r,   r   r/   r   rM   r   r   r+   r+      s    RJKr   r+   N)		rope.baser   r   rope.base.builtinsr   r   rO   rp   r+   rM   r   r   <module>r      s:    ' %=6 =6@V Vr,
 ,
^!K !Kr   