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(), )
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(), )
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(), )
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(), )
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(), )