Ejemplo n.º 1
0
    def get_changes(self, refactor, input_string, in_hierarchy=False):
        """ Function description.

        :return Rope.changes:

        """
        args = re.sub(r'[\s\(\)]+', '', input_string).split(',')
        olds = [arg[0] for arg in refactor.get_args()]

        changers = []
        for arg in [a for a in olds if a not in args]:
            changers.append(change_signature.ArgumentRemover(olds.index(arg)))
            olds.remove(arg)

        order = []
        for index, arg in enumerate(args):
            if arg not in olds:
                changers.append(change_signature.ArgumentAdder(index, arg))
                olds.insert(index, arg)
            order.append(olds.index(arg))

        changers.append(
            change_signature.ArgumentReorderer(order, autodef='None'))

        return refactor.get_changes(changers, in_hierarchy=in_hierarchy)
Ejemplo n.º 2
0
 def test_adding_duplicate_parameter_and_raising_exceptions(self):
     self.mod.write('def a_func(p1):\n    pass\n')
     with self.assertRaises(rope.base.exceptions.RefactoringError):
         signature = change_signature.ChangeSignature(
             self.project, self.mod, self.mod.read().index('a_func') + 1)
         self.project.do(signature.get_changes(
             [change_signature.ArgumentAdder(1, 'p1')]))
Ejemplo n.º 3
0
 def test_changing_signature_in_subclasses(self):
     self.mod.write(
         dedent("""\
             class A(object):
                 def a_method(self):
                     pass
             class B(A):
                 def a_method(self):
                     pass
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_method") + 1
     )
     signature.get_changes(
         [change_signature.ArgumentAdder(1, "p1")], in_hierarchy=True
     ).do()
     self.assertEqual(
         dedent("""\
             class A(object):
                 def a_method(self, p1):
                     pass
             class B(A):
                 def a_method(self, p1):
                     pass
         """),
         self.mod.read(),
     )
Ejemplo n.º 4
0
 def test_adding_arguments_for_normal_args_changing_definition(self):
     self.mod.write('def a_func():\n    pass\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentAdder(0, 'p1')]))
     self.assertEquals('def a_func(p1):\n    pass\n', self.mod.read())
Ejemplo n.º 5
0
 def test_adding_arguments_for_norm_args_chang_calls_with_no_value(self):
     self.mod.write('def a_func(p2=0):\n    pass\na_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     adder = change_signature.ArgumentAdder(0, 'p1', '0', None)
     self.project.do(signature.get_changes([adder]))
     self.assertEquals('def a_func(p1=0, p2=0):\n    pass\na_func(p2=1)\n',
                       self.mod.read())
Ejemplo n.º 6
0
 def test_adding_arguments_for_normal_args_changing_calls(self):
     self.mod.write('def a_func():\n    pass\na_func()\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     adder = change_signature.ArgumentAdder(0, 'p1', 'None', '1')
     self.project.do(signature.get_changes([adder]))
     self.assertEquals('def a_func(p1=None):\n    pass\na_func(1)\n',
                       self.mod.read())
Ejemplo n.º 7
0
 def test_doing_multiple_changes(self):
     changers = []
     self.mod.write('def a_func(p1):\n    pass\na_func(1)\n')
     changers.append(change_signature.ArgumentRemover(0))
     changers.append(change_signature.ArgumentAdder(0, 'p2', None, None))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     signature.get_changes(changers).do()
     self.assertEquals('def a_func(p2):\n    pass\na_func()\n',
                       self.mod.read())
Ejemplo n.º 8
0
 def test_doing_multiple_changes2(self):
     changers = []
     self.mod.write('def a_func(p1, p2):\n    pass\na_func(p2=2)\n')
     changers.append(change_signature.ArgumentAdder(2, 'p3', None, '3'))
     changers.append(change_signature.ArgumentReorderer([1, 0, 2]))
     changers.append(change_signature.ArgumentRemover(1))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     signature.get_changes(changers).do()
     self.assertEquals('def a_func(p2, p3):\n    pass\na_func(2, 3)\n',
                       self.mod.read())
Ejemplo n.º 9
0
 def test_changing_signature_in_subclasses(self):
     self.mod.write(
         'class A(object):\n    def a_method(self):\n        pass\n'
         'class B(A):\n    def a_method(self):\n        pass\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_method') + 1)
     signature.get_changes([change_signature.ArgumentAdder(1, 'p1')],
                           in_hierarchy=True).do()
     self.assertEquals(
         'class A(object):\n    def a_method(self, p1):\n        pass\n'
         'class B(A):\n    def a_method(self, p1):\n        pass\n',
         self.mod.read())
Ejemplo n.º 10
0
 def test_adding_arguments_for_normal_args_changing_definition(self):
     self.mod.write(
         dedent("""\
             def a_func():
                 pass
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     self.project.do(
         signature.get_changes([change_signature.ArgumentAdder(0, "p1")])
     )
     self.assertEqual(
         dedent("""\
             def a_func(p1):
                 pass
         """),
         self.mod.read(),
     )
Ejemplo n.º 11
0
 def test_adding_arguments_for_norm_args_chang_calls_with_no_value(self):
     self.mod.write(
         dedent("""\
             def a_func(p2=0):
                 pass
             a_func(1)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     adder = change_signature.ArgumentAdder(0, "p1", "0", None)
     self.project.do(signature.get_changes([adder]))
     self.assertEqual(
         dedent("""\
             def a_func(p1=0, p2=0):
                 pass
             a_func(p2=1)
         """),
         self.mod.read(),
     )
Ejemplo n.º 12
0
 def test_adding_arguments_for_normal_args_changing_calls(self):
     self.mod.write(
         dedent("""\
             def a_func():
                 pass
             a_func()
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     adder = change_signature.ArgumentAdder(0, "p1", "None", "1")
     self.project.do(signature.get_changes([adder]))
     self.assertEqual(
         dedent("""\
             def a_func(p1=None):
                 pass
             a_func(1)
         """),
         self.mod.read(),
     )
Ejemplo n.º 13
0
 def test_doing_multiple_changes(self):
     changers = []
     self.mod.write(
         dedent("""\
             def a_func(p1):
                 pass
             a_func(1)
         """)
     )
     changers.append(change_signature.ArgumentRemover(0))
     changers.append(change_signature.ArgumentAdder(0, "p2", None, None))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     signature.get_changes(changers).do()
     self.assertEqual(
         dedent("""\
             def a_func(p2):
                 pass
             a_func()
         """),
         self.mod.read(),
     )
Ejemplo n.º 14
0
 def test_doing_multiple_changes2(self):
     changers = []
     self.mod.write(
         dedent("""\
             def a_func(p1, p2):
                 pass
             a_func(p2=2)
         """)
     )
     changers.append(change_signature.ArgumentAdder(2, "p3", None, "3"))
     changers.append(change_signature.ArgumentReorderer([1, 0, 2]))
     changers.append(change_signature.ArgumentRemover(1))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     signature.get_changes(changers).do()
     self.assertEqual(
         dedent("""\
             def a_func(p2, p3):
                 pass
             a_func(2, 3)
         """),
         self.mod.read(),
     )