| Index: tools/telemetry/third_party/rope/rope/contrib/fixmodnames.py
|
| diff --git a/tools/telemetry/third_party/rope/rope/contrib/fixmodnames.py b/tools/telemetry/third_party/rope/rope/contrib/fixmodnames.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d8bd3da109e09cc852e497da77c4d32c1c714060
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/rope/rope/contrib/fixmodnames.py
|
| @@ -0,0 +1,69 @@
|
| +"""Fix the name of modules
|
| +
|
| +This module is useful when you want to rename many of the modules in
|
| +your project. That can happen specially when you want to change their
|
| +naming style.
|
| +
|
| +For instance::
|
| +
|
| + fixer = FixModuleNames(project)
|
| + changes = fixer.get_changes(fixer=str.lower)
|
| + project.do(changes)
|
| +
|
| +Here it renames all modules and packages to use lower-cased chars.
|
| +You can tell it to use any other style by using the ``fixer``
|
| +argument.
|
| +
|
| +"""
|
| +from rope.base import taskhandle
|
| +from rope.contrib import changestack
|
| +from rope.refactor import rename
|
| +
|
| +
|
| +class FixModuleNames(object):
|
| +
|
| + def __init__(self, project):
|
| + self.project = project
|
| +
|
| + def get_changes(self, fixer=str.lower,
|
| + task_handle=taskhandle.NullTaskHandle()):
|
| + """Fix module names
|
| +
|
| + `fixer` is a function that takes and returns a `str`. Given
|
| + the name of a module, it should return the fixed name.
|
| +
|
| + """
|
| + stack = changestack.ChangeStack(self.project, 'Fixing module names')
|
| + jobset = task_handle.create_jobset('Fixing module names',
|
| + self._count_fixes(fixer) + 1)
|
| + try:
|
| + while True:
|
| + for resource in self._tobe_fixed(fixer):
|
| + jobset.started_job(resource.path)
|
| + renamer = rename.Rename(self.project, resource)
|
| + changes = renamer.get_changes(fixer(self._name(resource)))
|
| + stack.push(changes)
|
| + jobset.finished_job()
|
| + break
|
| + else:
|
| + break
|
| + finally:
|
| + jobset.started_job('Reverting to original state')
|
| + stack.pop_all()
|
| + jobset.finished_job()
|
| + return stack.merged()
|
| +
|
| + def _count_fixes(self, fixer):
|
| + return len(list(self._tobe_fixed(fixer)))
|
| +
|
| + def _tobe_fixed(self, fixer):
|
| + for resource in self.project.get_python_files():
|
| + modname = self._name(resource)
|
| + if modname != fixer(modname):
|
| + yield resource
|
| +
|
| + def _name(self, resource):
|
| + modname = resource.name.rsplit('.', 1)[0]
|
| + if modname == '__init__':
|
| + modname = resource.parent.name
|
| + return modname
|
|
|