a
    ]9aE                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl mZm	Z	 G dd de
ZG d	d
 d
e
ZdddZdd ZdS )    N)
exceptions)libutils)utils)worder)ArrayLinesAdapterLogicalLineFinderc                   @   s>   e Zd ZdddZejdd Zeejdd Zdd	 Z	d
S )	FixSyntax   c                 C   s   || _ || _|| _|| _d S N)projectcoderesourcemaxfixes)selfr   r   r   r    r   5lib/python3.9/site-packages/rope/contrib/fixsyntax.py__init__   s    zFixSyntax.__init__c              
   C   s   d}| j }d}zL|dkrD| jdurD| j |krD| jj| jddW S tj| j|| jddW S  tjy } zp|du rd|j	|j
|jf }|| jk r|d7 }| j|j
 d| jj}nt|j	|j
d	|W Y d}~qd}~0 0 qdS )
zGet a `PyModule`Nr   T)force_errors)r   r   z%s:%s %sr	   
zFailed to fix error: {0})r   r   readr   get_pymoduler   Zget_string_moduler   ZModuleSyntaxErrorfilenamelinenoZmessage_r   	commentercommentjoinlinesformat)r   msgr   Ztrieser   r   r   r      s0    
zFixSyntax.get_pymodulec                 C   s
   t | jS r
   )
_Commenterr   )r   r   r   r   r   .   s    zFixSyntax.commenterc                    sd      fdd}j} fdd}|jd  d  rL| S | }|d u r`| S |S )Nc                     sZ   t jd} |  }|dddd}jdd } |}tj	j
||S )NTz\
 r   r   )r   ZWorderr   Zget_primary_atreplacecountZ	get_scopeZget_inner_scope_for_lineropebaseevaluateZeval_str)Zword_finderZ
expressionr   ZscopeoffsetZpymoduler   r   r   
old_pyname6   s    
z'FixSyntax.pyname_at.<locals>.old_pynamec                     s   j  } tjj| S r
   )r   transfered_offsetr$   r%   r&   Zeval_location)Z	newoffsetr'   r   r   
new_pyname@   s    z'FixSyntax.pyname_at.<locals>.new_pynamer	   )r   Zsource_code
startswithr   )r   r(   r)   Znew_coder+   resultr   r'   r   	pyname_at3   s    zFixSyntax.pyname_atN)r	   )
__name__
__module____qualname__r   r   Zsaveitr   propertyr   r.   r   r   r   r   r   
   s   

r   c                   @   s\   e Zd 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d Zdd ZdS )r    c                 C   sR   || _ | j d| _| jd ttt| jd | _dgt| jd  | _d S )Nr   r	   r   )	r   splitr   appendlistrangelenorigsdiffs)r   r   r   r   r   r   M   s
    z_Commenter.__init__c                 C   s   t | j|ddd }| |}t| j| }d|k rf| |d }| j| }| drft|d }| |d| d  t|d |d D ]}| || j|  q| 	|| d S )	NT)
check_prevr	   r   :   r!   pass)
_logical_startr   _get_stmt_end_get_line_indents_last_non_blankrstripendswith_setr6   _fix_incomplete_try_blocks)r   r   startendindentsZlast_lineno	last_lineliner   r   r   r   T   s    

z_Commenter.commentc                 C   s*   | j dd|}t| jd | }|| S )Nr   r   )r   r#   sumr9   )r   r(   r   diffr   r   r   r*   d   s    z_Commenter.transfered_offsetc                 C   s(   |dkr$| j |  dkr$|d8 }q |S )Nr    r	   )r   strip)r   rF   r   r   r   rA   i   s    
z_Commenter._last_non_blankc                 C   sL   |}t | j| }t|d t| jD ] }t | j| |krB|}q& qHq&|S Nr	   r@   r   r6   r7   )r   r   Zend_linebase_indentsir   r   r   _get_block_endn   s    z_Commenter._get_block_endc                 C   sJ   t | j| }t|d t| jD ]"}t | j| |kr"|d   S q"|S rO   rP   )r   r   rQ   rR   r   r   r   r?   x   s
    z_Commenter._get_stmt_endc                 C   s   |}|}|dkrt jjt| j|d }| j|  drt| j| }||krVq|}| 	|}| j|  }|ds|ds|ds| 
|d| d  | 
|d d| d  qd S )	Nr   r	   ztry:zfinally:zexcept zexcept:r!   z    pass)r$   r%   codeanalyzeZget_block_startr   r   rN   r,   r@   _find_matching_deindent_insert)r   r   rH   Zblock_startZlast_indentsZ	block_endrJ   r   r   r   rE      s0    

z%_Commenter._fix_incomplete_try_blocksc                 C   sv   t | j| }|d }|t| jk rh| j| }| ds^| dks^t | j| |kr^|S |d7 }qt| jd S )Nr	   #rM   )r@   r   r7   rN   r,   )r   Zline_numberrH   Zcurrent_linerJ   r   r   r   rU      s    

z"_Commenter._find_matching_deindentc                 C   s8   | j | j|   t|t| j|  7  < || j|< d S r
   )r9   r8   r7   r   r   r   rJ   r   r   r   rD      s    *z_Commenter._setc                 C   sF   | j | j|   t|d 7  < | j|| j|  | j|| d S rO   )r9   r8   r7   insertr   rX   r   r   r   rV      s     z_Commenter._insertN)r/   r0   r1   r   r   r*   rA   rS   r?   rE   rU   rD   rV   r   r   r   r   r    L   s   
r    Fc                 C   st   t t| }|rf|d }|dkrf||\}}|d u sN||  krJ|k rRn n|S ||kr\qf|d8 }q||d S )Nr	   r   )r   r   Zlogical_line_in)r   r   r:   Zlogical_finderprevrF   rG   r   r   r   r>      s     
r>   c                 C   s   t jj| S r
   )r$   r%   rT   Zcount_line_indents)rJ   r   r   r   r@      s    r@   )F)Zrope.base.codeanalyzer$   Zrope.base.evaluateZ	rope.baser   r   r   r   r   r   objectr   r    r>   r@   r   r   r   r   <module>   s   Bb
