Skip to content

Commit

Permalink
Auto merge of #131224 - notriddle:notriddle/intra-doc-link-value, r=G…
Browse files Browse the repository at this point in the history
…uillaumeGomez

rustdoc: prevent ctors from resolving

Fixes #130591
  • Loading branch information
bors committed Oct 4, 2024
2 parents 3002af6 + 253fec4 commit 267cf8d
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 6 deletions.
4 changes: 3 additions & 1 deletion compiler/rustc_resolve/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2148,7 +2148,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {

match self.maybe_resolve_path(&segments, Some(ns), &parent_scope, None) {
PathResult::Module(ModuleOrUniformRoot::Module(module)) => Some(module.res().unwrap()),
PathResult::NonModule(path_res) => path_res.full_res(),
PathResult::NonModule(path_res) => {
path_res.full_res().filter(|res| !matches!(res, Res::Def(DefKind::Ctor(..), _)))
}
PathResult::Module(ModuleOrUniformRoot::ExternPrelude) | PathResult::Failed { .. } => {
None
}
Expand Down
4 changes: 2 additions & 2 deletions tests/rustdoc-ui/intra-doc/disambiguator-mismatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ struct X {
//~| HELP prefix with `field@`

/// Link to [field@S::A]
//~^ ERROR incompatible link kind for `S::A`
//~| NOTE this link resolved
//~^ ERROR unresolved link to `S::A`
//~| NOTE this link resolves
//~| HELP prefix with `variant@`
pub fn f() {}
6 changes: 3 additions & 3 deletions tests/rustdoc-ui/intra-doc/disambiguator-mismatch.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,13 @@ help: to link to the field, prefix with `field@`
LL | /// Link to [field@X::y]
| ~~~~~~

error: incompatible link kind for `S::A`
error: unresolved link to `S::A`
--> $DIR/disambiguator-mismatch.rs:93:14
|
LL | /// Link to [field@S::A]
| ^^^^^^^^^^ this link resolved to a unit variant, which is not a field
| ^^^^^^^^^^ this link resolves to the variant `A`, which is not in the value namespace
|
help: to link to the unit variant, prefix with `variant@`
help: to link to the variant, prefix with `variant@`
|
LL | /// Link to [variant@S::A]
| ~~~~~~~~
Expand Down
35 changes: 35 additions & 0 deletions tests/rustdoc-ui/intra-doc/value-ctor.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// https://github.com/rust-lang/rust/issues/130591
#![deny(rustdoc::broken_intra_doc_links)]
#![crate_name = "foo"]

/// [value@Foo::X] //~ERROR broken
pub enum Foo {
X,
}

/// [tst][value@MyStruct] //~ERROR broken
pub struct MyStruct;

pub enum MyEnum {
Internals,
}

pub use MyEnum::*;

/// In this context, [a][type@Internals] is a struct,
/// while [b][value@Internals] fails. //~ERROR broken
/// Also, [c][struct@Internals] is a struct,
/// while [d][variant@Internals] fails. //~ERROR broken
pub struct Internals {
foo: (),
}

pub mod inside {
pub struct Internals2;
}

use inside::*;

/// In this context, [a][type@Internals2] is an enum,
/// while [b][value@Internals2] fails. //~ERROR broken
pub enum Internals2 {}
62 changes: 62 additions & 0 deletions tests/rustdoc-ui/intra-doc/value-ctor.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
error: unresolved link to `Foo::X`
--> $DIR/value-ctor.rs:5:6
|
LL | /// [value@Foo::X]
| ^^^^^^^^^^^^ this link resolves to the variant `X`, which is not in the value namespace
|
note: the lint level is defined here
--> $DIR/value-ctor.rs:2:9
|
LL | #![deny(rustdoc::broken_intra_doc_links)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: to link to the variant, prefix with `variant@`
|
LL | /// [variant@Foo::X]
| ~~~~~~~~

error: unresolved link to `MyStruct`
--> $DIR/value-ctor.rs:10:11
|
LL | /// [tst][value@MyStruct]
| ^^^^^^^^^^^^^^ this link resolves to the struct `MyStruct`, which is not in the value namespace
|
help: to link to the struct, prefix with `struct@`
|
LL | /// [tst][struct@MyStruct]
| ~~~~~~~

error: unresolved link to `Internals`
--> $DIR/value-ctor.rs:20:15
|
LL | /// while [b][value@Internals] fails.
| ^^^^^^^^^^^^^^^ this link resolves to the struct `Internals`, which is not in the value namespace
|
help: to link to the struct, prefix with `struct@`
|
LL | /// while [b][struct@Internals] fails.
| ~~~~~~~

error: incompatible link kind for `Internals`
--> $DIR/value-ctor.rs:22:15
|
LL | /// while [d][variant@Internals] fails.
| ^^^^^^^^^^^^^^^^^ this link resolved to a struct, which is not a variant
|
help: to link to the struct, prefix with `struct@`
|
LL | /// while [d][struct@Internals] fails.
| ~~~~~~~

error: unresolved link to `Internals2`
--> $DIR/value-ctor.rs:34:15
|
LL | /// while [b][value@Internals2] fails.
| ^^^^^^^^^^^^^^^^ this link resolves to the enum `Internals2`, which is not in the value namespace
|
help: to link to the enum, prefix with `enum@`
|
LL | /// while [b][enum@Internals2] fails.
| ~~~~~

error: aborting due to 5 previous errors

0 comments on commit 267cf8d

Please sign in to comment.