Continue refactoring resolve and hygiene#63535
Conversation
src/librustc_resolve/lib.rs
Outdated
There was a problem hiding this comment.
Defeault with parameter looks odd. Perhaps module_scope?
There was a problem hiding this comment.
I agree that default isn't great here, but I'm not sure what to call it. Either way, I feel like a comment for this function would be helpful.
There was a problem hiding this comment.
Renamed into ParentScope::module and some comments are added.
There was a problem hiding this comment.
👍 I find privacy super useful when reading new parts of the compiler
|
r=me with conflicts resolved, with or without the comment being addressed. |
…::root()` For consistency with `ExpnId::root`. Also introduce a helper `Span::with_root_ctxt` for creating spans with `SyntaxContext::root()` context
`Ident` has had a full span rather than just a `SyntaxContext` for a long time now.
The expansion info is not optional and should always exist
Traces already contain module info without that. It's easy to forget to call `finalize_*` on a module. In particular, macros enum and trait modules weren't finalized. By happy accident macros weren't placed into those modules until now.
The previous approach was brittle - what would happen if `ParentScope` wasn't created by `invoc_parent_scope`? That's exactly the case for various uses of `ParentScope` in diagnostics and in built-in attribute validation.
Remove some unnecessary parameters from functions
It was very similar to `ParentScope` and mostly could be replaced by it.
By allocating its derive paths on the resolver arena.
It was introduced to avoid going through `hygiene_data`, but now it's read only once, when `ParseSess` is created, so going through a lock is ok.
For naming consistency with everything else in this area
|
@bors r=matthewjasper |
|
📌 Commit c762773 has been approved by |
Continue refactoring resolve and hygiene The general goal is addressing FIXMEs from the previous PRs. Merging similar data structures (+ prerequisites for such merging), accounting for the fact that all `ExpnId`s have associated data in `HygieneData` now (less `Option`s). Also, some renaming. This should be the last renaming session in this area, I think. r? @matthewjasper
Continue refactoring resolve and hygiene The general goal is addressing FIXMEs from the previous PRs. Merging similar data structures (+ prerequisites for such merging), accounting for the fact that all `ExpnId`s have associated data in `HygieneData` now (less `Option`s). Also, some renaming. This should be the last renaming session in this area, I think. r? @matthewjasper
Continue refactoring resolve and hygiene The general goal is addressing FIXMEs from the previous PRs. Merging similar data structures (+ prerequisites for such merging), accounting for the fact that all `ExpnId`s have associated data in `HygieneData` now (less `Option`s). Also, some renaming. This should be the last renaming session in this area, I think. r? @matthewjasper
Rollup of 7 pull requests Successful merges: - #62593 (Group all ABI tests.) - #63173 (Use libunwind from llvm-project submodule for musl targets) - #63535 (Continue refactoring resolve and hygiene) - #63539 (Suggest Rust 2018 on `<expr>.await` with no such field) - #63584 (libcore: more cleanups using `#![feature(associated_type_bounds)]`) - #63612 (Do not suggest `try_into` for base types inside of macro expansions) - #63615 (Fix typo in DoubleEndedIterator::nth_back doc) Failed merges: r? @ghost
|
☔ The latest upstream changes (presumably #63627) made this pull request unmergeable. Please resolve the merge conflicts. |
…ewjasper resolve: Properly integrate derives and `macro_rules` scopes So, ```rust #[derive(A, B)] struct S; m!(); ``` turns into something like ```rust struct S; A_placeholder!( struct S; ); B_placeholder!( struct S; ); m!(); ``` during expansion. And for `m!()` its "`macro_rules` scope" (aka "legacy scope") should point to the `B_placeholder` call rather than to the derive container `#[derive(A, B)]`. `fn build_reduced_graph` now makes sure the legacy scope points to the right thing. (It's still a mystery for me why this worked before rust-lang#63535.) Unfortunately, placeholders from derives are currently treated separately from placeholders from other macros and need to be passed as `extra_placeholders` rather than a part of the AST fragment. That's fixable, but I wanted to keep this PR more minimal to close the regression faster. Fixes rust-lang#63651 r? @matthewjasper
The general goal is addressing FIXMEs from the previous PRs.
Merging similar data structures (+ prerequisites for such merging), accounting for the fact that all
ExpnIds have associated data inHygieneDatanow (lessOptions).Also, some renaming.
This should be the last renaming session in this area, I think.
r? @matthewjasper