a
    ]9ao                     @   s$   d Z ddlmZ G dd deZdS )a  For performing many refactorings as a single command

`changestack` module can be used to perform many refactorings on top
of each other as one bigger command.  It can be used like::

  stack = ChangeStack(project, 'my big command')

  #..
  stack.push(refactoring1.get_changes())
  #..
  stack.push(refactoring2.get_changes())
  #..
  stack.push(refactoringX.get_changes())

  stack.pop_all()
  changes = stack.merged()

Now `changes` can be previewed or performed as before.
    )changec                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )ChangeStackmerged changesc                 C   s   || _ || _g | _d S N)projectdescriptionstack)selfr   r    r
   7lib/python3.9/site-packages/rope/contrib/changestack.py__init__   s    zChangeStack.__init__c                 C   s   | j | | j| d S r   )r   appendr   Zdo)r	   changesr
   r
   r   push   s    zChangeStack.pushc                 C   s(   t t| jD ]}| jjjdd qd S )NT)Zdrop)rangelenr   r   historyZundo)r	   ir
   r
   r   pop_all"   s    zChangeStack.pop_allc                 C   s6   t | j}| jD ]}| |D ]}|| q q|S r   )r   	ChangeSetr   r   _basic_changesZ
add_change)r	   resultr   cr
   r
   r   merged&   s
    
zChangeStack.mergedc                 c   s:   t |tjr0|jD ]}| |D ]
}|V  q qn|V  d S r   )
isinstancer   r   r   r   )r	   r   childZatomr
   r
   r   r   -   s
    
zChangeStack._basic_changesN)r   )__name__
__module____qualname__r   r   r   r   r   r
   r
   r
   r   r      s
   
r   N)__doc__Z	rope.baser   objectr   r
   r
   r
   r   <module>   s   