Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Unified Diff: tools/telemetry/third_party/rope/rope/contrib/changestack.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/rope/rope/contrib/changestack.py
diff --git a/tools/telemetry/third_party/rope/rope/contrib/changestack.py b/tools/telemetry/third_party/rope/rope/contrib/changestack.py
new file mode 100644
index 0000000000000000000000000000000000000000..70f2271f7c640229788823cdda7c6df18ea787de
--- /dev/null
+++ b/tools/telemetry/third_party/rope/rope/contrib/changestack.py
@@ -0,0 +1,52 @@
+"""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

Powered by Google App Engine
This is Rietveld 408576698