Current Path: > > opt > cloudlinux > venv > lib64 > python3.11 > site-packages > pylint > extensions >
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 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__pycache__ | Directory | - | - | |
__init__.py | File | 575 bytes | April 17 2025 13:10:59. | |
_check_docs_utils.py | File | 26360 bytes | April 17 2025 13:10:59. | |
bad_builtin.py | File | 2269 bytes | April 17 2025 13:10:59. | |
broad_try_clause.py | File | 2302 bytes | April 17 2025 13:10:59. | |
check_elif.py | File | 2139 bytes | April 17 2025 13:10:59. | |
code_style.py | File | 12807 bytes | April 17 2025 13:10:59. | |
comparetozero.py | File | 3168 bytes | April 17 2025 13:10:59. | |
comparison_placement.py | File | 2352 bytes | April 17 2025 13:10:59. | |
confusing_elif.py | File | 2038 bytes | April 17 2025 13:10:59. | |
consider_refactoring_into_while_condition.py | File | 3312 bytes | April 17 2025 13:10:59. | |
consider_ternary_expression.py | File | 1698 bytes | April 17 2025 13:10:59. | |
dict_init_mutate.py | File | 2111 bytes | April 17 2025 13:10:59. | |
docparams.py | File | 25905 bytes | April 17 2025 13:10:59. | |
docstyle.py | File | 2943 bytes | April 17 2025 13:10:59. | |
dunder.py | File | 2386 bytes | April 17 2025 13:10:59. | |
empty_comment.py | File | 1955 bytes | April 17 2025 13:10:59. | |
emptystring.py | File | 2972 bytes | April 17 2025 13:10:59. | |
eq_without_hash.py | File | 1455 bytes | April 17 2025 13:10:59. | |
for_any_all.py | File | 5825 bytes | April 17 2025 13:10:59. | |
magic_value.py | File | 4238 bytes | April 17 2025 13:10:59. | |
mccabe.py | File | 7056 bytes | April 17 2025 13:10:59. | |
no_self_use.py | File | 3711 bytes | April 17 2025 13:10:59. | |
overlapping_exceptions.py | File | 3340 bytes | April 17 2025 13:10:59. | |
private_import.py | File | 11235 bytes | April 17 2025 13:10:59. | |
redefined_loop_name.py | File | 3220 bytes | April 17 2025 13:10:59. | |
redefined_variable_type.py | File | 4095 bytes | April 17 2025 13:10:59. | |
set_membership.py | File | 1796 bytes | April 17 2025 13:10:59. | |
typing.py | File | 20390 bytes | April 17 2025 13:10:59. | |
while_used.py | File | 1093 bytes | April 17 2025 13:10:59. |
# 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))
SILENT KILLER Tool