Merged revisions 66117 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ................ r66117 | benjamin.peterson | 2008-09-01 12:17:22 -0500 (Mon, 01 Sep 2008) | 25 lines Merged revisions 65887,65889,65967-65968,65981 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r65887 | benjamin.peterson | 2008-08-19 17:45:04 -0500 (Tue, 19 Aug 2008) | 1 line allow the raw_input fixer to handle calls after the raw_input (ie. raw_input().split()) ........ r65889 | benjamin.peterson | 2008-08-19 18:11:03 -0500 (Tue, 19 Aug 2008) | 1 line no need for 2.4 compatibility now ........ r65967 | benjamin.peterson | 2008-08-21 18:43:37 -0500 (Thu, 21 Aug 2008) | 1 line allow a Call to have no arguments ........ r65968 | benjamin.peterson | 2008-08-21 18:45:13 -0500 (Thu, 21 Aug 2008) | 1 line add a fixer for sys.exc_info etc by Jeff Balogh #2357 ........ r65981 | benjamin.peterson | 2008-08-22 15:41:30 -0500 (Fri, 22 Aug 2008) | 1 line add a fixer to add parenthese for list and gen comps #2367 ........ ................
This commit is contained in:
parent
2cb598f131
commit
cf60382420
|
@ -51,12 +51,12 @@ def Dot():
|
|||
|
||||
def ArgList(args, lparen=LParen(), rparen=RParen()):
|
||||
"""A parenthesised argument list, used by Call()"""
|
||||
return Node(syms.trailer,
|
||||
[lparen.clone(),
|
||||
Node(syms.arglist, args),
|
||||
rparen.clone()])
|
||||
node = Node(syms.trailer, [lparen.clone(), rparen.clone()])
|
||||
if args:
|
||||
node.insert_child(1, Node(syms.arglist, args))
|
||||
return node
|
||||
|
||||
def Call(func_name, args, prefix=None):
|
||||
def Call(func_name, args=None, prefix=None):
|
||||
"""A function call"""
|
||||
node = Node(syms.power, [func_name, ArgList(args)])
|
||||
if prefix is not None:
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
"""Fixer that addes parentheses where they are required
|
||||
|
||||
This converts ``[x for x in 1, 2]`` to ``[x for x in (1, 2)]``."""
|
||||
|
||||
# By Taek Joo Kim and Benjamin Peterson
|
||||
|
||||
# Local imports
|
||||
from .. import fixer_base
|
||||
from ..fixer_util import LParen, RParen
|
||||
|
||||
# XXX This doesn't support nested for loops like [x for x in 1, 2 for x in 1, 2]
|
||||
class FixParen(fixer_base.BaseFix):
|
||||
PATTERN = """
|
||||
atom< ('[' | '(')
|
||||
(listmaker< any
|
||||
comp_for<
|
||||
'for' NAME 'in'
|
||||
target=testlist_safe< any (',' any)+ [',']
|
||||
>
|
||||
[any]
|
||||
>
|
||||
>
|
||||
|
|
||||
testlist_gexp< any
|
||||
comp_for<
|
||||
'for' NAME 'in'
|
||||
target=testlist_safe< any (',' any)+ [',']
|
||||
>
|
||||
[any]
|
||||
>
|
||||
>)
|
||||
(']' | ')') >
|
||||
"""
|
||||
|
||||
def transform(self, node, results):
|
||||
target = results["target"]
|
||||
|
||||
lparen = LParen()
|
||||
lparen.set_prefix(target.get_prefix())
|
||||
target.set_prefix("") # Make it hug the parentheses
|
||||
target.insert_child(0, lparen)
|
||||
target.append_child(RParen())
|
|
@ -8,7 +8,7 @@ from ..fixer_util import Name
|
|||
class FixRawInput(fixer_base.BaseFix):
|
||||
|
||||
PATTERN = """
|
||||
power< name='raw_input' trailer< '(' [any] ')' > >
|
||||
power< name='raw_input' trailer< '(' [any] ')' > any* >
|
||||
"""
|
||||
|
||||
def transform(self, node, results):
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
"""Fixer for sys.exc_{type, value, traceback}
|
||||
|
||||
sys.exc_type -> sys.exc_info()[0]
|
||||
sys.exc_value -> sys.exc_info()[1]
|
||||
sys.exc_traceback -> sys.exc_info()[2]
|
||||
"""
|
||||
|
||||
# By Jeff Balogh and Benjamin Peterson
|
||||
|
||||
# Local imports
|
||||
from .. import fixer_base
|
||||
from ..fixer_util import Attr, Call, Name, Number, Subscript, Node, syms
|
||||
|
||||
class FixSysExc(fixer_base.BaseFix):
|
||||
# This order matches the ordering of sys.exc_info().
|
||||
exc_info = ["exc_type", "exc_value", "exc_traceback"]
|
||||
PATTERN = """
|
||||
power< 'sys' trailer< dot='.' attribute=(%s) > >
|
||||
""" % '|'.join("'%s'" % e for e in exc_info)
|
||||
|
||||
def transform(self, node, results):
|
||||
sys_attr = results["attribute"][0]
|
||||
index = Number(self.exc_info.index(sys_attr.value))
|
||||
|
||||
call = Call(Name("exc_info"), prefix=sys_attr.get_prefix())
|
||||
attr = Attr(Name("sys"), call)
|
||||
attr[1].children[0].set_prefix(results["dot"].get_prefix())
|
||||
attr.append(Subscript(index))
|
||||
return Node(syms.power, attr, prefix=node.get_prefix())
|
|
@ -69,12 +69,6 @@ def main(fixer_dir, args=None):
|
|||
return 2
|
||||
|
||||
# Set up logging handler
|
||||
if sys.version_info < (2, 4):
|
||||
hdlr = logging.StreamHandler()
|
||||
fmt = logging.Formatter('%(name)s: %(message)s')
|
||||
hdlr.setFormatter(fmt)
|
||||
logging.root.addHandler(hdlr)
|
||||
else:
|
||||
logging.basicConfig(format='%(name)s: %(message)s', level=logging.INFO)
|
||||
|
||||
# Initialize the refactoring tool
|
||||
|
|
|
@ -1340,6 +1340,21 @@ class Test_raw_input(FixerTestCase):
|
|||
a = """x = input(foo(a) + 6)"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_5(self):
|
||||
b = """x = raw_input(invite).split()"""
|
||||
a = """x = input(invite).split()"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_6(self):
|
||||
b = """x = raw_input(invite) . split ()"""
|
||||
a = """x = input(invite) . split ()"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_8(self):
|
||||
b = "x = int(raw_input())"
|
||||
a = "x = int(input())"
|
||||
self.check(b, a)
|
||||
|
||||
class Test_funcattrs(FixerTestCase):
|
||||
fixer = "funcattrs"
|
||||
|
||||
|
@ -3330,6 +3345,98 @@ class Test_import(FixerTestCase):
|
|||
"""
|
||||
self.check_both(b, a)
|
||||
|
||||
class Test_sys_exc(FixerTestCase):
|
||||
fixer = "sys_exc"
|
||||
|
||||
def test_0(self):
|
||||
b = "sys.exc_type"
|
||||
a = "sys.exc_info()[0]"
|
||||
self.check(b, a)
|
||||
|
||||
def test_1(self):
|
||||
b = "sys.exc_value"
|
||||
a = "sys.exc_info()[1]"
|
||||
self.check(b, a)
|
||||
|
||||
def test_2(self):
|
||||
b = "sys.exc_traceback"
|
||||
a = "sys.exc_info()[2]"
|
||||
self.check(b, a)
|
||||
|
||||
def test_3(self):
|
||||
b = "sys.exc_type # Foo"
|
||||
a = "sys.exc_info()[0] # Foo"
|
||||
self.check(b, a)
|
||||
|
||||
def test_4(self):
|
||||
b = "sys. exc_type"
|
||||
a = "sys. exc_info()[0]"
|
||||
self.check(b, a)
|
||||
|
||||
def test_5(self):
|
||||
b = "sys .exc_type"
|
||||
a = "sys .exc_info()[0]"
|
||||
self.check(b, a)
|
||||
|
||||
|
||||
class Test_paren(FixerTestCase):
|
||||
fixer = "paren"
|
||||
|
||||
def test_0(self):
|
||||
b = """[i for i in 1, 2 ]"""
|
||||
a = """[i for i in (1, 2) ]"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_1(self):
|
||||
b = """[i for i in 1, 2, ]"""
|
||||
a = """[i for i in (1, 2,) ]"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_2(self):
|
||||
b = """[i for i in 1, 2 ]"""
|
||||
a = """[i for i in (1, 2) ]"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_3(self):
|
||||
b = """[i for i in 1, 2 if i]"""
|
||||
a = """[i for i in (1, 2) if i]"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_4(self):
|
||||
b = """[i for i in 1, 2 ]"""
|
||||
a = """[i for i in (1, 2) ]"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_5(self):
|
||||
b = """(i for i in 1, 2)"""
|
||||
a = """(i for i in (1, 2))"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_6(self):
|
||||
b = """(i for i in 1 ,2 if i)"""
|
||||
a = """(i for i in (1 ,2) if i)"""
|
||||
self.check(b, a)
|
||||
|
||||
def test_unchanged_0(self):
|
||||
s = """[i for i in (1, 2)]"""
|
||||
self.unchanged(s)
|
||||
|
||||
def test_unchanged_1(self):
|
||||
s = """[i for i in foo()]"""
|
||||
self.unchanged(s)
|
||||
|
||||
def test_unchanged_2(self):
|
||||
s = """[i for i in (1, 2) if nothing]"""
|
||||
self.unchanged(s)
|
||||
|
||||
def test_unchanged_3(self):
|
||||
s = """(i for i in (1, 2))"""
|
||||
self.unchanged(s)
|
||||
|
||||
def test_unchanged_4(self):
|
||||
s = """[i for i in m]"""
|
||||
self.unchanged(s)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import __main__
|
||||
|
|
Loading…
Reference in New Issue