
    cb                        d dl Z d dlmZ d dlZd dlmZmZmZ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mZmZmZmZmZ d Zd Z G d d	          Z G d
 de          Z G d de          Z G d de          Zdee          de fdZ! G d d          Z" G d d          Z# G d d          Z$	 d!dZ%d Z&d Z'd Z(d Z)d  Z*dS )"    N)List)	codeanalyzeevaluate
exceptionslibutilspynames	pyobjects
taskhandleutilsworder)ChangeContents	ChangeSet)change_signaturefunctionutilsimportutilsmoveoccurrencesrenamesourceutilsc               #   F   K   d} 	 dt          |           z   dz   V  | dz  } )Nr   T__   )str)ns    4lib/python3.11/site-packages/rope/refactor/inline.pyunique_prefixr   .   s9      	ASVVmd""""	Q    c                    t          | ||          }d}|t          j        |          t          |t          j                  r|                                }t          |t          j                  rt          | ||          S t          |t          j	                  rt          | ||          S t          |                                t          j                  rt          | ||          S t          j        |          )zCreate a refactoring object for inlining

    Based on `resource` and `offset` it returns an instance of
    `InlineMethod`, `InlineVariable` or `InlineParameter`.

    zPInline refactoring should be performed on a method, local variable or parameter.)_get_pynamer   RefactoringError
isinstancer   ImportedName_get_imported_pynameAssignedNameInlineVariableParameterNameInlineParameter
get_objectr	   
PyFunctionInlineMethod)projectresourceoffsetpynamemessages        r   create_inliner0   5   s     (F33F	1   3)'222&'.// /,,..&'.// 9gx888&'/00 :w&999&##%%y';<< 3GXv666)'222r   c                        e Zd Zd Zd Zd ZdS )_Inlinerc                    || _         t          |||          | _        t          j        |                                d          }|                    |          | _        |                    |          | _	        || _
        || _        d S NT)r+   r   r.   r   Worderreadget_primary_rangeregionget_word_atnamer-   original)selfr+   r,   r-   range_finders        r   __init__z_Inliner.__init__P   sq    !'8V<<}X]]__d;;"44V<< ,,V44	 r   c                     d S N )r<   argskwdss      r   get_changesz_Inliner.get_changesY   s    r   c                     dS )z1Return either 'variable', 'method' or 'parameter'NrA   r<   s    r   get_kindz_Inliner.get_kind\   s      r   N)__name__
__module____qualname__r>   rD   rG   rA   r   r   r2   r2   O   sF        ! ! !  @ @ @ @ @r   r2   c                   b     e Zd Z fdZd Zd Zdddej        fdZd Z	d	 Z
d
 Zd Zd Z xZS )r*   c                     t                      j        |i | | j                                        | _        | j                                        | _        | j                                                                        | _        t          j
        | j        | j        | j                  | _        t          | j        | j                  | _        |                                  d S r@   )superr>   r.   r(   
pyfunction
get_modulepymoduleget_resourcer,   r   create_finderr+   r:   occurrence_finder_DefinitionGeneratornormal_generator_init_importsr<   rB   rC   	__class__s      r   r>   zInlineMethod.__init__a   s    $'$'''+002222442244AACC!,!:L$)T["
 "
 !5T\4? S Sr   c                     t          j        | j                  }t          j        | j        | j        |          \  }}|| _        t          | j        | j        |          | _	        d S )N)body)
r   get_bodyrN   r   moving_code_with_importsr+   r,   importsrT   others_generator)r<   rZ   r]   s      r   rV   zInlineMethod._init_importsl   s`    #DO445dlDMSWXXg 4L$/!
 !
 !
r   c                    | j                                         }| j        j        }|                                }| j         j        r/| j         j        }t          |d         d          r|d         j        }|                    |          }t          |
                    |j                  dz   t          | j        j                            }||fS )Nr   linenor   )rN   	get_scoperP   lines	get_start
decoratorshasattrr`   get_line_startminget_line_endendlensource_code)r<   scoperb   
start_linerd   start_offset
end_offsets          r   _get_scope_rangezInlineMethod._get_scope_ranget   s    ))++#__&&
?% 	23Jz!}h// 2']1
++J77uy))A-s4=3L/M/M
 

 j))r   TFNc                 P   t          d| j        z            }|| j                                        }|r$| j        g}|r|                    | j                   |                    dt          |                    }|D ]&}|	                    |j
                   || j        k    r,|                    |                     |||                     nd}|r| j        |k    r| j        }t          | j        || j        |          }	t!          j        | j        ||	                                          }
