You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auto merge of #37602 - jseyfried:directory_ownership, r=nikomatsakis
parser: simplify directory ownership semantics
This PR simplifies the semantics of "directory ownership". After this PR,
- a non-inline module without a `#[path]` attribute (e.g. `mod foo;`) is allowed iff its parent module/block (whichever is nearer) is a directory owner,
- an non-inline module is a directory owner iff its corresponding file is named `mod.rs` (c.f. [comment](#32401 (comment))),
- a block is never a directory owner (c.f. #31534), and
- an inline module is a directory owner iff either
- its parent module/block is a directory owner (again, c.f. #31534), or
- it has a `#[path]` attribute (c.f. #36789).
These semantics differ from today's in three orthogonal ways:
- `#[path = "foo.rs"] mod foo;` is no longer a directory owner. This is a [breaking-change].
- #36789 is generalized to apply to modules that are not directory owners in addition to blocks.
- A macro-expanded non-inline module is only allowed where an ordinary non-inline module would be allowed. Today, we incorrectly allow macro-expanded non-inline modules in modules that are not directory owners (but not in blocks). This is a [breaking-change].
Fixes#32401.
r? @nikomatsakis
0 commit comments