コード例 #1
0
ファイル: restructure.py プロジェクト: Even8090/hrv_features
    def get_changes(self, checks=None, imports=None, resources=None,
                    task_handle=taskhandle.NullTaskHandle()):
        """Get the changes needed by this restructuring

        `resources` can be a list of `rope.base.resources.File`\s to
        apply the restructuring on.  If `None`, the restructuring will
        be applied to all python files.

        `checks` argument has been deprecated.  Use the `args` argument
        of the constructor.  The usage of::

          strchecks = {'obj1.type': 'mod.A', 'obj2': 'mod.B',
                       'obj3.object': 'mod.C'}
          checks = restructuring.make_checks(strchecks)

        can be replaced with::

          args = {'obj1': 'type=mod.A', 'obj2': 'name=mod.B',
                  'obj3': 'object=mod.C'}

        where obj1, obj2 and obj3 are wildcard names that appear
        in restructuring pattern.

        """
        if checks is not None:
            warnings.warn(
                'The use of checks parameter is deprecated; '
                'use the args parameter of the constructor instead.',
                DeprecationWarning, stacklevel=2)
            for name, value in checks.items():
                self.args[name] = similarfinder._pydefined_to_str(value)
        if imports is not None:
            warnings.warn(
                'The use of imports parameter is deprecated; '
                'use imports parameter of the constructor, instead.',
                DeprecationWarning, stacklevel=2)
            self.imports = imports
        changes = change.ChangeSet('Restructuring <%s> to <%s>' %
                                   (self.pattern, self.goal))
        if resources is not None:
            files = [resource for resource in resources
                     if libutils.is_python_file(self.project, resource)]
        else:
            files = self.project.get_python_files()
        job_set = task_handle.create_jobset('Collecting Changes', len(files))
        for resource in files:
            job_set.started_job(resource.path)
            pymodule = self.project.get_pymodule(resource)
            finder = similarfinder.SimilarFinder(pymodule,
                                                 wildcards=self.wildcards)
            matches = list(finder.get_matches(self.pattern, self.args))
            computer = self._compute_changes(matches, pymodule)
            result = computer.get_changed()
            if result is not None:
                imported_source = self._add_imports(resource, result,
                                                    self.imports)
                changes.add_change(change.ChangeContents(resource,
                                                         imported_source))
            job_set.finished_job()
        return changes
コード例 #2
0
 def get_changes(self, classname=None, new_class_name=None):
     if new_class_name is not None:
         warnings.warn(
             "new_class_name parameter is deprecated; use classname",
             DeprecationWarning,
             stacklevel=2,
         )
         classname = new_class_name
     collector = codeanalyze.ChangeCollector(self.pymodule.source_code)
     start, end = sourceutils.get_body_region(self.pyfunction)
     indents = sourceutils.get_indents(
         self.pymodule.lines,
         self.pyfunction.get_scope().get_start()) + sourceutils.get_indent(
             self.project)
     new_contents = " " * indents + "return %s(%s)()\n" % (
         classname,
         ", ".join(self._get_parameter_names()),
     )
     collector.add_change(start, end, new_contents)
     insertion = self._get_class_insertion_point()
     collector.add_change(insertion, insertion,
                          "\n\n" + self.get_new_class(classname))
     changes = change.ChangeSet(
         "Replace method with method object refactoring")
     changes.add_change(
         change.ChangeContents(self.resource, collector.get_changed()))
     return changes
コード例 #3
0
ファイル: generate.py プロジェクト: calpe20/PYTHONIZANDO
 def get_changes(self):
     package = self.info.get_package()
     changes = change.ChangeSet('Generate Module <%s>' % self.name)
     new_resource = self.project.get_file('%s/%s.py' % (package.path, self.name))
     if new_resource.exists():
         raise exceptions.RefactoringError(
             'Module <%s> already exists' % new_resource.path)
     changes.add_change(change.CreateResource(new_resource))
     changes.add_change(_add_import_to_module(
                        self.project.pycore, self.resource, new_resource))
     return changes
コード例 #4
0
ファイル: generate.py プロジェクト: climbus/rope
 def get_changes(self):
     package = self.info.get_package()
     changes = change.ChangeSet("Generate Package <%s>" % self.name)
     new_resource = self.project.get_folder("%s/%s" %
                                            (package.path, self.name))
     if new_resource.exists():
         raise exceptions.RefactoringError("Package <%s> already exists" %
                                           new_resource.path)
     changes.add_change(change.CreateResource(new_resource))
     changes.add_change(
         _add_import_to_module(self.project, self.resource, new_resource))
     child = self.project.get_folder(package.path + "/" + self.name)
     changes.add_change(change.CreateFile(child, "__init__.py"))
     return changes
コード例 #5
0
ファイル: generate.py プロジェクト: calpe20/PYTHONIZANDO
    def get_changes(self):
        changes = change.ChangeSet('Generate %s <%s>' %
                                   (self._get_element_kind(), self.name))
        indents = self.info.get_scope_indents()
        blanks = self.info.get_blank_lines()
        base_definition = sourceutils.fix_indentation(self._get_element(), indents)
        definition = '\n' * blanks[0] + base_definition + '\n' * blanks[1]

        resource = self.info.get_insertion_resource()
        start, end = self.info.get_insertion_offsets()

        collector = codeanalyze.ChangeCollector(resource.read())
        collector.add_change(start, end, definition)
        changes.add_change(change.ChangeContents(
                           resource, collector.get_changed()))
        return changes
コード例 #6
0
ファイル: usefunction.py プロジェクト: Even8090/hrv_features
 def get_changes(self, resources=None,
                 task_handle=taskhandle.NullTaskHandle()):
     if resources is None:
         resources = self.project.get_python_files()
     changes = change.ChangeSet('Using function <%s>' %
                                self.pyfunction.get_name())
     if self.resource in resources:
         newresources = list(resources)
         newresources.remove(self.resource)
     for c in self._restructure(newresources, task_handle).changes:
         changes.add_change(c)
     if self.resource in resources:
         for c in self._restructure([self.resource], task_handle,
                                    others=False).changes:
             changes.add_change(c)
     return changes
コード例 #7
0
ファイル: generate.py プロジェクト: climbus/rope
    def get_changes(self):
        changes = change.ChangeSet("Generate %s <%s>" %
                                   (self._get_element_kind(), self.name))
        indents = self.info.get_scope_indents()
        blanks = self.info.get_blank_lines()
        base_definition = sourceutils.fix_indentation(self._get_element(),
                                                      indents)
        definition = "\n" * blanks[0] + base_definition + "\n" * blanks[1]

        resource = self.info.get_insertion_resource()
        start, end = self.info.get_insertion_offsets()

        collector = codeanalyze.ChangeCollector(resource.read())
        collector.add_change(start, end, definition)
        changes.add_change(
            change.ChangeContents(resource, collector.get_changed()))
        if self.goal_resource:
            relative_import = _add_relative_import_to_module(
                self.project, self.resource, self.goal_resource, self.name)
            changes.add_change(relative_import)
        return changes
コード例 #8
0
ファイル: changestack.py プロジェクト: climbus/rope
 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
コード例 #9
0
ファイル: resources.py プロジェクト: evandroforks/rope
 def _perform_change(self, change_, description):
     changes = change.ChangeSet(description)
     changes.add_change(change_)
     self.project.do(changes)