|
]t)          | j        |
|| j                  }
|rt-          | j        | j        |
|          }
|                    t1          ||
                     |                                 (|S )zGet the changes this refactoring makes

        If `remove` is `False` the definition will not be removed.  If
        `only_current` is `True`, the the current occurrence will be
        inlined, only.
        zInline method <%s>NzCollecting Changes)removeonly_current)r   r:   r+   get_python_filesr;   appendr,   create_jobsetrj   started_jobpath
add_change_defining_file_changesr-   #_InlineFunctionCallsForModuleHandler^   r   ModuleSkipRenamerrS   get_changed_module_add_importsr]   _remove_fromr.   r   finished_job)r<   rr   rs   	resourcestask_handlechangesjob_setfileaimhandleresults              r   rD   zInlineMethod.get_changes   s    049<== 	85577I 	0I 0  ///++,@#i..QQ 	# 	#D	***t}$ E""//\ 0       &DMT$9 &+C<L$(=s  /*D& $$&&   E)$,dlSSF W!-dlDKQU!V!V&&~dF'C'CDDD  """"r   c                    | j                                         }| j        j        }|                                 \  }}|                                }t          |dz   |                                          D ]0}|                    |          	                                dk    r|}0 t          |                    |          dz   t          | j        j                            }||fS )Nr    )rN   ra   rP   rb   rp   get_endrangelengthget_linestriprg   rh   rj   rk   )r<   rl   rb   startri   end_lineis          r   _get_removed_rangezInlineMethod._get_removed_range   s    ))++#**,,
s==??x!|U\\^^44 	 	A~~a  &&((B. %$$X..2C8Q4R4RSSs|r   c                    |                                  \  }}d }|rA| j        | j        k    r| j        }n)t	          | j                                                  dz   }t          | j        | j        | j        |          }d }|r| 	                                }t          j        | j        | j        ||||                                          }	t          | j        |	          S )Nd   )
aim_offset)r   r,   r;   r-   rj   r6   r{   r+   rU   _get_method_replacementr   r|   rS   r}   r   )
r<   r   rr   rs   rn   ro   r   r   replacementr   s
             r   rz   z#InlineMethod._defining_file_changes   s    #'#:#:#<#< j 	6}- 6k $-,,..//#54L$-)>3
 
 
  	96688K'"M
 
 


 	 dmV444r   c                     |                                  rPt          j        | j        j        | j                                                                                  }d|z  dz   S dS )N zpass
r   )_is_the_last_method_of_a_classr   get_indentsrP   rb   rN   ra   rc   )r<   indentss     r   r   z$InlineMethod._get_method_replacement   sb    ..00 	,!-#T_%>%>%@%@%J%J%L%L G =8++rr   c                 F   | j         j        }t          |t          j                  sdS t          j        |          \  }}| j        j        }| 	                                \  }}|||         
                                dk    o|||         
                                dk    S )NFr   )rN   parentr!   r	   PyClassr   get_body_regionrP   rk   rp   r   )r<   pyclassclass_start	class_endsource
