Exemplo n.º 1
0
 def get_new_class(self, name):
     body = sourceutils.fix_indentation(
         self._get_body(),
         sourceutils.get_indent(self.pycore) * 2)
     return 'class %s(object):\n\n%s%sdef __call__(self):\n%s' % \
            (name, self._get_init(),
             ' ' * sourceutils.get_indent(self.pycore), body)
Exemplo n.º 2
0
 def get_new_class(self, name):
     body = sourceutils.fix_indentation(
         self._get_body(),
         sourceutils.get_indent(self.project) * 2)
     return "class %s(object):\n\n%s%sdef __call__(self):\n%s" % (
         name,
         self._get_init(),
         " " * sourceutils.get_indent(self.project),
         body,
     )
 def _get_factory_method(self, lines, class_scope, factory_name, global_):
     unit_indents = ' ' * sourceutils.get_indent(self.pycore)
     if global_:
         if self._get_scope_indents(lines, class_scope) > 0:
             raise rope.base.exceptions.RefactoringError(
                 'Cannot make global factory method for nested classes.')
         return ('\ndef %s(*args, **kwds):\n%sreturn %s(*args, **kwds)\n' %
                 (factory_name, unit_indents, self.old_name))
     unindented_factory = \
         ('@staticmethod\ndef %s(*args, **kwds):\n' % factory_name +
          '%sreturn %s(*args, **kwds)\n' % (unit_indents, self.old_name))
     indents = self._get_scope_indents(lines, class_scope) + \
         sourceutils.get_indent(self.pycore)
     return '\n' + sourceutils.indent_lines(unindented_factory, indents)
Exemplo n.º 4
0
 def _get_factory_method(self, lines, class_scope,
                         factory_name, global_):
     unit_indents = ' ' * sourceutils.get_indent(self.pycore)
     if global_:
         if self._get_scope_indents(lines, class_scope) > 0:
             raise rope.base.exceptions.RefactoringError(
                 'Cannot make global factory method for nested classes.')
         return ('\ndef %s(*args, **kwds):\n%sreturn %s(*args, **kwds)\n' %
                 (factory_name, unit_indents, self.old_name))
     unindented_factory = \
         ('@staticmethod\ndef %s(*args, **kwds):\n' % factory_name +
          '%sreturn %s(*args, **kwds)\n' % (unit_indents, self.old_name))
     indents = self._get_scope_indents(lines, class_scope) + \
         sourceutils.get_indent(self.pycore)
     return '\n' + sourceutils.indent_lines(unindented_factory, indents)
Exemplo n.º 5
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
Exemplo n.º 6
0
 def _get_factory_method(self, lines, class_scope, factory_name, global_):
     unit_indents = " " * sourceutils.get_indent(self.project)
     if global_:
         if self._get_scope_indents(lines, class_scope) > 0:
             raise rope.base.exceptions.RefactoringError(
                 "Cannot make global factory method for nested classes.")
         return "\ndef %s(*args, **kwds):\n%sreturn %s(*args, **kwds)\n" % (
             factory_name,
             unit_indents,
             self.old_name,
         )
     unindented_factory = (
         "@staticmethod\ndef %s(*args, **kwds):\n" % factory_name +
         "%sreturn %s(*args, **kwds)\n" % (unit_indents, self.old_name))
     indents = self._get_scope_indents(
         lines, class_scope) + sourceutils.get_indent(self.project)
     return "\n" + sourceutils.indent_lines(unindented_factory, indents)
Exemplo n.º 7
0
 def _get_init(self):
     params = self._get_parameter_names()
     indents = ' ' * sourceutils.get_indent(self.pycore)
     if not params:
         return ''
     header = indents + 'def __init__(self'
     body = ''
     for arg in params:
         new_name = arg
         if arg == 'self':
             new_name = 'host'
         header += ', %s' % new_name
         body += indents * 2 + 'self.%s = %s\n' % (arg, new_name)
     header += '):'
     return '%s\n%s\n' % (header, body)
 def _get_init(self):
     params = self._get_parameter_names()
     indents = ' ' * sourceutils.get_indent(self.pycore)
     if not params:
         return ''
     header = indents + 'def __init__(self'
     body = ''
     for arg in params:
         new_name = arg
         if arg == 'self':
             new_name = 'host'
         header += ', %s' % new_name
         body += indents * 2 + 'self.%s = %s\n' % (arg, new_name)
     header += '):'
     return '%s\n%s\n' % (header, body)
