SILENT KILLERPanel

Current Path: > > opt > > alt > python35 > lib64 > python3.5 > lib2to3 > fixes


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt//alt/python35/lib64/python3.5/lib2to3/fixes

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 47 bytes May 31 2024 13:51:44.
fix_apply.py File 2430 bytes May 31 2024 13:51:44.
fix_asserts.py File 984 bytes May 31 2024 13:51:44.
fix_basestring.py File 320 bytes May 31 2024 13:51:44.
fix_buffer.py File 590 bytes May 31 2024 13:51:44.
fix_dict.py File 3811 bytes May 31 2024 13:51:44.
fix_except.py File 3344 bytes May 31 2024 13:51:44.
fix_exec.py File 1001 bytes May 31 2024 13:51:44.
fix_execfile.py File 1990 bytes May 31 2024 13:51:44.
fix_exitfunc.py File 2495 bytes May 31 2024 13:51:44.
fix_filter.py File 2102 bytes May 31 2024 13:51:44.
fix_funcattrs.py File 644 bytes May 31 2024 13:51:44.
fix_future.py File 547 bytes May 31 2024 13:51:44.
fix_getcwdu.py File 451 bytes May 31 2024 13:51:44.
fix_has_key.py File 3222 bytes May 31 2024 13:51:44.
fix_idioms.py File 4876 bytes May 31 2024 13:51:44.
fix_import.py File 3256 bytes May 31 2024 13:51:44.
fix_imports.py File 5684 bytes May 31 2024 13:51:44.
fix_imports2.py File 289 bytes May 31 2024 13:51:44.
fix_input.py File 708 bytes May 31 2024 13:51:44.
fix_intern.py File 1235 bytes May 31 2024 13:51:44.
fix_isinstance.py File 1608 bytes May 31 2024 13:51:44.
fix_itertools.py File 1548 bytes May 31 2024 13:51:44.
fix_itertools_imports.py File 2086 bytes May 31 2024 13:51:44.
fix_long.py File 476 bytes May 31 2024 13:51:44.
fix_map.py File 3058 bytes May 31 2024 13:51:44.
fix_metaclass.py File 8203 bytes May 31 2024 13:51:44.
fix_methodattrs.py File 606 bytes May 31 2024 13:51:44.
fix_ne.py File 571 bytes May 31 2024 13:51:44.
fix_next.py File 3174 bytes May 31 2024 13:51:44.
fix_nonzero.py File 597 bytes May 31 2024 13:51:44.
fix_numliterals.py File 768 bytes May 31 2024 13:51:44.
fix_operator.py File 3471 bytes May 31 2024 13:51:44.
fix_paren.py File 1227 bytes May 31 2024 13:51:44.
fix_print.py File 2854 bytes May 31 2024 13:51:44.
fix_raise.py File 2926 bytes May 31 2024 13:51:44.
fix_raw_input.py File 454 bytes May 31 2024 13:51:44.
fix_reduce.py File 837 bytes May 31 2024 13:51:44.
fix_reload.py File 1154 bytes May 31 2024 13:51:44.
fix_renames.py File 2221 bytes May 31 2024 13:51:44.
fix_repr.py File 613 bytes May 31 2024 13:51:44.
fix_set_literal.py File 1697 bytes May 31 2024 13:51:44.
fix_standarderror.py File 449 bytes May 31 2024 13:51:44.
fix_sys_exc.py File 1034 bytes May 31 2024 13:51:44.
fix_throw.py File 1582 bytes May 31 2024 13:51:44.
fix_tuple_params.py File 5565 bytes May 31 2024 13:51:44.
fix_types.py File 1797 bytes May 31 2024 13:51:44.
fix_unicode.py File 1256 bytes May 31 2024 13:51:44.
fix_urllib.py File 8384 bytes May 31 2024 13:51:44.
fix_ws_comma.py File 1090 bytes May 31 2024 13:51:44.
fix_xrange.py File 2694 bytes May 31 2024 13:51:44.
fix_xreadlines.py File 689 bytes May 31 2024 13:51:44.
fix_zip.py File 902 bytes May 31 2024 13:51:44.

Reading File: //opt//alt/python35/lib64/python3.5/lib2to3/fixes/fix_next.py

"""Fixer for it.next() -> next(it), per PEP 3114."""
# Author: Collin Winter

# Things that currently aren't covered:
#   - listcomp "next" names aren't warned
#   - "with" statement targets aren't checked

# Local imports
from ..pgen2 import token
from ..pygram import python_symbols as syms
from .. import fixer_base
from ..fixer_util import Name, Call, find_binding

bind_warning = "Calls to builtin next() possibly shadowed by global binding"


class FixNext(fixer_base.BaseFix):
    BM_compatible = True
    PATTERN = """
    power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > >
    |
    power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > >
    |
    classdef< 'class' any+ ':'
              suite< any*
                     funcdef< 'def'
                              name='next'
                              parameters< '(' NAME ')' > any+ >
                     any* > >
    |
    global=global_stmt< 'global' any* 'next' any* >
    """

    order = "pre" # Pre-order tree traversal

    def start_tree(self, tree, filename):
        super(FixNext, self).start_tree(tree, filename)

        n = find_binding('next', tree)
        if n:
            self.warning(n, bind_warning)
            self.shadowed_next = True
        else:
            self.shadowed_next = False

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

        base = results.get("base")
        attr = results.get("attr")
        name = results.get("name")

        if base:
            if self.shadowed_next:
                attr.replace(Name("__next__", prefix=attr.prefix))
            else:
                base = [n.clone() for n in base]
                base[0].prefix = ""
                node.replace(Call(Name("next", prefix=node.prefix), base))
        elif name:
            n = Name("__next__", prefix=name.prefix)
            name.replace(n)
        elif attr:
            # We don't do this transformation if we're assigning to "x.next".
            # Unfortunately, it doesn't seem possible to do this in PATTERN,
            #  so it's being done here.
            if is_assign_target(node):
                head = results["head"]
                if "".join([str(n) for n in head]).strip() == '__builtin__':
                    self.warning(node, bind_warning)
                return
            attr.replace(Name("__next__"))
        elif "global" in results:
            self.warning(node, bind_warning)
            self.shadowed_next = True


### The following functions help test if node is part of an assignment
###  target.

def is_assign_target(node):
    assign = find_assign(node)
    if assign is None:
        return False

    for child in assign.children:
        if child.type == token.EQUAL:
            return False
        elif is_subtree(child, node):
            return True
    return False

def find_assign(node):
    if node.type == syms.expr_stmt:
        return node
    if node.type == syms.simple_stmt or node.parent is None:
        return None
    return find_assign(node.parent)

def is_subtree(root, node):
    if root == node:
        return True
    return any(is_subtree(c, node) for c in root.children)

SILENT KILLER Tool