func_startfunc_ends          r   r   z+InlineMethod._is_the_last_method_of_a_class   s    /('9#455 	5!,!<W!E!EY*#4466
H;z)*0022b8 9x	)*0022b8	
r   c                     dS )NmethodrA   rF   s    r   rG   zInlineMethod.get_kind   s    xr   )rH   rI   rJ   r>   rV   rp   r
   DEFAULT_TASK_HANDLErD   r   rz   r   r   rG   __classcell__rX   s   @r   r*   r*   `   s        	 	 	 	 	
 
 
* * *  2- - - -^  5 5 52  

 

 

      r   r*   c                   X     e Zd Z fdZd Zddddej        fdZd Zd Z	d	 Z
d
 Z xZS )r%   c                     t                      j        |i | | j                                        d         | _        | j                                        | _        |                                  |                                  d S Nr   )	rM   r>   r.   get_definition_locationrP   rQ   r,   _check_exceptional_conditionsrV   rW   s      r   r>   zInlineVariable.__init__   sx    $'$''';;==a@2244**,,,r   c                 h    t          | j        j                  dk    rt          j        d          d S )Nr   z4Local variable should be assigned once for inlining.)rj   r.   assignmentsr   r    rF   s    r   r   z,InlineVariable._check_exceptional_conditions   s>    t{&''1, 	-F  	 	r   TFNc                    |;t          j        | j                  r	| j        g}n| j                                        }|r4| j        g}|r*| j        | j        k    r|                    | j                   t          d| j	        z            }|
                    dt          |                    }|D ]}|                    |j                   || j        k    r@|                     |||          }	|                    t!          | j        |	                     nX|                     |||          }
|
?t%          | j        |
|| j                  }
|                    t!          ||
                     |                                 |S )NzInline variable <%s>zCalculating changes)r   	_is_localr.   r,   r+   rt   r;   ru   r   r:   rv   rj   rw   rx   _change_main_modulery   r   _change_moduler~   r]   r   )r<   rr   rs   r   docsr   r   jobsetr,   r   r   s              r   rD   zInlineVariable.get_changes   s     	<,, <!]O		 L99;;	 	0I 0$-4=8 0  ///2TY>??**+@#i..QQ! 
	" 
	"Hx}---4=( I11&,MM"">$-#H#HIIII,,Xv|LL I)$,$,WWF&&~h'G'GHHH!!!!r   c           	          d }|r| j         | j        k    r| j        }t          | j        | j        | j        | j        |||          S )N)rr   r8   r   )r;   r,   r8   _inline_variabler+   rP   r.   r:   )r<   rr   rs   r   r8   s        r   r   z"InlineVariable._change_main_module  sZ     	!DMT]: 	![FLMKI
 
 
 	
r   c                     t          | j        | j                  }t          j        | j        | j        |          \  | _        | _        d S r@   )	
_getvardefrP   r.   r   r\   r+   r,   importedr]   )r<   vardefs     r   rV   zInlineVariable._init_imports,  s?    DM4;77&*&CL$-'
 '
#t|||r   c                 l    t          j                    t          j         j                  g}|r&| j        k    r fd}|                    d|           t          j         j         j        |          }t          j
        | j        |d          }|r|rt           j         j        ||          }|S )Nc                 f    |                                  \  }}j        |k     s|j        k     rdS d S NF)r7   r-   )
occurrencer   ri   r<   s      r   	check_aimz0InlineVariable._change_module.<locals>.check_aim6  sD    '99;;
s;& !#*; ! 5! !r   r   )filtersT)r,   replace_primary)r   NoImportsFilterPyNameFilterr.   r;   insertFinderr+   r:   r   rename_in_moduler   r   )r<   r,   rr   rs   r   r   finderchangeds   `       r   r   zInlineVariable._change_module2  s    .00+2J4;2W2WX 	)H5 	)! ! ! ! !
 NN1i(((#DL$)WMMM)DMHd
 
 
  	Qv 	Q"4<gxPPGr   c                     dS )NvariablerA   rF   s    r   rG   zInlineVariable.get_kindD  s    zr   )rH   rI   rJ   r>   r   r
   r   rD   r   rV   r   rG   r   r   s   @r   r%   r%      s               2   B
 
 

 
 
  $      r   r%   c                   0     e Zd Z fdZd Zd Zd Z xZS )r'   c                      t                      j        |i | |                                 \  }}| j        j        }t          j        |          g| _        t          j        | j	        ||          | _
        d S r@   )rM   r>   _function_locationr.   indexr   ArgumentDefaultInlinerchangersChangeSignaturer+   	signature)r<   rB   rC   r,   r-   r   rX   s         r   r>   zInlineParameter.__init__I  su    $'$'''2244&!)@GGH)9L(F
 
r   c                     | j                                         \  }}|                                }|j                            |          }t          j        |j                  }|                    |          }||fS r@   )	r.   r   rQ   rb   rf   r   r5   rk   find_function_offset)r<   rP   r`   r,   r   word_finderr-   s          r   r   z"InlineParameter._function_locationR  sp    ;>>@@&((**--f55mH$89911%88r   c                 2     | j         j        | j        fi |S )zGet the changes needed by this refactoring

        See `rope.refactor.change_signature.ChangeSignature.get_changes()`
        for arguments.
        )r   rD   r   )r<   rC   s     r   rD   zInlineParameter.get_changesZ  s#     *t~)$-@@4@@@r   c                     dS )N	parameterrA   rF   s    r   rG   zInlineParameter.get_kindb  s    {r   )rH   rI   rJ   r>   r   rD   rG   r   r   s   @r   r'   r'   H  sh        
 
 
 
 
     A A A      r   r'   rb   returnc                 ,    d                     |           S )N
join)rb   s    r   _join_linesr   f  s    99Ur   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_ComplexExpressionVisitorc                     d| _         d S r   is_complex_expressionrF   s    r   r>   z"_ComplexExpressionVisitor.__init__k  s    %*"""r   c                     d| _         d S r4   r   r<   nodes     r   _Setz_ComplexExpressionVisitor._Setn      %)"""r   c                     d| _         d S r4   r   r   s     r   _Listz_ComplexExpressionVisitor._Listq  r   r   c                     d| _         d S r4   r   r   s     r   _Tuplez _ComplexExpressionVisitor._Tuplet  r   r   c                     d| _         d S r4   r   r   s     r   _Dictz_ComplexExpressionVisitor._Dictw  r   r   N)rH   rI   rJ   r>   r   r   r   r   rA   r   r   r   r   j  s_        + + +* * ** * ** * ** * * * *r   r   c                   r    e Zd Z e            ZddZd Zd Zd ZddZd Z	d	 Z
d
 Zd Zed             ZdS )rT   Nc                 T   || _         || _        |                                | _        | j                                        | _        |                                 | _        |                                 | _	        i | _
        |	|| _        d S t          j        | j                  | _        d S r@   )r+   rN   rO   rP   rQ   r,   _get_definition_infodefinition_info_get_definition_paramsdefinition_params_calculated_definitionsrZ   r   r[   )r<   r+   rN   rZ   s       r   r>   z_DefinitionGenerator.__init__~  s    $"--//2244#88::!%!<!<!>!>')$ 	>DIII#,T_==DIIIr   c                 J    t           j                            | j                  S r@   )r   DefinitionInfor6   rN   rF   s    r   r   z)_DefinitionGenerator._get_definition_info  s    +00AAAr   c                 2   | j         }t          d |j        D                       }|j        |j        t          j        d          | j                                        dk    r2| j        j	        
                                ||j        d         d         <   |S )Nc                     g | ]}|S rA   rA   ).0pairs     r   
<listcomp>z?_DefinitionGenerator._get_definition_params.<locals>.<listcomp>  s    NNN4$NNNr   z8Cannot inline functions with list and keyword arguments.classmethodr   )r   dictargs_with_defaultsargs_argkeywords_argr   r    rN   rG   r   get_name)r<   r   	paramdicts      r   r   z+_DefinitionGenerator._get_definition_params  s    .NN?+MNNNOO	$	+	 -J   ?##%%6 	2 &//11 215a8 r   c                 4    | j                                         S r@   )rN   r  rF   s    r   get_function_namez&_DefinitionGenerator.get_function_name  s    '')))r   Fc                 <    |g }|                      |||||          S r@   )_calculate_definition)r<   primaryr.   call	host_varsreturnss         r   get_definitionz#_DefinitionGenerator.get_definition  s+     	I))'64GTTTr   c                    t           j                            ||| j        |          }| j        }t          j        | j        |          }|j                                        D ]
\  }}|||<   d}	g }
|                                D ]D\  }}||k    r9|7|	|dz   |                    dd          z   dz   z  }	|
	                    |           E|	|
fS )Nr   z = r   r   )
r   CallInfor6   r   r   ArgumentMapping
param_dictitemsreplaceru   )r<   r  r.   r  	call_infor  mapping
param_namevalueheaderto_be_inlinedr:   s               r   _calculate_headerz&_DefinitionGenerator._calculate_header  s     "*//VT14
 
	 *	/0DiPP!(!3!9!9!;!; 	* 	*J$)Ij!!$??,, 	+ 	+KD%u} + +$,tS)A)AADHH$$T***}$$r   c                 N   |                      |||          \  }}|| j        z   }t          j        | j        |          }	|	                                                                fdD             }
t          |
                              t          |                    rt          t          j                  t          j        | j        || j                  }fd|D             }|
D ]_}||         }t          j        | j        ||          }t          j        ||z   |          }t          j        | j        || j                  }`|D ]A}t          j        | j        || j                  }||         }t#          | j        |||          }B|                     ||          S )Nc                 h    g | ].}t          |         t          j        j        j                  ,|/S rA   )r!   ropebasebuiltinsBuiltinName)r   x	name_dicts     r   r  z>_DefinitionGenerator._calculate_definition.<locals>.<listcomp>  sE     
 
 
ilDI,>,JKK

 
 
