Skip to content

[pylint] Ignore __init__.py files in (PLC0414) - #18400

Merged
dylwil3 merged 7 commits into
astral-sh:mainfrom
GideonBear:fix-f401-plc0414-conflict
Jun 20, 2025
Merged

dylwil3 merged 7 commits into
astral-sh:mainfrom
GideonBear:fix-f401-plc0414-conflict

Conversation

@GideonBear

@GideonBear GideonBear commented May 31, 2025 •

Copy link
Copy Markdown
Contributor

Summary

Ignore __init__.py files in useless-import-alias (PLC0414).
See discussion in #18365 and #6294: we want to allow redundant aliases in __init__.py files, as they're almost always intentional explicit re-exports.
Closes #18365
Closes #6294

Test Plan

I added a new snapshot test.

@GideonBear GideonBear changed the title [pylint] Ignore __init__.py files in (PLC0414) [pylint] Ignore __init__.py files in (PLC0414) May 31, 2025
@ntBre
ntBre self-requested a review May 31, 2025 14:05
@ntBre ntBre added the bug An issue describing something that isn't working, or a PR that fixes a bug label May 31, 2025
@github-actions

github-actions Bot commented May 31, 2025 •

Copy link
Copy Markdown
Contributor

ruff-ecosystem results

Linter (stable)

ℹ️ ecosystem check detected linter changes. (+0 -89 violations, +0 -0 fixes in 2 projects; 53 projects unchanged)

