B
    ¢èåS‹  ã               @   sP   d dl mZ dd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dS )é    )Úcodeanalyzec             C   s   t  |  |¡¡S )N)r   Úcount_line_indentsZget_line)ÚlinesÚlineno© r   ú8lib/python3.7/site-packages/rope/refactor/sourceutils.pyÚget_indents   s    r   c             C   s>   d}|   d¡}x*|D ]"}| ¡ dkr&qt|t |¡ƒ}qW |S )NéP   Ú
Ú )ÚsplitÚstripÚminr   r   )Úsource_codeÚresultr   Úliner   r   r   Úfind_minimum_indents   s    

r   c             C   s   |dkr| S |   d¡}g }xj|D ]b}| ¡ dkr<| d¡ q |dk rpt |¡}| td|| ƒd | ¡  ¡ q | d| | ¡ q W d |¡S )Nr   Tr   r
   ú )Ú
splitlinesr   Úappendr   r   ÚmaxÚlstripÚjoin)r   Zamountr   r   ÚlÚindentsr   r   r   Úindent_lines   s    



"r   c             C   s   t | ƒ}t| || ƒS )z1Change the indentation of `code` to `new_indents`)r   r   )ÚcodeZnew_indentsZmin_indentsr   r   r   Úfix_indentation#   s    r   c       
      C   s    | j }| j}| ¡ }| ¡ r,| ¡ d  ¡ }| |¡}dd |¡ }t|t|| ¡ ƒt	| j
jƒ ƒ}g }	|	 |d |… ¡ |	 |¡ |	 ||d … ¡ d |	¡S )Néÿÿÿÿz

r   )r   r   Zget_endZ
get_scopesÚget_line_endr   r   r   Z	get_startÚ
get_indentZpycoreÚprojectr   )
ÚpymoduleZclass_scopeZmethods_sourcesr   r   Zinsertion_lineZinsertion_offsetÚmethodsZindented_methodsr   r   r   r   Úadd_methods)   s    

r$   c             C   s(   |   ¡ }t| ƒ\}}t|j||… dƒS )zReturn unindented function bodyr   )Ú
get_moduleÚget_body_regionr   r   )Z
pyfunctionr"   ÚstartÚendr   r   r   Úget_body;   s    r)   c       	      C   sÎ   |   ¡ }|  ¡ }|j}|  ¡ }|j}|  ¡ dkr>|jd j}nt|jƒdkrX|jd j}| |¡}|j	 
|j¡}|d |krª|j d|¡d }x|j|  ¡ r¨|d7 }qW t| |j¡d t|jƒƒ}||fS )z1Return the start and end offsets of function bodyNr   é   ú:)Z	get_scoper%   r   Zget_astr   Zget_docZbodyÚlenZget_line_startZlogical_linesZlogical_line_inr'   r   ÚindexÚisspacer   r   r(   )	ZdefinedZscoper"   r   ZnodeZ
start_liner'   Zscope_startr(   r   r   r   r&   C   s"    
r&   c             C   s   | j  dd¡S )NZindent_sizeé   )ZprefsÚget)r!   r   r   r   r    Z   s    r    N)
Z	rope.baser   r   r   r   r   r$   r)   r&   r    r   r   r   r   Ú<module>   s   