r   c                     g | ]}|z   S rA   rA   )r   itemprefixs     r   r  z>_DefinitionGenerator._calculate_definition.<locals>.<listcomp>  s    EEEtVd]EEEr   )rP   )r  rZ   r   get_string_moduler+   ra   	get_namessetintersectionnextrT   r   r,   r   rR   r   r   r   _replace_returns_with)r<   r  r.   r  r  r  r  r  r   mod	all_namesguestr(  rS   r:   rP   r&  r)  s                   @@r   r  z*_DefinitionGenerator._calculate_definition  s    $ 6 6w M M$)#(v>>MMOO--//	
 
 
 

 
 
	 y>>&&s9~~66 	X.<==F.t|VT]SSEEEEE}EEEM! X Xt$/$=L$% %!  0%v}u   !24<WW " 	L 	LD1$,VVHd^F%dlHfdKKFF))&':::r   c           	         g }d }d}t                                                               |          D ]}|                                                                D ]b\  }}|rY|dk    rR|                    |||                    d                              |r|                     ||                    d                     |                    d          }	t          ||	t          |                                                                                             }t          |          }|                    d          }
|
t          |          k     r,||
         dv r"|
dz  }
|
t          |          k     r
||
         dv "|
}|
t          |          k    s||
         dk    r|                    d           d|                    ||d                     d                    |          |fS )Nr   r   z 	r   r   passr   )rT   _get_return_patternfinditer	groupdictr  ru   r   _check_nothing_after_returnri   r   rj   lstrip
