Use more appropriate return type for resolve_associated_item
Previously, the types looked like this: - None means this is not an associated item (but may be a variant field) - Some(Err) means this is known to be an error. I think the only way that can happen is if it resolved and but you had your own anchor. - Some(Ok(_, None)) was impossible. Now, this returns a nested Option and does the error handling and fiddling with the side channel in the caller. As a side-effect, it also removes duplicate error handling. This has one small change in behavior, which is that `resolve_primitive_associated_item` now goes through `variant_field` if it fails to resolve something. This is not ideal, but since it will be quickly rejected anyway, I think the performance hit is worth the cleanup. This also fixes a bug where struct fields would forget to set the side channel, adds a test for the bug, and ignores `private_intra_doc_links` in rustc_resolve (since it's always documented with --document-private-items).
This commit is contained in:
parent
ac04dbd056
commit
3b7e654fad
6 changed files with 103 additions and 98 deletions
|
|
@ -1,19 +1,27 @@
|
|||
warning: public documentation for `DocMe` links to private item `DontDocMe`
|
||||
--> $DIR/private.rs:5:11
|
||||
--> $DIR/private.rs:7:11
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::f`
|
||||
--> $DIR/private.rs:5:23
|
||||
--> $DIR/private.rs:7:23
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||
|
||||
warning: 2 warnings emitted
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::x`
|
||||
--> $DIR/private.rs:7:38
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||
|
||||
warning: 3 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,27 @@
|
|||
warning: public documentation for `DocMe` links to private item `DontDocMe`
|
||||
--> $DIR/private.rs:5:11
|
||||
--> $DIR/private.rs:7:11
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link will resolve properly if you pass `--document-private-items`
|
||||
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::f`
|
||||
--> $DIR/private.rs:5:23
|
||||
--> $DIR/private.rs:7:23
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: this link will resolve properly if you pass `--document-private-items`
|
||||
|
||||
warning: 2 warnings emitted
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::x`
|
||||
--> $DIR/private.rs:7:38
|
||||
|
|
||||
LL | /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
| ^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: this link will resolve properly if you pass `--document-private-items`
|
||||
|
||||
warning: 3 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -2,12 +2,16 @@
|
|||
// revisions: public private
|
||||
// [private]compile-flags: --document-private-items
|
||||
|
||||
/// docs [DontDocMe] [DontDocMe::f]
|
||||
// make sure to update `rustdoc/intra-doc/private.rs` if you update this file
|
||||
|
||||
/// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
//~^ WARNING public documentation for `DocMe` links to private item `DontDocMe`
|
||||
//~| WARNING public documentation for `DocMe` links to private item `DontDocMe::x`
|
||||
//~| WARNING public documentation for `DocMe` links to private item `DontDocMe::f`
|
||||
// FIXME: for [private] we should also make sure the link was actually generated
|
||||
pub struct DocMe;
|
||||
struct DontDocMe;
|
||||
struct DontDocMe {
|
||||
x: usize,
|
||||
}
|
||||
|
||||
impl DontDocMe {
|
||||
fn f() {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,17 @@
|
|||
#![crate_name = "private"]
|
||||
// compile-flags: --document-private-items
|
||||
/// docs [DontDocMe]
|
||||
|
||||
// make sure to update `rustdoc-ui/intra-doc/private.rs` if you update this file
|
||||
|
||||
/// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
|
||||
// @has private/struct.DocMe.html '//*a[@href="../private/struct.DontDocMe.html"]' 'DontDocMe'
|
||||
// @has private/struct.DocMe.html '//*a[@href="../private/struct.DontDocMe.html#method.f"]' 'DontDocMe::f'
|
||||
// @has private/struct.DocMe.html '//*a[@href="../private/struct.DontDocMe.html#structfield.x"]' 'DontDocMe::x'
|
||||
pub struct DocMe;
|
||||
struct DontDocMe;
|
||||
struct DontDocMe {
|
||||
x: usize,
|
||||
}
|
||||
|
||||
impl DontDocMe {
|
||||
fn f() {}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue