SILENT KILLERPanel

Current Path: > > opt > alt > python37 > lib > python3.7 > site-packages > > libfuturize > 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/python37/lib/python3.7/site-packages//libfuturize/fixes

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 5141 bytes October 25 2018 22:21:01.
fix_UserDict.py File 3840 bytes October 25 2018 22:21:01.
fix_absolute_import.py File 3140 bytes October 25 2018 22:21:01.
fix_add__future__imports_except_unicode_literals.py File 662 bytes October 25 2018 22:21:01.
fix_basestring.py File 394 bytes October 25 2018 22:21:01.
fix_bytes.py File 685 bytes October 25 2018 22:21:01.
fix_cmp.py File 701 bytes October 25 2018 22:21:01.
fix_division.py File 228 bytes October 25 2018 22:21:01.
fix_division_safe.py File 3460 bytes October 25 2018 22:21:01.
fix_execfile.py File 921 bytes October 25 2018 22:21:01.
fix_future_builtins.py File 2027 bytes October 25 2018 22:21:01.
fix_future_standard_library.py File 733 bytes October 25 2018 22:21:01.
fix_future_standard_library_urllib.py File 1001 bytes October 25 2018 22:21:01.
fix_metaclass.py File 9568 bytes October 25 2018 22:21:01.
fix_next_call.py File 3158 bytes October 25 2018 22:21:01.
fix_object.py File 407 bytes October 25 2018 22:21:01.
fix_oldstr_wrap.py File 1214 bytes October 25 2018 22:21:01.
fix_order___future__imports.py File 829 bytes October 25 2018 22:21:01.
fix_print.py File 3384 bytes October 25 2018 22:21:01.
fix_print_with_import.py File 735 bytes October 25 2018 22:21:01.
fix_raise.py File 2167 bytes October 25 2018 22:21:01.
fix_remove_old__future__imports.py File 851 bytes October 25 2018 22:21:01.
fix_unicode_keep_u.py File 779 bytes October 25 2018 22:21:01.
fix_unicode_literals_import.py File 367 bytes October 25 2018 22:21:01.
fix_xrange_with_import.py File 479 bytes October 25 2018 22:21:01.

Reading File: //opt/alt/python37/lib/python3.7/site-packages//libfuturize/fixes/fix_next_call.py

"""
Based on fix_next.py by Collin Winter.

Replaces it.next() -> next(it), per PEP 3114.

Unlike fix_next.py, this fixer doesn't replace the name of a next method with __next__,
which would break Python 2 compatibility without further help from fixers in
stage 2.
"""

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

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


class FixNextCall(fixer_base.BaseFix):
    BM_compatible = True
    PATTERN = """
    power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > >
    |
    power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > >
    |
    global=global_stmt< 'global' any* 'next' any* >
    """

    order = "pre" # Pre-order tree traversal

    def start_tree(self, tree, filename):
        super(FixNextCall, 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:
                # Omit this:
                # attr.replace(Name("__next__", prefix=attr.prefix))
                pass
            else:
                base = [n.clone() for n in base]
                base[0].prefix = ""
                node.replace(Call(Name("next", prefix=node.prefix), base))
        elif name:
            # Omit this:
            # n = Name("__next__", prefix=name.prefix)
            # name.replace(n)
            pass
        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
            # Omit this:
            # 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