init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
|
|
@ -0,0 +1,51 @@
|
|||
"""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.
|
||||
"""
|
||||
|
||||
from rope.base import change
|
||||
|
||||
|
||||
class ChangeStack(object):
|
||||
def __init__(self, project, description="merged changes"):
|
||||
self.project = project
|
||||
self.description = description
|
||||
self.stack = []
|
||||
|
||||
def push(self, changes):
|
||||
self.stack.append(changes)
|
||||
self.project.do(changes)
|
||||
|
||||
def pop_all(self):
|
||||
for i in range(len(self.stack)):
|
||||
self.project.history.undo(drop=True)
|
||||
|
||||
def merged(self):
|
||||
result = change.ChangeSet(self.description)
|
||||
for changes in self.stack:
|
||||
for c in self._basic_changes(changes):
|
||||
result.add_change(c)
|
||||
return result
|
||||
|
||||
def _basic_changes(self, changes):
|
||||
if isinstance(changes, change.ChangeSet):
|
||||
for child in changes.changes:
|
||||
for atom in self._basic_changes(child):
|
||||
yield atom
|
||||
else:
|
||||
yield changes
|
||||
Loading…
Add table
Add a link
Reference in a new issue