Repository navigation
Pass the unremapped path to the rustc invocation for doctests - #163956
Merged
Merged
Conversation
GuillaumeGomez
approved these changes
Oct 8, 2026
Urgau
force-pushed
the
rustdoc-doctest-scopes
branch
from
October 8, 2026 20:11
ff1b312 to
9cf4406
Compare
Member
Author
|
@bors r=GuillaumeGomez |
Contributor
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Oct 9, 2026
…illaumeGomez
Pass the unremapped path to the `rustc` invocation for doctests
Turns out that `--remap-path-scope` is only half working with doctests, this is because `rustdoc` use a secret environment variable to pass the real filename of the doctest.
However we were only passing a remapped path. That means that doctests source path were getting remapped, but only for one scope: `documentation`. It didn't respect `macro` for `file!` for example.
To fix this, we have to:
1. pass the local path to the `rustc` invocation
2. have `rustc` treat that path as a real filename and apply remapping per scope to it
- I had to add a new `Input` variant, otherwise I can't differentiate normal input `-` from doctests `-` source
4. we have to pass `--remap-path-{prefix,scope}` to `rustc` so the path actually gets remap properly
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 9, 2026
…uwer Rollup of 7 pull requests Successful merges: - #162652 (Syntactically reject leading parenthesized precise capturing lists in bare trait object types (`(use<…>)+`)) - #163337 (MIR move elimination [3/6]: PreciseLiveness) - #163954 (fix(bootstrap/darwin): fix rpath for distributed LLD) - #163956 (Pass the unremapped path to the `rustc` invocation for doctests) - #163634 (move overflow lint computation into decorator) - #163727 (rigid aliases to non-rigid for fully normalized check) - #163745 (replace `fully_monomorphized` with `cx.typing_env()`)
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Oct 9, 2026
…illaumeGomez
Pass the unremapped path to the `rustc` invocation for doctests
Turns out that `--remap-path-scope` is only half working with doctests, this is because `rustdoc` use a secret environment variable to pass the real filename of the doctest.
However we were only passing a remapped path. That means that doctests source path were getting remapped, but only for one scope: `documentation`. It didn't respect `macro` for `file!` for example.
To fix this, we have to:
1. pass the local path to the `rustc` invocation
2. have `rustc` treat that path as a real filename and apply remapping per scope to it
- I had to add a new `Input` variant, otherwise I can't differentiate normal input `-` from doctests `-` source
4. we have to pass `--remap-path-{prefix,scope}` to `rustc` so the path actually gets remap properly
Member
|
💔 I suspect this PR failed tests as part of a rollup After fixing the problem, consider running a try job for the failed job before re-approving. Link to failure: #164015 (comment) |
Contributor
|
This pull request was unapproved. This PR was contained in a rollup (#164015), which was unapproved. |
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 9, 2026
…uwer Rollup of 11 pull requests Successful merges: - #162652 (Syntactically reject leading parenthesized precise capturing lists in bare trait object types (`(use<…>)+`)) - #163337 (MIR move elimination [3/6]: PreciseLiveness) - #163954 (fix(bootstrap/darwin): fix rpath for distributed LLD) - #163956 (Pass the unremapped path to the `rustc` invocation for doctests) - #163634 (move overflow lint computation into decorator) - #163666 (Updates the expect message library/core/src/time.rs) - #163727 (rigid aliases to non-rigid for fully normalized check) - #163745 (replace `fully_monomorphized` with `cx.typing_env()`) - #164000 (When mentioning that closure doesn't implement trait, point at closure) - #164007 ([rustdoc] Prefer local paths over remote ones when foreign item is locally reexported) - #164017 (cg_llvm: Avoid some explicit casts to `*const c_char`)
Urgau
force-pushed
the
rustdoc-doctest-scopes
branch
from
October 9, 2026 16:11
9cf4406 to
85b2304
Compare
Member
Author
|
CI sometimes runs in @bors r=GuillaumeGomez |
Contributor
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Oct 9, 2026
…illaumeGomez
Pass the unremapped path to the `rustc` invocation for doctests
Turns out that `--remap-path-scope` is only half working with doctests, this is because `rustdoc` use a secret environment variable to pass the real filename of the doctest.
However we were only passing a remapped path. That means that doctests source path were getting remapped, but only for one scope: `documentation`. It didn't respect `macro` for `file!` for example.
To fix this, we have to:
1. pass the local path to the `rustc` invocation
2. have `rustc` treat that path as a real filename and apply remapping per scope to it
- I had to add a new `Input` variant, otherwise I can't differentiate normal input `-` from doctests `-` source
4. we have to pass `--remap-path-{prefix,scope}` to `rustc` so the path actually gets remap properly
This was referenced Oct 9, 2026
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 9, 2026
…uwer Rollup of 24 pull requests Successful merges: - #161998 ( Support type-relative assoc item paths in generic param defaults & const param types) - #162106 (Helpful suggestions for incorrect address-of mutability (2)) - #162652 (Syntactically reject leading parenthesized precise capturing lists in bare trait object types (`(use<…>)+`)) - #163337 (MIR move elimination [3/6]: PreciseLiveness) - #163938 (-Zassumptions-on-binders: rewrite alias outlives constraints more goodly) - #163939 (Better debug impls for some assumptions on binders types) - #163954 (fix(bootstrap/darwin): fix rpath for distributed LLD) - #163956 (Pass the unremapped path to the `rustc` invocation for doctests) - #164042 (Allow testing cg-gcc on any target) - #162443 (Do not retain `Normalization` goal errors in nested goals for `BestObligationVisitor:: non_trivial_candidates `) - #162908 (Fix - const parameters rejected when identical) - #163193 (cfi: mangle `f128` as `e` rather than `g` on platforms without `_Float128`) - #163634 (move overflow lint computation into decorator) - #163666 (Updates the expect message library/core/src/time.rs) - #163727 (rigid aliases to non-rigid for fully normalized check) - #163745 (replace `fully_monomorphized` with `cx.typing_env()`) - #163912 (Fix debug assert failure in `note_obligation_cause_code_inner`) - #163950 (don't treat inherited opaques as defining) - #163972 (const-eval: ICE when we hit a non-const fn) - #164000 (When mentioning that closure doesn't implement trait, point at closure) - #164007 ([rustdoc] Prefer local paths over remote ones when foreign item is locally reexported) - #164008 (properly ignore the current goal's usages) - #164017 (cg_llvm: Avoid some explicit casts to `*const c_char`) - #164025 (Less `CanonicalVarValues`)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 9, 2026
Rollup merge of #163956 - Urgau:rustdoc-doctest-scopes, r=GuillaumeGomez Pass the unremapped path to the `rustc` invocation for doctests Turns out that `--remap-path-scope` is only half working with doctests, this is because `rustdoc` use a secret environment variable to pass the real filename of the doctest. However we were only passing a remapped path. That means that doctests source path were getting remapped, but only for one scope: `documentation`. It didn't respect `macro` for `file!` for example. To fix this, we have to: 1. pass the local path to the `rustc` invocation 2. have `rustc` treat that path as a real filename and apply remapping per scope to it - I had to add a new `Input` variant, otherwise I can't differentiate normal input `-` from doctests `-` source 4. we have to pass `--remap-path-{prefix,scope}` to `rustc` so the path actually gets remap properly
This was referenced Oct 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Turns out that
--remap-path-scopeis only half working with doctests, this is becauserustdocuse a secret environment variable to pass the real filename of the doctest.However we were only passing a remapped path. That means that doctests source path were getting remapped, but only for one scope:
documentation. It didn't respectmacroforfile!for example.To fix this, we have to:
rustcinvocationrustctreat that path as a real filename and apply remapping per scope to itInputvariant, otherwise I can't differentiate normal input-from doctests-source--remap-path-{prefix,scope}torustcso the path actually gets remap properlyThanks to @weihanglo for pointing me to the bug.
Relevant for #163895
r? @GuillaumeGomez