splitlinesr   )r<   r   r  r   returnedlast_changedmatchkeyr  beg_idxcurrents              r   r/  z*_DefinitionGenerator._replace_returns_with  s   )==??HHPP 	2 	2E#oo//5577 2 2
U 2SH_ 2MM&H8M8M)M"NOOO 2888ATATUUU"'))H"5"5#."7S[[#89@@BBMMOO$ $ (+6{{"'))H"5"5%F3 )w58P )#qLG &F3 )w58P )'."c&kk1 2VG_5L 2"MM&111!2" 	f\]]+,,,wwv((r   c                 ^   t          j        |          }|                    |          }t          j        |          }|                    |          d         }||                    |          t          |                                                   dk    rt          j	        d          d S )Nr   r   z?Cannot inline functions with statements after return statement.)
r   SourceLinesAdapterget_line_numberLogicalLineFinderlogical_line_inrh   rj   r   r   r    )r<   r   r-   rb   r`   logical_liness         r   r8  z0_DefinitionGenerator._check_nothing_after_return  s    .v66&&v..#5e<<..v66q9%$$V,,s6{{:;AACCrI 	-V  	 	r   c                     t          | d          sUd } |ddg          } |dt          j                    g          }d}t          j        |dz   |z   dz   |z             | _        | j        S )N_return_patternc                 >    d| z  d                     |          z   dz   S )Nz(?P<%s>|)r   )r:   list_s     r   named_patternz?_DefinitionGenerator._get_return_pattern.<locals>.named_pattern  s!     4'#((5//9C??r   commentz#[^\n]*stringz\b(?P<return>return)\brJ  )re   r   get_string_patternrecompilerH  )clsrM  comment_patternstring_patternreturn_patterns        r   r5  z(_DefinitionGenerator._get_return_pattern  s    s-.. 
	@ @ @ ,mI
|DDO*]8k6T6V6V5WXXN6N"$*#%6<~M# #C ""r   r@   r   )rH   rI   rJ   r   r>   r   r   r
  r  r  r  r/  r8  r  r5  rA   r   r   rT   rT   {  s        !MOOM> > > >B B B   * * *U U U U% % %$%; %; %;N) ) )2   # # [# # #r   rT   c                       e Zd Zd	dZd Zd Zd Zeej	        d                         Z
eej	        d                         Zeej	        d                         ZdS )
r{   Nc                 >    || _         || _        || _        || _        dS )zInlines occurrences

        If `aim` is not `None` only the occurrences that intersect
        `aim` offset will be inlined.

        N)r+   	generatorr,   r   )r<   r+   r,   definition_generatorr   s        r   r>   z,_InlineFunctionCallsForModuleHandle.__init__  s$     - r   c                 V    |                                 st          j        d          d S )Nz1Cannot inline functions that reference themselves)
is_definedr   r    )r<   change_collectorr   s      r   occurred_inside_skipz8_InlineFunctionCallsForModuleHandle.occurred_inside_skip   s8    $$&& 	-C  	 	r   c                    |                                 \  }}|                                rd S |                                s#t          j        d| j        j        |fz            | j        | j        |k     s| j        |k    rd S |                     | j	        |dz
            }| j
                            |          }| j        j                            |          \  }}| j
                            |          }	| j
                            |          }
| j	        |	|                                         dk    p$| j	        ||
                                         dk    }t%          j        | j
        |          }|                                \  }}| j        }|j                            |          }| j                            ||| j	        ||         |                                |          \  }}t5          |
dz   t7          | j	                            }|                    |	|t%          j        ||                     |r?|}|d}|                    |
|| j	        |	|         |z   | j	        ||         z              d S d S )NzQReference to inlining function other than function call in <file: %s, offset: %d>r   r   )r  None)r7   is_in_import_statement	is_calledr   r    r,   rx   r   _find_end_parensr   rb   rC  rP   rF  rE  rf   rh   r   r   r   get_primary_and_pynamerl   get_inner_scope_for_linerY  r  r+  rg   rj   ry   fix_indentation)r<   r]  r   r   ri   
end_parensr`   rm   r   
line_startline_endr  r   r  r.   hostrl   
definitionr;  r:   s                       r   occurred_outside_skipz9_InlineFunctionCallsForModuleHandle.occurred_outside_skip&  s   1133
s,,.. 	F##%% 	--040BE/JK   8 	TX%5 	C 	F**4;a@@
++E22#}:JJ6RR
HZ..z::
:**844 K
5()//11R7 >{:h./55772= 	 )$*jAA$;;==}
33F;;#~<<Kj()OO  =  
  

