Skip to content

False-positive: New invalid-name handling does not handle elif correctly #10664

@snctfd

Description

@snctfd

Bug description

The patch notes for 4.0.0 show that invalid-name now tries to figure out if a module-level variable is constant or not. It shows that the following would be treated as a variable:

LIMIT = 500  # [invalid-name]
if sometimes:
    LIMIT = 1  # [invalid-name]

The release notes state (correctly) that the following should prevent the constant from being treated as a variable:

if sometimes:
    LIMIT = 1
else:
    LIMIT = 500  # exclusive assignment: uses const regex, no warning

However, the following gives a false-positive invalid-name alert:

if sometimes == 1:
    LIMIT = 1  # [invalid-name]
elif sometimes == 2:
    LIMIT = 2  # [invalid-name]
else:
    LIMIT = 500  # [invalid-name]

Configuration

Command used

python3 -m pylint test3.py

Pylint output

test3.txt:6:3: C0103: Variable name "LIMIT" doesn't conform to snake_case naming style (invalid-name)
test3.txt:8:3: C0103: Variable name "LIMIT" doesn't conform to snake_case naming style (invalid-name)
test3.txt:10:3: C0103: Variable name "LIMIT" doesn't conform to snake_case naming style (invalid-name)

Expected behavior

LIMIT is treated as a constant and no invalid-name is raised.

Pylint version

pylint 4.0.0
astroid 4.0.1
Python 3.12.3 (main, Aug 14 2025, 17:47:21) [GCC 13.3.0]

OS / Environment

Ubuntu 24.04

Additional dependencies

Metadata

Metadata

Labels

Needs triage 📥Just created, needs acknowledgment, triage, and proper labelling

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions