+++ /dev/null
-# Copyright 2006 Google, Inc. All Rights Reserved.\r
-# Licensed to PSF under a Contributor Agreement.\r
-\r
-"""Fixer for apply().\r
-\r
-This converts apply(func, v, k) into (func)(*v, **k)."""\r
-\r
-# Local imports\r
-from .. import pytree\r
-from ..pgen2 import token\r
-from .. import fixer_base\r
-from ..fixer_util import Call, Comma, parenthesize\r
-\r
-class FixApply(fixer_base.BaseFix):\r
- BM_compatible = True\r
-\r
- PATTERN = """\r
- power< 'apply'\r
- trailer<\r
- '('\r
- arglist<\r
- (not argument<NAME '=' any>) func=any ','\r
- (not argument<NAME '=' any>) args=any [','\r
- (not argument<NAME '=' any>) kwds=any] [',']\r
- >\r
- ')'\r
- >\r
- >\r
- """\r
-\r
- def transform(self, node, results):\r
- syms = self.syms\r
- assert results\r
- func = results["func"]\r
- args = results["args"]\r
- kwds = results.get("kwds")\r
- prefix = node.prefix\r
- func = func.clone()\r
- if (func.type not in (token.NAME, syms.atom) and\r
- (func.type != syms.power or\r
- func.children[-2].type == token.DOUBLESTAR)):\r
- # Need to parenthesize\r
- func = parenthesize(func)\r
- func.prefix = ""\r
- args = args.clone()\r
- args.prefix = ""\r
- if kwds is not None:\r
- kwds = kwds.clone()\r
- kwds.prefix = ""\r
- l_newargs = [pytree.Leaf(token.STAR, u"*"), args]\r
- if kwds is not None:\r
- l_newargs.extend([Comma(),\r
- pytree.Leaf(token.DOUBLESTAR, u"**"),\r
- kwds])\r
- l_newargs[-2].prefix = u" " # that's the ** token\r
- # XXX Sometimes we could be cleverer, e.g. apply(f, (x, y) + t)\r
- # can be translated into f(x, y, *t) instead of f(*(x, y) + t)\r
- #new = pytree.Node(syms.power, (func, ArgList(l_newargs)))\r
- return Call(func, l_newargs, prefix=prefix)\r