Index: fixes/fix_metaclass.py =================================================================== --- fixes/fix_metaclass.py (revision 0) +++ fixes/fix_metaclass.py (revision 0) @@ -0,0 +1,38 @@ +"""Fixer for __metaclass__ = X -> (metaclass=X) methods.""" +# Author: Jack Diederich + +# Local imports +from .import basefix +from .util import Name, syms + +class FixMetaclass(basefix.BaseFix): + PATTERN = """ + classdef< 'class' any '(' arglist ')' ':' + suite< any* + meta_stmt=simple_stmt< + expr_stmt< '__metaclass__' '=' meta_rhs=any+ > any* + > any* + any *> > + """ + def transform(self, node, results): + bases = results['bases'][:] + bases.append(Name(',')) + bases.append(Name(' ')) + bases.append(Name('metaclass')) + bases.append(Name('=')) + + prefix = bases[0].get_prefix() + old_parent = bases[0].parent + parent = bases[0].parent.clone() + parent.children = [] + + for ob in bases + results['meta_rhs']: + ob_cp = ob.clone() + parent.append_child(ob_cp) + ob_cp.set_prefix('') + old_parent.replace(parent) + + # clear whitespace before __metaclass__ and remove the line + meta_stmt = results['meta_stmt'] + meta_stmt.get_next_sibling().set_prefix('') + meta_stmt.remove()