404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.15.15.31: ~ $
# Copyright 2006 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Fixer for print.

Change:
    'print'          into 'print()'
    'print ...'      into 'print(...)'
    'print ... ,'    into 'print(..., end=" ")'
    'print >>x, ...' into 'print(..., file=x)'

No changes are applied if print_function is imported from __future__

"""

# Local imports
from .. import patcomp
from .. import pytree
from ..pgen2 import token
from .. import fixer_base
from ..fixer_util import Name, Call, Comma, String, is_tuple


parend_expr = patcomp.compile_pattern(
              """atom< '(' [atom|STRING|NAME] ')' >"""
              )


class FixPrint(fixer_base.BaseFix):

    BM_compatible = True

    PATTERN = """
              simple_stmt< any* bare='print' any* > | print_stmt
              """

    def transform(self, node, results):
        assert results

        bare_print = results.get("bare")

        if bare_print:
            # Special-case print all by itself
            bare_print.replace(Call(Name(u"print"), [],
                               prefix=bare_print.prefix))
            return
        assert node.children[0] == Name(u"print")
        args = node.children[1:]
        if len(args) == 1 and parend_expr.match(args[0]):
            # We don't want to keep sticking parens around an
            # already-parenthesised expression.
            return

        sep = end = file = None
        if args and args[-1] == Comma():
            args = args[:-1]
            end = " "
        if args and args[0] == pytree.Leaf(token.RIGHTSHIFT, u">>"):
            assert len(args) >= 2
            file = args[1].clone()
            args = args[3:] # Strip a possible comma after the file expression
        # Now synthesize a print(args, sep=..., end=..., file=...) node.
        l_args = [arg.clone() for arg in args]
        if l_args:
            l_args[0].prefix = u""
        if sep is not None or end is not None or file is not None:
            if sep is not None:
                self.add_kwarg(l_args, u"sep", String(repr(sep)))
            if end is not None:
                self.add_kwarg(l_args, u"end", String(repr(end)))
            if file is not None:
                self.add_kwarg(l_args, u"file", file)
        n_stmt = Call(Name(u"print"), l_args)
        n_stmt.prefix = node.prefix
        return n_stmt

    def add_kwarg(self, l_nodes, s_kwd, n_expr):
        # XXX All this prefix-setting may lose comments (though rarely)
        n_expr.prefix = u""
        n_argument = pytree.Node(self.syms.argument,
                                 (Name(s_kwd),
                                  pytree.Leaf(token.EQUAL, u"="),
                                  n_expr))
        if l_nodes:
            l_nodes.append(Comma())
            n_argument.prefix = u" "
        l_nodes.append(n_argument)

Filemanager

Name Type Size Permission Actions
__init__.py File 47 B 0644
__init__.pyc File 133 B 0644
__init__.pyo File 133 B 0644
fix_apply.py File 2.38 KB 0644
fix_apply.pyc File 2.04 KB 0644
fix_apply.pyo File 2 KB 0644
fix_asserts.py File 984 B 0644
fix_asserts.pyc File 1.52 KB 0644
fix_asserts.pyo File 1.52 KB 0644
fix_basestring.py File 321 B 0644
fix_basestring.pyc File 807 B 0644
fix_basestring.pyo File 807 B 0644
fix_buffer.py File 591 B 0644
fix_buffer.pyc File 964 B 0644
fix_buffer.pyo File 964 B 0644
fix_dict.py File 3.73 KB 0644
fix_dict.pyc File 3.68 KB 0644
fix_dict.pyo File 3.56 KB 0644
fix_except.py File 3.27 KB 0644
fix_except.pyc File 2.94 KB 0644
fix_except.pyo File 2.94 KB 0644
fix_exec.py File 1002 B 0644
fix_exec.pyc File 1.4 KB 0644
fix_exec.pyo File 1.37 KB 0644
fix_execfile.py File 2.01 KB 0644
fix_execfile.pyc File 2.06 KB 0644
fix_execfile.pyo File 2.03 KB 0644
fix_exitfunc.py File 2.44 KB 0644
fix_exitfunc.pyc File 2.69 KB 0644
fix_exitfunc.pyo File 2.69 KB 0644
fix_filter.py File 2.06 KB 0644
fix_filter.pyc File 2.22 KB 0644
fix_filter.pyo File 2.22 KB 0644
fix_funcattrs.py File 645 B 0644
fix_funcattrs.pyc File 1.1 KB 0644
fix_funcattrs.pyo File 1.1 KB 0644
fix_future.py File 547 B 0644
fix_future.pyc File 933 B 0644
fix_future.pyo File 933 B 0644
fix_getcwdu.py File 452 B 0644
fix_getcwdu.pyc File 940 B 0644
fix_getcwdu.pyo File 940 B 0644
fix_has_key.py File 3.15 KB 0644
fix_has_key.pyc File 3.12 KB 0644
fix_has_key.pyo File 3.09 KB 0644
fix_idioms.py File 4.77 KB 0644
fix_idioms.pyc File 4.43 KB 0644
fix_idioms.pyo File 4.33 KB 0644
fix_import.py File 3.18 KB 0644
fix_import.pyc File 3.18 KB 0644
fix_import.pyo File 3.18 KB 0644
fix_imports.py File 5.56 KB 0644
fix_imports.pyc File 5.25 KB 0644
fix_imports.pyo File 5.25 KB 0644
fix_imports2.py File 289 B 0644
fix_imports2.pyc File 634 B 0644
fix_imports2.pyo File 634 B 0644
fix_input.py File 710 B 0644
fix_input.pyc File 1.12 KB 0644
fix_input.pyo File 1.12 KB 0644
fix_intern.py File 1.82 KB 0644
fix_intern.pyc File 1.75 KB 0644
fix_intern.pyo File 1.75 KB 0644
fix_isinstance.py File 1.57 KB 0644
fix_isinstance.pyc File 1.81 KB 0644
fix_isinstance.pyo File 1.81 KB 0644
fix_itertools.py File 1.51 KB 0644
fix_itertools.pyc File 1.76 KB 0644
fix_itertools.pyo File 1.76 KB 0644
fix_itertools_imports.py File 2.04 KB 0644
fix_itertools_imports.pyc File 1.98 KB 0644
fix_itertools_imports.pyo File 1.94 KB 0644
fix_long.py File 477 B 0644
fix_long.pyc File 855 B 0644
fix_long.pyo File 855 B 0644
fix_map.py File 2.99 KB 0644
fix_map.pyc File 2.98 KB 0644
fix_map.pyo File 2.98 KB 0644
fix_metaclass.py File 8.02 KB 0644
fix_metaclass.pyc File 6.45 KB 0644
fix_metaclass.pyo File 6.4 KB 0644
fix_methodattrs.py File 615 B 0644
fix_methodattrs.pyc File 1.13 KB 0644
fix_methodattrs.pyo File 1.13 KB 0644
fix_ne.py File 573 B 0644
fix_ne.pyc File 1001 B 0644
fix_ne.pyo File 1001 B 0644
fix_next.py File 3.11 KB 0644
fix_next.pyc File 3.47 KB 0644
fix_next.pyo File 3.44 KB 0644
fix_nonzero.py File 598 B 0644
fix_nonzero.pyc File 1.07 KB 0644
fix_nonzero.pyo File 1.07 KB 0644
fix_numliterals.py File 773 B 0644
fix_numliterals.pyc File 1.24 KB 0644
fix_numliterals.pyo File 1.24 KB 0644
fix_operator.py File 3.39 KB 0644
fix_operator.pyc File 5.03 KB 0644
fix_operator.pyo File 5.03 KB 0644
fix_paren.py File 1.2 KB 0644
fix_paren.pyc File 1.52 KB 0644
fix_paren.pyo File 1.52 KB 0644
fix_print.py File 2.8 KB 0644
fix_print.pyc File 2.68 KB 0644
fix_print.pyo File 2.58 KB 0644
fix_raise.py File 2.87 KB 0644
fix_raise.pyc File 2.45 KB 0644
fix_raise.pyo File 2.45 KB 0644
fix_raw_input.py File 455 B 0644
fix_raw_input.pyc File 950 B 0644
fix_raw_input.pyo File 950 B 0644
fix_reduce.py File 839 B 0644
fix_reduce.pyc File 1.25 KB 0644
fix_reduce.pyo File 1.25 KB 0644
fix_renames.py File 2.17 KB 0644
fix_renames.pyc File 2.41 KB 0644
fix_renames.pyo File 2.41 KB 0644
fix_repr.py File 614 B 0644
fix_repr.pyc File 1.01 KB 0644
fix_repr.pyo File 1.01 KB 0644
fix_set_literal.py File 1.66 KB 0644
fix_set_literal.pyc File 1.96 KB 0644
fix_set_literal.pyo File 1.96 KB 0644
fix_standarderror.py File 450 B 0644
fix_standarderror.pyc File 867 B 0644
fix_standarderror.pyo File 867 B 0644
fix_sys_exc.py File 1.01 KB 0644
fix_sys_exc.pyc File 1.68 KB 0644
fix_sys_exc.pyo File 1.68 KB 0644
fix_throw.py File 1.55 KB 0644
fix_throw.pyc File 1.96 KB 0644
fix_throw.pyo File 1.96 KB 0644
fix_tuple_params.py File 5.45 KB 0644
fix_tuple_params.pyc File 5.33 KB 0644
fix_tuple_params.pyo File 5.33 KB 0644
fix_types.py File 1.77 KB 0644
fix_types.pyc File 2.16 KB 0644
fix_types.pyo File 2.16 KB 0644
fix_unicode.py File 1.24 KB 0644
fix_unicode.pyc File 1.69 KB 0644
fix_unicode.pyo File 1.69 KB 0644
fix_urllib.py File 8.19 KB 0644
fix_urllib.pyc File 6.99 KB 0644
fix_urllib.pyo File 6.99 KB 0644
fix_ws_comma.py File 1.07 KB 0644
fix_ws_comma.pyc File 1.36 KB 0644
fix_ws_comma.pyo File 1.36 KB 0644
fix_xrange.py File 2.64 KB 0644
fix_xrange.pyc File 3.01 KB 0644
fix_xrange.pyo File 3.01 KB 0644
fix_xreadlines.py File 690 B 0644
fix_xreadlines.pyc File 1.14 KB 0644
fix_xreadlines.pyo File 1.14 KB 0644
fix_zip.py File 904 B 0644
fix_zip.pyc File 1.33 KB 0644
fix_zip.pyo File 1.33 KB 0644