H (Q,DK 0 011##[8WMM	
 	
 	
  	D ''Ju,-4t{:c>7RR    		 	r   c                 `    t          j        |          }|                    |          d         S )Nr   )r   r5   get_word_parens_range)r<   r   r-   r   s       r   rc  z4_InlineFunctionCallsForModuleHandle._find_end_parensX  s*    v&&++F33A66r   c                 @    | j                             | j                  S r@   )r+   get_pymoduler,   rF   s    r   rP   z,_InlineFunctionCallsForModuleHandle.pymodule\  s     |((777r   c                 Z    | j         | j                                         S | j        j        S r@   )r,   r6   rP   rk   rF   s    r   r   z*_InlineFunctionCallsForModuleHandle.sourcea  s-     = 	-=%%'''=,,r   c                     | j         j        S r@   )rP   rb   rF   s    r   rb   z)_InlineFunctionCallsForModuleHandle.linesi  s     }""r   r@   )rH   rI   rJ   r>   r^  rl  rc  propertyr   saveitrP   r   rb   rA   r   r   r{   r{     s        
 
 
 
  0 0 0d7 7 7 
\8 8 \ X8 
\- - \ X- 
\# # \ X# # #r   r{   TFc                 p   t          ||          }t          ||          \  }}	t          j        | |||          }
t	          j        |
||dd|          }||j        }|rSt          j        |          }|d |	                    |                   ||
                    |	          dz   d          z   }n|}|S )N)r   TF)rP   r   writesr8   r   )r   _assigned_linenor   rR   r   r   rk   r   rB  rf   rh   )r+   rP   r.   r:   rr   r8   r   rk  r   ri   rS   changed_sourcerb   r   s                 r   r   r   o  s     Hf--J!(F33JE3#1'4dSSS,  N  .!-  .~>>8U11%8889U//44q8::;< 	
  Mr   c                 H   |j         d         }| j        t          | |          \  }}t          fdt	          ||dz             D                       }|j        rt          j        d          ||                    d          dz   d          	                                }|S )Nr   c                 :    g | ]}                     |          S rA   )r   )r   r   rb   s     r   r  z_getvardef.<locals>.<listcomp>  s%    :::q		:::r   r   z Cannot inline tuple assignments.=)
r   rb   rw  r   r   levelsr   r    r   r   )rP   r.   
assignmentr   ri   definition_with_assignmentrk  rb   s          @r   r   r     s    #A&JNE!(F33JE3!,::::E%q$9$9:::" "  N)*LMMM+"((--133egg  r   c                 d    |j         d         j        j        }| j                            |          S r   )r   ast_noder`   rF  rE  )rP   r.   definition_lines      r   rw  rw    s,    (+4;O!11/BBBr   c                 @   |s|S t          j        | ||          }t          j        | |          }|D ]}|                    |           |                                }t          j        | ||          }t          j        |           }|                    |dd          S )NF)unusedsort)r   r*  r   get_module_imports
add_importget_changed_sourceImportToolsorganize_imports)r+   r   r,   r]   rP   module_importimport_infoimport_toolss           r   r~   r~     s     )'68DDH27HEEM . .  ------//F)'68DDH*733L((%e(LLLr   c                     |                      |          }t          j        ||          }t          |t          j                  r|                                }|S r@   )rp  r   eval_locationr!   r   r"   r#   )r+   r,   r-   rP   r.   s        r   r   r     sR    ##H--H#Hf55F&'.// /,,..Mr   c                     t          j        | ||          }t          j        | |          }|                    |           |                                S r@   )r   r*  r   r  remove_pynamer  )r+   r.   r   r,   rP   r  s         r   r   r     sN    )'68DDH27HEEM'''++---r   )TNF)+rQ  typingr   rope.base.builtinsr!  	rope.baser   r   r   r   r   r	   r
   r   r   rope.base.changer   r   rope.refactorr   r   r   r   r   r   r   r   r0   r2   r*   r%   r'   r   r   r   rT   r{   r   r   rw  r~   r   r   rA   r   r   <module>r     s  & 
			          
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7 6 6 6 6 6 6 6                   3 3 34@ @ @ @ @ @ @ @"L L L L L8 L L L^V V V V VX V V Vr    h   <tCy S    * * * * * * * *"U# U# U# U# U# U# U# U#pY# Y# Y# Y# Y# Y# Y# Y#z EJ   8  C C C

M 
M 
M  . . . . .r   