diff --git a/2to3/fix_def_iteritems.py b/2to3/fix_def_iteritems.py new file mode 100644 index 000000000..671e94169 --- /dev/null +++ b/2to3/fix_def_iteritems.py @@ -0,0 +1,22 @@ +"""Fixer for iteritems -> items methods.""" +# Author: Valentin Lorentz + +# Code modified from fix_nonzero by Collin Winter + +from lib2to3 import fixer_base +from lib2to3.fixer_util import Name, syms + +class FixDefIteritems(fixer_base.BaseFix): + BM_compatible = True + PATTERN = """ + classdef< 'class' any+ ':' + suite< any* + funcdef< 'def' name='iteritems' + parameters< '(' NAME ')' > any+ > + any* > > + """ + + def transform(self, node, results): + name = results["name"] + new = Name(u"items", prefix=name.prefix) + name.replace(new) diff --git a/2to3/fix_def_iterkeys.py b/2to3/fix_def_iterkeys.py new file mode 100644 index 000000000..c206c449a --- /dev/null +++ b/2to3/fix_def_iterkeys.py @@ -0,0 +1,22 @@ +"""Fixer for iterkeys -> keys methods.""" +# Author: Valentin Lorentz + +# Code modified from fix_nonzero by Collin Winter + +from lib2to3 import fixer_base +from lib2to3.fixer_util import Name, syms + +class FixDefIterkeys(fixer_base.BaseFix): + BM_compatible = True + PATTERN = """ + classdef< 'class' any+ ':' + suite< any* + funcdef< 'def' name='iterkeys' + parameters< '(' NAME ')' > any+ > + any* > > + """ + + def transform(self, node, results): + name = results["name"] + new = Name(u"keys", prefix=name.prefix) + name.replace(new) diff --git a/2to3/fix_def_itervalues.py b/2to3/fix_def_itervalues.py new file mode 100644 index 000000000..f8cfc0fc8 --- /dev/null +++ b/2to3/fix_def_itervalues.py @@ -0,0 +1,22 @@ +"""Fixer for itervalues -> values methods.""" +# Author: Valentin Lorentz + +# Code modified from fix_nonzero by Collin Winter + +from lib2to3 import fixer_base +from lib2to3.fixer_util import Name, syms + +class FixDefItervalues(fixer_base.BaseFix): + BM_compatible = True + PATTERN = """ + classdef< 'class' any+ ':' + suite< any* + funcdef< 'def' name='itervalues' + parameters< '(' NAME ')' > any+ > + any* > > + """ + + def transform(self, node, results): + name = results["name"] + new = Name(u"values", prefix=name.prefix) + name.replace(new) diff --git a/2to3/run.py b/2to3/run.py new file mode 100644 index 000000000..e8f823a67 --- /dev/null +++ b/2to3/run.py @@ -0,0 +1,12 @@ +#! /usr/bin/python2.7 +import sys +from lib2to3.main import main + +import fix_def_iteritems, fix_def_itervalues, fix_def_iterkeys + +# Hacks +sys.modules['lib2to3.fixes.fix_def_iteritems'] = fix_def_iteritems +sys.modules['lib2to3.fixes.fix_def_itervalues'] = fix_def_itervalues +sys.modules['lib2to3.fixes.fix_def_iterkeys'] = fix_def_iterkeys + +sys.exit(main("lib2to3.fixes")) diff --git a/sandbox/run_2to3.sh b/sandbox/run_2to3.sh new file mode 100755 index 000000000..2349f3f75 --- /dev/null +++ b/sandbox/run_2to3.sh @@ -0,0 +1 @@ +python 2to3/run.py src/ plugins/ test/ scripts/* setup.py -wn -f all -f def_iteritems -f def_itervalues -f def_iterkeys "$@" diff --git a/src/utils/gen.py b/src/utils/gen.py index b82976395..7f9a6fd32 100644 --- a/src/utils/gen.py +++ b/src/utils/gen.py @@ -206,20 +206,25 @@ class IterableMap(object): def iterkeys(self): for (key, _) in self.iteritems(): yield key - __iter__ = iterkeys def itervalues(self): for (_, value) in self.iteritems(): yield value - def items(self): - return list(self.iteritems()) + if sys.version_info[0] < 3: + # Our 2to3 fixers automatically rename iteritems/iterkeys/itervalues + # to items/keys/values + def items(self): + return list(self.iteritems()) - def keys(self): - return list(self.iterkeys()) + def keys(self): + return list(self.iterkeys()) - def values(self): - return list(self.itervalues()) + def values(self): + return list(self.itervalues()) + __iter__ = iterkeys + else: + __iter__ = items def __len__(self): ret = 0