apache/airflow (+0 -5 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --no-preview --select ALL

- airflow-core/src/airflow/decorators/__init__.py:20:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:21:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:22:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:23:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:24:5: PLC0414 Import alias does not rename original package

zulip/zulip (+0 -84 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --no-preview --select ALL

- corporate/models/__init__.py:10:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:11:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:1:40: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:2:39: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:3:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:4:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:5:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:6:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:7:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:8:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:9:43: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:10:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:11:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:12:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:13:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:14:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:15:38: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:16:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:17:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:18:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:19:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:1:27: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:20:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:21:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:22:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:23:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:24:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:25:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:26:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:27:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:28:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:29:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:2:39: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:30:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:31:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:32:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:33:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:34:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:35:39: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:36:44: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:37:44: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:38:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:39:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:3:32: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:40:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:41:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:42:40: PLC0414 Import alias does not rename original package
... 37 additional changes omitted for project

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
PLC0414 89 0 89 0 0

Linter (preview)

ℹ️ ecosystem check detected linter changes. (+0 -89 violations, +0 -0 fixes in 2 projects; 53 projects unchanged)

apache/airflow (+0 -5 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview --select ALL

- airflow-core/src/airflow/decorators/__init__.py:20:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:21:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:22:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:23:5: PLC0414 Import alias does not rename original package
- airflow-core/src/airflow/decorators/__init__.py:24:5: PLC0414 Import alias does not rename original package

zulip/zulip (+0 -84 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview --select ALL

- corporate/models/__init__.py:10:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:11:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:1:40: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:2:39: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:3:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:4:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:5:36: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:6:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:7:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:8:43: PLC0414 Import alias does not rename original package
- corporate/models/__init__.py:9:43: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:10:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:11:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:12:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:13:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:14:34: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:15:38: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:16:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:17:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:18:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:19:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:1:27: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:20:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:21:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:22:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:23:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:24:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:25:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:26:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:27:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:28:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:29:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:2:39: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:30:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:31:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:32:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:33:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:34:36: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:35:39: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:36:44: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:37:44: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:38:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:39:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:3:32: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:40:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:41:40: PLC0414 Import alias does not rename original package
- zerver/models/__init__.py:42:40: PLC0414 Import alias does not rename original package
... 37 additional changes omitted for project

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
PLC0414 89 0 89 0 0

@MichaReiser

MichaReiser commented Jun 20, 2025 •

Copy link
Copy Markdown
Member

@ntBre or @dylwil3 could either of you review this PR.

@dylwil3 dylwil3 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! A couple nits

Comment thread crates/ruff_linter/resources/test/fixtures/pylint/import_aliasing_2/__init__.py Outdated
Comment thread crates/ruff_linter/src/rules/pylint/rules/useless_import_alias.rs Outdated
Comment thread crates/ruff_linter/src/rules/pylint/rules/useless_import_alias.rs Outdated
@dylwil3 dylwil3 added rule Implementing or modifying a lint rule preview Related to preview-mode features and removed bug An issue describing something that isn't working, or a PR that fixes a bug labels Jun 20, 2025
@dylwil3
dylwil3 force-pushed the fix-f401-plc0414-conflict branch from 72d9d86 to 9f9c0a0 Compare June 20, 2025 18:16
@dylwil3

dylwil3 commented Jun 20, 2025

Copy link
Copy Markdown
Collaborator

On second thought I decided to gate this behind preview for now. (I think technically we don't have to since it reduces the number of lints, but it seems like a big enough change that I think it's a good idea).

@dylwil3
dylwil3 enabled auto-merge (squash) June 20, 2025 18:17
@ntBre

ntBre commented Jun 20, 2025

Copy link
Copy Markdown
Contributor

Thank you both!

@dylwil3
dylwil3 merged commit 2910988 into astral-sh:main Jun 20, 2025
dcreager added a commit that referenced this pull request Jun 20, 2025
* main: (21 commits)
  [`flake8-logging`] Avoid false positive for `exc_info=True` outside `logger.exception` (`LOG014`) (#18737)
  [`flake8-pie`] Small docs fix to `PIE794` (#18829)
  [`pylint`] Ignore __init__.py files in (PLC0414) (#18400)
  Avoid generating diagnostics with per-file ignores (#18801)
  [`flake8-simplify`] Fix false negatives for shadowed bindings  (`SIM910`, `SIM911`) (#18794)
  [ty] Fix panics when pulling types for `ClassVar` or `Final` parameterized with >1 argument (#18824)
  [`pylint`] add fix safety section (`PLR1714`) (#18415)
  [Perflint] Small docs improvement to `PERF401` (#18786)
  [`pylint`] Avoid flattening nested `min`/`max` when outer call has single argument (`PLW3301`) (#16885)
  [`ruff`] Added `cls.__dict__.get('__annotations__')` check (`RUF063`) (#18233)
  [ty] Use `HashTable` in `PlaceTable` (#18819)
  docs: Correct collections-named-tuple example to use PascalCase assignment (#16884)
  [ty] ecosystem-analyzer workflow (#18719)
  [ty] Add support for `@staticmethod`s (#18809)
  unnecessary_dict_kwargs doc - a note on type checking benefits (#18666)
  [`flake8-pytest-style`] Mark autofix for `PT001` and `PT023` as unsafe if there's comments in the decorator (#18792)
  [ty] Surface matched overload diagnostic directly (#18452)
  [ty] Report when a dataclass contains more than one `KW_ONLY` field (#18731)
  [`flake8-pie`] Add fix safety section to `PIE794` (#18802)
  [`pycodestyle`] Add fix safety section to `W291` and `W293`  (#18800)
  ...
@GideonBear
GideonBear deleted the fix-f401-plc0414-conflict branch June 21, 2025 06:49
dylwil3 added a commit that referenced this pull request Sep 5, 2025
…` (`PLC0414`) (#20271)

Stabilizes change from #18400. Removed gating, updated docs, updated
tests.
ntBre pushed a commit that referenced this pull request Sep 8, 2025
…` (`PLC0414`) (#20271)

Stabilizes change from #18400. Removed gating, updated docs, updated
tests.
ntBre pushed a commit that referenced this pull request Sep 10, 2025
…` (`PLC0414`) (#20271)

Stabilizes change from #18400. Removed gating, updated docs, updated
tests.
ntBre pushed a commit that referenced this pull request Sep 10, 2025
…` (`PLC0414`) (#20271)

Stabilizes change from #18400. Removed gating, updated docs, updated
tests.
ntBre pushed a commit that referenced this pull request Sep 10, 2025
…` (`PLC0414`) (#20271)

Stabilizes change from #18400. Removed gating, updated docs, updated
tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview Related to preview-mode features rule Implementing or modifying a lint rule

Projects

None yet

4 participants