Exemplo n.º 9
0
 def _get_init(self):
     params = self._get_parameter_names()
     indents = " " * sourceutils.get_indent(self.project)
     if not params:
         return ""
     header = indents + "def __init__(self"
     body = ""
     for arg in params:
         new_name = arg
         if arg == "self":
             new_name = "host"
         header += ", %s" % new_name
         body += indents * 2 + "self.%s = %s\n" % (arg, new_name)
     header += "):"
     return "%s\n%s\n" % (header, body)
Exemplo n.º 10
0
    def _get_function_definition(self):
        args = self._find_function_arguments()
        returns = self._find_function_returns()
        result = []
        if self.info.method and not self.info.make_global and \
           _get_function_kind(self.info.scope) != 'method':
            result.append('@staticmethod\n')
        result.append('def %s:\n' % self._get_function_signature(args))
        unindented_body = self._get_unindented_function_body(returns)
        indents = sourceutils.get_indent(self.info.project)
        function_body = sourceutils.indent_lines(unindented_body, indents)
        result.append(function_body)
        definition = ''.join(result)

        return definition + '\n'
Exemplo n.º 11
0
    def _change_holding_module(self, changes, renamer, getter, setter):
        pymodule = self.pycore.resource_to_pyobject(self.resource)
        class_scope = self._get_defining_class_scope()
        defining_object = self._get_defining_scope().pyobject
        start, end = sourceutils.get_body_region(defining_object)

        new_source = renamer.get_changed_module(pymodule=pymodule,
                                                skip_start=start, skip_end=end)
        if new_source is not None:
            pymodule = self.pycore.get_string_module(new_source, self.resource)
            class_scope = pymodule.get_scope().\
                          get_inner_scope_for_line(class_scope.get_start())
        indents = sourceutils.get_indent(self.pycore) * ' '
        getter = 'def %s(self):\n%sreturn self.%s' % \
                 (getter, indents, self.name)
        setter = 'def %s(self, value):\n%sself.%s = value' % \
                 (setter, indents, self.name)
        new_source = sourceutils.add_methods(pymodule, class_scope,
                                             [getter, setter])
        return new_source
Exemplo n.º 12
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.pycore)
     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
Exemplo n.º 13
0
Arquivo: move.py Projeto: Kha/rope
 def get_new_method(self, name):
     return '%s\n%s' % (
         self._get_new_header(name),
         sourceutils.fix_indentation(self._get_body(),
                                     sourceutils.get_indent(self.pycore)))
Exemplo n.º 14
0
 def get_new_class(self, name):
     body = sourceutils.fix_indentation(
         self._get_body(), sourceutils.get_indent(self.pycore) * 2)
     return 'class %s(object):\n\n%s%sdef __call__(self):\n%s' % \
            (name, self._get_init(),
             ' ' * sourceutils.get_indent(self.pycore), body)
Exemplo n.º 15
0
 def get_new_method(self, name):
     return '%s\n%s' % (self._get_new_header(name),
                        sourceutils.fix_indentation(
                            self._get_body(),
                            sourceutils.get_indent(self.project)))
Exemplo n.º 16
0
 def _get_scope_indents(self, pyobject):
     pymodule = pyobject.get_module()
     return sourceutils.get_indents(
         pymodule.lines, pyobject.get_scope().get_start()) + \
         sourceutils.get_indent(self.project)
Exemplo n.º 17
0
 def get_new_method(self, name):
     return "%s\n%s" % (
         self._get_new_header(name),
         sourceutils.fix_indentation(self._get_body(), sourceutils.get_indent(self.project)),
     )
Exemplo n.º 18
0
 def _get_scope_indents(self, pyobject):
     pymodule = pyobject.get_module()
     return sourceutils.get_indents(pymodule.lines, pyobject.get_scope().get_start()) + sourceutils.get_indent(
         self.project
     )