/
opt
/
alt
/
python27
/
lib64
/
python2.7
/
lib2to3
/
fixes
/
/opt/alt/python27/lib64/python2.7/lib2to3/fixes
mkdir
upload
Name
Size
Mode
Actions
fix_apply.py
2433
0644
edit
dl
rm
fix_apply.pyc
2123
0644
edit
dl
rm
fix_apply.pyo
2090
0644
edit
dl
rm
fix_asserts.py
984
0644
edit
dl
rm
fix_asserts.pyc
1600
0644
edit
dl
rm
fix_asserts.pyo
1600
0644
edit
dl
rm
fix_basestring.py
321
0644
edit
dl
rm
fix_basestring.pyc
846
0644
edit
dl
rm
fix_basestring.pyo
846
0644
edit
dl
rm
fix_buffer.py
591
0644
edit
dl
rm
fix_buffer.pyc
1003
0644
edit
dl
rm
fix_buffer.pyo
1003
0644
edit
dl
rm
fix_dict.py
3824
0644
edit
dl
rm
fix_dict.pyc
3821
0644
edit
dl
rm
fix_dict.pyo
3696
0644
edit
dl
rm
fix_except.py
3352
0644
edit
dl
rm
fix_except.pyc
3061
0644
edit
dl
rm
fix_except.pyo
3061
0644
edit
dl
rm
fix_exec.py
1002
0644
edit
dl
rm
fix_exec.pyc
1471
0644
edit
dl
rm
fix_exec.pyo
1438
0644
edit
dl
rm
fix_execfile.py
2056
0644
edit
dl
rm
fix_execfile.pyc
2147
0644
edit
dl
rm
fix_execfile.pyo
2114
0644
edit
dl
rm
fix_exitfunc.py
2503
0644
edit
dl
rm
fix_exitfunc.pyc
2822
0644
edit
dl
rm
fix_exitfunc.pyo
2822
0644
edit
dl
rm
fix_filter.py
2107
0644
edit
dl
rm
fix_filter.pyc
2309
0644
edit
dl
rm
fix_filter.pyo
2309
0644
edit
dl
rm
fix_funcattrs.py
645
0644
edit
dl
rm
fix_funcattrs.pyc
1167
0644
edit
dl
rm
fix_funcattrs.pyo
1167
0644
edit
dl
rm
fix_future.py
547
0644
edit
dl
rm
fix_future.pyc
972
0644
edit
dl
rm
fix_future.pyo
972
0644
edit
dl
rm
fix_getcwdu.py
452
0644
edit
dl
rm
fix_getcwdu.pyc
979
0644
edit
dl
rm
fix_getcwdu.pyo
979
0644
edit
dl
rm
fix_has_key.py
3227
0644
edit
dl
rm
fix_has_key.pyc
3237
0644
edit
dl
rm
fix_has_key.pyo
3204
0644
edit
dl
rm
fix_idioms.py
4889
0644
edit
dl
rm
fix_idioms.pyc
4628
0644
edit
dl
rm
fix_idioms.pyo
4524
0644
edit
dl
rm
fix_import.py
3260
0644
edit
dl
rm
fix_import.pyc
3331
0644
edit
dl
rm
fix_import.pyo
3331
0644
edit
dl
rm
fix_imports.py
5693
0644
edit
dl
rm
fix_imports.pyc
5510
0644
edit
dl
rm
fix_imports.pyo
5510
0644
edit
dl
rm
fix_imports2.py
289
0644
edit
dl
rm
fix_imports2.pyc
660
0644
edit
dl
rm
fix_imports2.pyo
660
0644
edit
dl
rm
fix_input.py
710
0644
edit
dl
rm
fix_input.pyc
1187
0644
edit
dl
rm
fix_input.pyo
1187
0644
edit
dl
rm
fix_intern.py
1866
0644
edit
dl
rm
fix_intern.pyc
1836
0644
edit
dl
rm
fix_intern.pyo
1836
0644
edit
dl
rm
fix_isinstance.py
1609
0644
edit
dl
rm
fix_isinstance.pyc
1891
0644
edit
dl
rm
fix_isinstance.pyo
1891
0644
edit
dl
rm
fix_itertools.py
1550
0644
edit
dl
rm
fix_itertools.pyc
1844
0644
edit
dl
rm
fix_itertools.pyo
1844
0644
edit
dl
rm
fix_itertools_imports.py
2094
0644
edit
dl
rm
fix_itertools_imports.pyc
2069
0644
edit
dl
rm
fix_itertools_imports.pyo
2024
0644
edit
dl
rm
fix_long.py
477
0644
edit
dl
rm
fix_long.pyc
894
0644
edit
dl
rm
fix_long.pyo
894
0644
edit
dl
rm
fix_map.py
3062
0644
edit
dl
rm
fix_map.pyc
3093
0644
edit
dl
rm
fix_map.pyo
3093
0644
edit
dl
rm
fix_metaclass.py
8216
0644
edit
dl
rm
fix_metaclass.pyc
6722
0644
edit
dl
rm
fix_metaclass.pyo
6672
0644
edit
dl
rm
fix_methodattrs.py
615
0644
edit
dl
rm
fix_methodattrs.pyc
1191
0644
edit
dl
rm
fix_methodattrs.pyo
1191
0644
edit
dl
rm
fix_ne.py
573
0644
edit
dl
rm
fix_ne.pyc
1053
0644
edit
dl
rm
fix_ne.pyo
1053
0644
edit
dl
rm
fix_next.py
3181
0644
edit
dl
rm
fix_next.pyc
3659
0644
edit
dl
rm
fix_next.pyo
3626
0644
edit
dl
rm
fix_nonzero.py
598
0644
edit
dl
rm
fix_nonzero.pyc
1139
0644
edit
dl
rm
fix_nonzero.pyo
1139
0644
edit
dl
rm
fix_numliterals.py
773
0644
edit
dl
rm
fix_numliterals.pyc
1317
0644
edit
dl
rm
fix_numliterals.pyo
1317
0644
edit
dl
rm
fix_operator.py
3472
0644
edit
dl
rm
fix_operator.pyc
5345
0644
edit
dl
rm
fix_operator.pyo
5345
0644
edit
dl
rm
fix_paren.py
1228
0644
edit
dl
rm
fix_paren.pyc
1596
0644
edit
dl
rm
fix_paren.pyo
1596
0644
edit
dl
rm
fix_print.py
2865
0644
edit
dl
rm
fix_print.pyc
2795
0644
edit
dl
rm
fix_print.pyo
2698
0644
edit
dl
rm
fix_raise.py
2934
0644
edit
dl
rm
fix_raise.pyc
2551
0644
edit
dl
rm
fix_raise.pyo
2551
0644
edit
dl
rm
fix_raw_input.py
455
0644
edit
dl
rm
fix_raw_input.pyc
989
0644
edit
dl
rm
fix_raw_input.pyo
989
0644
edit
dl
rm
fix_reduce.py
839
0644
edit
dl
rm
fix_reduce.pyc
1315
0644
edit
dl
rm
fix_reduce.pyo
1315
0644
edit
dl
rm
fix_renames.py
2218
0644
edit
dl
rm
fix_renames.pyc
2562
0644
edit
dl
rm
fix_renames.pyo
2562
0644
edit
dl
rm
fix_repr.py
614
0644
edit
dl
rm
fix_repr.pyc
1069
0644
edit
dl
rm
fix_repr.pyo
1069
0644
edit
dl
rm
fix_set_literal.py
1699
0644
edit
dl
rm
fix_set_literal.pyc
2056
0644
edit
dl
rm
fix_set_literal.pyo
2056
0644
edit
dl
rm
fix_standarderror.py
450
0644
edit
dl
rm
fix_standarderror.pyc
906
0644
edit
dl
rm
fix_standarderror.pyo
906
0644
edit
dl
rm
fix_sys_exc.py
1039
0644
edit
dl
rm
fix_sys_exc.pyc
1773
0644
edit
dl
rm
fix_sys_exc.pyo
1773
0644
edit
dl
rm
fix_throw.py
1586
0644
edit
dl
rm
fix_throw.pyc
2049
0644
edit
dl
rm
fix_throw.pyo
2049
0644
edit
dl
rm
fix_tuple_params.py
5577
0644
edit
dl
rm
fix_tuple_params.pyc
5588
0644
edit
dl
rm
fix_tuple_params.pyo
5588
0644
edit
dl
rm
fix_types.py
1809
0644
edit
dl
rm
fix_types.pyc
2249
0644
edit
dl
rm
fix_types.pyo
2249
0644
edit
dl
rm
fix_unicode.py
1269
0644
edit
dl
rm
fix_unicode.pyc
1784
0644
edit
dl
rm
fix_unicode.pyo
1784
0644
edit
dl
rm
fix_urllib.py
8385
0644
edit
dl
rm
fix_urllib.pyc
7277
0644
edit
dl
rm
fix_urllib.pyo
7277
0644
edit
dl
rm
fix_ws_comma.py
1095
0644
edit
dl
rm
fix_ws_comma.pyc
1435
0644
edit
dl
rm
fix_ws_comma.pyo
1435
0644
edit
dl
rm
fix_xrange.py
2699
0644
edit
dl
rm
fix_xrange.pyc
3191
0644
edit
dl
rm
fix_xrange.pyo
3191
0644
edit
dl
rm
fix_xreadlines.py
690
0644
edit
dl
rm
fix_xreadlines.pyc
1205
0644
edit
dl
rm
fix_xreadlines.pyo
1205
0644
edit
dl
rm
fix_zip.py
904
0644
edit
dl
rm
fix_zip.pyc
1399
0644
edit
dl
rm
fix_zip.pyo
1399
0644
edit
dl
rm
__init__.py
47
0644
edit
dl
rm
__init__.pyc
146
0644
edit
dl
rm
__init__.pyo
146
0644
edit
dl
rm
Edit:
/opt/alt/python27/lib64/python2.7/lib2to3/fixes/fix_metaclass.py
(8216B)
"""Fixer for __metaclass__ = X -> (metaclass=X) methods. The various forms of classef (inherits nothing, inherits once, inherints many) don't parse the same in the CST so we look at ALL classes for a __metaclass__ and if we find one normalize the inherits to all be an arglist. For one-liner classes ('class X: pass') there is no indent/dedent so we normalize those into having a suite. Moving the __metaclass__ into the classdef can also cause the class body to be empty so there is some special casing for that as well. This fixer also tries very hard to keep original indenting and spacing in all those corner cases. """ # Author: Jack Diederich # Local imports from .. import fixer_base from ..pygram import token from ..fixer_util import Name, syms, Node, Leaf def has_metaclass(parent): """ we have to check the cls_node without changing it. There are two possibilities: 1) clsdef => suite => simple_stmt => expr_stmt => Leaf('__meta') 2) clsdef => simple_stmt => expr_stmt => Leaf('__meta') """ for node in parent.children: if node.type == syms.suite: return has_metaclass(node) elif node.type == syms.simple_stmt and node.children: expr_node = node.children[0] if expr_node.type == syms.expr_stmt and expr_node.children: left_side = expr_node.children[0] if isinstance(left_side, Leaf) and \ left_side.value == '__metaclass__': return True return False def fixup_parse_tree(cls_node): """ one-line classes don't get a suite in the parse tree so we add one to normalize the tree """ for node in cls_node.children: if node.type == syms.suite: # already in the preferred format, do nothing return # !%@#! oneliners have no suite node, we have to fake one up for i, node in enumerate(cls_node.children): if node.type == token.COLON: break else: raise ValueError("No class suite and no ':'!") # move everything into a suite node suite = Node(syms.suite, []) while cls_node.children[i+1:]: move_node = cls_node.children[i+1] suite.append_child(move_node.clone()) move_node.remove() cls_node.append_child(suite) node = suite def fixup_simple_stmt(parent, i, stmt_node): """ if there is a semi-colon all the parts count as part of the same simple_stmt. We just want the __metaclass__ part so we move everything after the semi-colon into its own simple_stmt node """ for semi_ind, node in enumerate(stmt_node.children): if node.type == token.SEMI: # *sigh* break else: return node.remove() # kill the semicolon new_expr = Node(syms.expr_stmt, []) new_stmt = Node(syms.simple_stmt, [new_expr]) while stmt_node.children[semi_ind:]: move_node = stmt_node.children[semi_ind] new_expr.append_child(move_node.clone()) move_node.remove() parent.insert_child(i, new_stmt) new_leaf1 = new_stmt.children[0].children[0] old_leaf1 = stmt_node.children[0].children[0] new_leaf1.prefix = old_leaf1.prefix def remove_trailing_newline(node): if node.children and node.children[-1].type == token.NEWLINE: node.children[-1].remove() def find_metas(cls_node): # find the suite node (Mmm, sweet nodes) for node in cls_node.children: if node.type == syms.suite: break else: raise ValueError("No class suite!") # look for simple_stmt[ expr_stmt[ Leaf('__metaclass__') ] ] for i, simple_node in list(enumerate(node.children)): if simple_node.type == syms.simple_stmt and simple_node.children: expr_node = simple_node.children[0] if expr_node.type == syms.expr_stmt and expr_node.children: # Check if the expr_node is a simple assignment. left_node = expr_node.children[0] if isinstance(left_node, Leaf) and \ left_node.value == u'__metaclass__': # We found an assignment to __metaclass__. fixup_simple_stmt(node, i, simple_node) remove_trailing_newline(simple_node) yield (node, i, simple_node) def fixup_indent(suite): """ If an INDENT is followed by a thing with a prefix then nuke the prefix Otherwise we get in trouble when removing __metaclass__ at suite start """ kids = suite.children[::-1] # find the first indent while kids: node = kids.pop() if node.type == token.INDENT: break # find the first Leaf while kids: node = kids.pop() if isinstance(node, Leaf) and node.type != token.DEDENT: if node.prefix: node.prefix = u'' return else: kids.extend(node.children[::-1]) class FixMetaclass(fixer_base.BaseFix): BM_compatible = True PATTERN = """ classdef<any*> """ def transform(self, node, results): if not has_metaclass(node): return fixup_parse_tree(node) # find metaclasses, keep the last one last_metaclass = None for suite, i, stmt in find_metas(node): last_metaclass = stmt stmt.remove() text_type = node.children[0].type # always Leaf(nnn, 'class') # figure out what kind of classdef we have if len(node.children) == 7: # Node(classdef, ['class', 'name', '(', arglist, ')', ':', suite]) # 0 1 2 3 4 5 6 if node.children[3].type == syms.arglist: arglist = node.children[3] # Node(classdef, ['class', 'name', '(', 'Parent', ')', ':', suite]) else: parent = node.children[3].clone() arglist = Node(syms.arglist, [parent]) node.set_child(3, arglist) elif len(node.children) == 6: # Node(classdef, ['class', 'name', '(', ')', ':', suite]) # 0 1 2 3 4 5 arglist = Node(syms.arglist, []) node.insert_child(3, arglist) elif len(node.children) == 4: # Node(classdef, ['class', 'name', ':', suite]) # 0 1 2 3 arglist = Node(syms.arglist, []) node.insert_child(2, Leaf(token.RPAR, u')')) node.insert_child(2, arglist) node.insert_child(2, Leaf(token.LPAR, u'(')) else: raise ValueError("Unexpected class definition") # now stick the metaclass in the arglist meta_txt = last_metaclass.children[0].children[0] meta_txt.value = 'metaclass' orig_meta_prefix = meta_txt.prefix if arglist.children: arglist.append_child(Leaf(token.COMMA, u',')) meta_txt.prefix = u' ' else: meta_txt.prefix = u'' # compact the expression "metaclass = Meta" -> "metaclass=Meta" expr_stmt = last_metaclass.children[0] assert expr_stmt.type == syms.expr_stmt expr_stmt.children[1].prefix = u'' expr_stmt.children[2].prefix = u'' arglist.append_child(last_metaclass) fixup_indent(suite) # check for empty suite if not suite.children: # one-liner that was just __metaclass_ suite.remove() pass_leaf = Leaf(text_type, u'pass') pass_leaf.prefix = orig_meta_prefix node.append_child(pass_leaf) node.append_child(Leaf(token.NEWLINE, u'\n')) elif len(suite.children) > 1 and \ (suite.children[-2].type == token.INDENT and suite.children[-1].type == token.DEDENT): # there was only one line in the class body and it was __metaclass__ pass_leaf = Leaf(text_type, u'pass') suite.insert_child(-1, pass_leaf) suite.insert_child(-1, Leaf(token.NEWLINE, u'\n'))
Save
cmd:
run