ruff/crates
Charlie Marsh c7d48e10e6
Detect empty implicit namespace packages (#14236)
## Summary

The implicit namespace package rule currently fails to detect cases like
the following:

```text
foo/
├── __init__.py
└── bar/
    └── baz/
        └── __init__.py
```

The problem is that we detect a root at `foo`, and then an independent
root at `baz`. We _would_ detect that `bar` is an implicit namespace
package, but it doesn't contain any files! So we never check it, and
have no place to raise the diagnostic.

This PR adds detection for these kinds of nested packages, and augments
the `INP` rule to flag the `__init__.py` file above with a specialized
message. As a side effect, I've introduced a dedicated `PackageRoot`
struct which we can pass around in lieu of Yet Another `Path`.

For now, I'm only enabling this in preview (and the approach doesn't
affect any other rules). It's a bug fix, but it may end up expanding the
rule.

Closes https://github.com/astral-sh/ruff/issues/13519.
2024-11-09 22:03:34 -05:00
..
red_knot Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
red_knot_python_semantic [red-knot] More Type constructors (#14227) 2024-11-09 16:57:11 +00:00
red_knot_server Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
red_knot_test Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
red_knot_vendored Sync vendored typeshed stubs (#14030) 2024-11-01 10:51:56 +00:00
red_knot_wasm Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
red_knot_workspace [red-knot] infer types for PEP695 typevars (#14182) 2024-11-08 21:23:05 +00:00
ruff Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00
ruff_benchmark Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
ruff_cache Fix cache key collisions for paths with separators (#12159) 2024-07-03 07:36:46 -05:00
ruff_db Introduce Diagnostic trait (#14130) 2024-11-07 13:26:21 +01:00
ruff_dev Alternate quotes for strings inside f-strings in preview (#13860) 2024-10-23 07:57:53 +02:00
ruff_diagnostics [Minor typo] Fix article in "an fix" (#12797) 2024-08-10 21:22:00 -04:00
ruff_formatter Join implicit concatenated strings when they fit on a line (#13663) 2024-10-24 11:52:22 +02:00
ruff_graph Bump MSRV to Rust 1.80 (#13826) 2024-10-20 10:55:36 +02:00
ruff_index [red-knot] small efficiency improvements and bugfixes to use-def map building (#12373) 2024-07-18 09:24:58 -07:00
ruff_linter Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00
ruff_macros Derive message formats macro support to string (#14093) 2024-11-04 18:06:25 +01:00
ruff_notebook Bump MSRV to Rust 1.80 (#13826) 2024-10-20 10:55:36 +02:00
ruff_python_ast Avoid cloning Name when looking up function and class types (#14092) 2024-11-04 15:52:59 +01:00
ruff_python_ast_integration_tests [internal] ComparableExpr (f)strings and bytes made invariant under concatenation (#13301) 2024-09-25 16:58:57 +02:00
ruff_python_codegen Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_python_formatter Disallow single-line implicit concatenated strings (#13928) 2024-11-03 11:49:26 +00:00
ruff_python_index Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_python_literal Remove some unused pub functions (#11576) 2024-05-28 09:56:51 -04:00
ruff_python_parser Short circuit lex_identifier if the name is longer or shorter than any known keyword (#13815) 2024-10-19 11:07:15 +00:00
ruff_python_resolver chore(deps): update rust crate insta to v1.38.0 (#10701) 2024-04-01 15:44:30 +00:00
ruff_python_semantic Fix miscellaneous issues in await-outside-async detection (#14218) 2024-11-08 21:07:13 -05:00
ruff_python_stdlib Regenerate known_stdlibs.rs with stdlibs 2024.10.25 (#13963) 2024-10-28 08:37:54 -04:00
ruff_python_trivia Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_python_trivia_integration_tests Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_server Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00
ruff_source_file Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_text_size Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
ruff_wasm Bump version to 0.7.3 (#14197) 2024-11-08 16:39:37 +05:30
ruff_workspace Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00