$70 GRAYBYTE WORDPRESS FILE MANAGER $90

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/cloudlinux/venv/lib/python3.11/site-packages/pylint/extensions/

HOME
Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/pylint/extensions//emptystring.py
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt

"""Looks for  comparisons to empty string."""

from __future__ import annotations

import itertools
from typing import TYPE_CHECKING

from astroid import nodes

from pylint import checkers
from pylint.checkers import utils
from pylint.interfaces import HIGH

if TYPE_CHECKING:
    from pylint.lint import PyLinter


class CompareToEmptyStringChecker(checkers.BaseChecker):
    name = "compare-to-empty-string"
    msgs = {
        "C1901": (
            '"%s" can be simplified to "%s" as an empty string is falsey',
            "compare-to-empty-string",
            "Used when Pylint detects comparison to an empty string constant.",
        )
    }

    options = ()

    @utils.only_required_for_messages("compare-to-empty-string")
    def visit_compare(self, node: nodes.Compare) -> None:
        """Checks for comparisons to empty string.

        Most of the time you should use the fact that empty strings are false.
        An exception to this rule is when an empty string value is allowed in the program
        and has a different meaning than None!
        """
        _operators = {"!=", "==", "is not", "is"}
        # note: astroid.Compare has the left most operand in node.left while the rest
        # are a list of tuples in node.ops the format of the tuple is
        # ('compare operator sign', node) here we squash everything into `ops`
        # to make it easier for processing later
        ops: list[tuple[str, nodes.NodeNG | None]] = [("", node.left)]
        ops.extend(node.ops)
        iter_ops = iter(ops)
        ops = list(itertools.chain(*iter_ops))  # type: ignore[arg-type]
        for ops_idx in range(len(ops) - 2):
            op_1: nodes.NodeNG | None = ops[ops_idx]
            op_2: str = ops[ops_idx + 1]  # type: ignore[assignment]
            op_3: nodes.NodeNG | None = ops[ops_idx + 2]
            error_detected = False
            if op_1 is None or op_3 is None or op_2 not in _operators:
                continue
            node_name = ""
            # x ?? ""
            if utils.is_empty_str_literal(op_1):
                error_detected = True
                node_name = op_3.as_string()
            # '' ?? X
            elif utils.is_empty_str_literal(op_3):
                error_detected = True
                node_name = op_1.as_string()
            if error_detected:
                suggestion = f"not {node_name}" if op_2 in {"==", "is"} else node_name
                self.add_message(
                    "compare-to-empty-string",
                    args=(node.as_string(), suggestion),
                    node=node,
                    confidence=HIGH,
                )


def register(linter: PyLinter) -> None:
    linter.register_checker(CompareToEmptyStringChecker(linter))

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
14 Aug 2025 9.24 PM
root / root
0755
__pycache__
--
14 Aug 2025 9.24 PM
root / root
0755
__init__.py
0.562 KB
17 Apr 2025 8.10 PM
root / root
0644
_check_docs_utils.py
25.742 KB
17 Apr 2025 8.10 PM
root / root
0644
bad_builtin.py
2.216 KB
17 Apr 2025 8.10 PM
root / root
0644
broad_try_clause.py
2.248 KB
17 Apr 2025 8.10 PM
root / root
0644
check_elif.py
2.089 KB
17 Apr 2025 8.10 PM
root / root
0644
code_style.py
12.507 KB
17 Apr 2025 8.10 PM
root / root
0644
comparetozero.py
3.094 KB
17 Apr 2025 8.10 PM
root / root
0644
comparison_placement.py
2.297 KB
17 Apr 2025 8.10 PM
root / root
0644
confusing_elif.py
1.99 KB
17 Apr 2025 8.10 PM
root / root
0644
consider_refactoring_into_while_condition.py
3.234 KB
17 Apr 2025 8.10 PM
root / root
0644
consider_ternary_expression.py
1.658 KB
17 Apr 2025 8.10 PM
root / root
0644
dict_init_mutate.py
2.062 KB
17 Apr 2025 8.10 PM
root / root
0644
docparams.py
25.298 KB
17 Apr 2025 8.10 PM
root / root
0644
docstyle.py
2.874 KB
17 Apr 2025 8.10 PM
root / root
0644
dunder.py
2.33 KB
17 Apr 2025 8.10 PM
root / root
0644
empty_comment.py
1.909 KB
17 Apr 2025 8.10 PM
root / root
0644
emptystring.py
2.902 KB
17 Apr 2025 8.10 PM
root / root
0644
eq_without_hash.py
1.421 KB
17 Apr 2025 8.10 PM
root / root
0644
for_any_all.py
5.688 KB
17 Apr 2025 8.10 PM
root / root
0644
magic_value.py
4.139 KB
17 Apr 2025 8.10 PM
root / root
0644
mccabe.py
6.891 KB
17 Apr 2025 8.10 PM
root / root
0644
no_self_use.py
3.624 KB
17 Apr 2025 8.10 PM
root / root
0644
overlapping_exceptions.py
3.262 KB
17 Apr 2025 8.10 PM
root / root
0644
private_import.py
10.972 KB
17 Apr 2025 8.10 PM
root / root
0644
redefined_loop_name.py
3.145 KB
17 Apr 2025 8.10 PM
root / root
0644
redefined_variable_type.py
3.999 KB
17 Apr 2025 8.10 PM
root / root
0644
set_membership.py
1.754 KB
17 Apr 2025 8.10 PM
root / root
0644
typing.py
19.912 KB
17 Apr 2025 8.10 PM
root / root
0644
while_used.py
1.067 KB
17 Apr 2025 8.10 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF