Exemple #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)
 def test_redordering_arguments_reported_by_mft(self):
     self.mod.write('def f(a, b, c):\n    pass\nf(1, 2, 3)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().rindex('f'))
     signature.get_changes(
         [change_signature.ArgumentReorderer([1, 2, 0])]).do()
     self.assertEquals('def f(b, c, a):\n    pass\nf(2, 3, 1)\n',
                       self.mod.read())
 def test_changing_order_with_static_params(self):
     self.mod.write('def a_func(p1, p2=0, p3=0):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([0, 2, 1])]))
     self.assertEquals('def a_func(p1, p3=0, p2=0):\n    pass\n'
                       'a_func(1, p2=2)\n', self.mod.read())
 def test_change_order_for_two_parameter(self):
     self.mod.write('def a_func(p1, p2):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([1, 0])]))
     self.assertEquals('def a_func(p2, p1):\n    pass\na_func(2, 1)\n',
                       self.mod.read())
 def test_reordering_multi_line_function_headers(self):
     self.mod.write('def a_func(p1,\n p2):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([1, 0])]))
     self.assertEquals('def a_func(p2, p1):\n    pass\na_func(2, 1)\n',
                       self.mod.read())
 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())
 def test_reordering_and_automatic_defaults(self):
     code = 'def f(p1, p2=2):\n' \
            '    pass\n' \
            'f(1, 2)\n'
     self.mod.write(code)
     signature = ChangeSignature(self.project, self.mod, code.index('f('))
     reorder = change_signature.ArgumentReorderer([1, 0], autodef='1')
     signature.get_changes([reorder]).do()
     expected = 'def f(p2=2, p1=1):\n' \
                '    pass\n' \
                'f(2, 1)\n'
     self.assertEquals(expected, self.mod.read())
 def test_reordering_and_automatic_defaults(self):
     code = dedent("""\
         def f(p1, p2=2):
             pass
         f(1, 2)
     """)
     self.mod.write(code)
     signature = change_signature.ChangeSignature(
         self.project, self.mod, code.index("f(")
     )
     reorder = change_signature.ArgumentReorderer([1, 0], autodef="1")
     signature.get_changes([reorder]).do()
     expected = dedent("""\
         def f(p2=2, p1=1):
             pass
         f(2, 1)
     """)
     self.assertEqual(expected, self.mod.read())
 def test_redordering_arguments_reported_by_mft(self):
     self.mod.write(
         dedent("""\
             def f(a, b, c):
                 pass
             f(1, 2, 3)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().rindex("f")
     )
     signature.get_changes([change_signature.ArgumentReorderer([1, 2, 0])]).do()
     self.assertEqual(
         dedent("""\
             def f(b, c, a):
                 pass
             f(2, 3, 1)
         """),
         self.mod.read(),
     )
Exemple #10
0
 def test_changing_order_with_static_params(self):
     self.mod.write(
         dedent("""\
             def a_func(p1, p2=0, p3=0):
                 pass
             a_func(1, 2)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     self.project.do(
         signature.get_changes([change_signature.ArgumentReorderer([0, 2, 1])])
     )
     self.assertEqual(
         dedent("""\
             def a_func(p1, p3=0, p2=0):
                 pass
             a_func(1, p2=2)
         """),
         self.mod.read(),
     )
Exemple #11
0
 def test_change_order_for_two_parameter(self):
     self.mod.write(
         dedent("""\
             def a_func(p1, p2):
                 pass
             a_func(1, 2)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     self.project.do(
         signature.get_changes([change_signature.ArgumentReorderer([1, 0])])
     )
     self.assertEqual(
         dedent("""\
             def a_func(p2, p1):
                 pass
             a_func(2, 1)
         """),
         self.mod.read(),
     )
Exemple #12
0
 def test_reordering_multi_line_function_headers(self):
     self.mod.write(
         dedent("""\
             def a_func(p1,
              p2):
                 pass
             a_func(1, 2)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     self.project.do(
         signature.get_changes([change_signature.ArgumentReorderer([1, 0])])
     )
     self.assertEqual(
         dedent("""\
             def a_func(p2, p1):
                 pass
             a_func(2, 1)
         """),
         self.mod.read(),
     )
Exemple #13
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(),
     )