Address review comments
- Move MISSING_CRATE_LEVEL_DOCS to rustdoc directly - Update documentation This also takes the opportunity to make the `no-crate-level-doc-lint` test more specific.
This commit is contained in:
parent
e8ddfda813
commit
0517ea7cdc
8 changed files with 54 additions and 34 deletions
|
@ -329,6 +329,7 @@ fn register_builtins(store: &mut LintStore, no_interleave_lints: bool) {
|
||||||
const RUSTDOC_LINTS: &[&str] = &[
|
const RUSTDOC_LINTS: &[&str] = &[
|
||||||
"broken_intra_doc_links",
|
"broken_intra_doc_links",
|
||||||
"private_intra_doc_links",
|
"private_intra_doc_links",
|
||||||
|
"missing_crate_level_docs",
|
||||||
"missing_doc_code_examples",
|
"missing_doc_code_examples",
|
||||||
"private_doc_tests",
|
"private_doc_tests",
|
||||||
"invalid_codeblock_attributes",
|
"invalid_codeblock_attributes",
|
||||||
|
|
|
@ -1875,17 +1875,6 @@ declare_lint! {
|
||||||
"detects labels that are never used"
|
"detects labels that are never used"
|
||||||
}
|
}
|
||||||
|
|
||||||
declare_lint! {
|
|
||||||
/// The `missing_crate_level_docs` lint detects if documentation is
|
|
||||||
/// missing at the crate root. This is a `rustdoc` only lint, see the
|
|
||||||
/// documentation in the [rustdoc book].
|
|
||||||
///
|
|
||||||
/// [rustdoc book]: ../../../rustdoc/lints.html#missing_crate_level_docs
|
|
||||||
pub MISSING_CRATE_LEVEL_DOCS,
|
|
||||||
Allow,
|
|
||||||
"detects crates with no crate-level documentation"
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_lint! {
|
declare_lint! {
|
||||||
/// The `where_clauses_object_safety` lint detects for [object safety] of
|
/// The `where_clauses_object_safety` lint detects for [object safety] of
|
||||||
/// [where clauses].
|
/// [where clauses].
|
||||||
|
@ -2944,7 +2933,6 @@ declare_lint_pass! {
|
||||||
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
|
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
|
||||||
UNSTABLE_NAME_COLLISIONS,
|
UNSTABLE_NAME_COLLISIONS,
|
||||||
IRREFUTABLE_LET_PATTERNS,
|
IRREFUTABLE_LET_PATTERNS,
|
||||||
MISSING_CRATE_LEVEL_DOCS,
|
|
||||||
WHERE_CLAUSES_OBJECT_SAFETY,
|
WHERE_CLAUSES_OBJECT_SAFETY,
|
||||||
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
|
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
|
||||||
MACRO_USE_EXTERN_CRATE,
|
MACRO_USE_EXTERN_CRATE,
|
||||||
|
|
|
@ -4,12 +4,13 @@
|
||||||
can use them like any other lints by doing this:
|
can use them like any other lints by doing this:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![allow(missing_docs)] // allows the lint, no diagnostics will be reported
|
#![allow(rustdoc::broken_intra_doc_links)] // allows the lint, no diagnostics will be reported
|
||||||
#![warn(missing_docs)] // warn if there are missing docs
|
#![warn(rustdoc::broken_intra_doc_links)] // warn if there are broken intra-doc links
|
||||||
#![deny(missing_docs)] // error if there are missing docs
|
#![deny(rustdoc::broken_intra_doc_links)] // error if there are broken intra-doc links
|
||||||
# //! Crate docs.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that, except for `missing_docs`, these lints are only available when running `rustdoc`, not `rustc`.
|
||||||
|
|
||||||
Here is the list of the lints provided by `rustdoc`:
|
Here is the list of the lints provided by `rustdoc`:
|
||||||
|
|
||||||
## broken_intra_doc_links
|
## broken_intra_doc_links
|
||||||
|
@ -51,7 +52,7 @@ warning: `Foo` is both an enum and a function
|
||||||
1 | /// [`Foo`]
|
1 | /// [`Foo`]
|
||||||
| ^^^^^ ambiguous link
|
| ^^^^^ ambiguous link
|
||||||
|
|
|
|
||||||
= note: `#[warn(broken_intra_doc_links)]` on by default
|
= note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
|
||||||
help: to link to the enum, prefix with the item type
|
help: to link to the enum, prefix with the item type
|
||||||
|
|
|
|
||||||
1 | /// [`enum@Foo`]
|
1 | /// [`enum@Foo`]
|
||||||
|
@ -83,7 +84,7 @@ warning: public documentation for `public` links to private item `private`
|
||||||
1 | /// [private]
|
1 | /// [private]
|
||||||
| ^^^^^^^ this item is private
|
| ^^^^^^^ this item is private
|
||||||
|
|
|
|
||||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||||
= note: this link will resolve properly if you pass `--document-private-items`
|
= note: this link will resolve properly if you pass `--document-private-items`
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -97,7 +98,7 @@ warning: public documentation for `public` links to private item `private`
|
||||||
1 | /// [private]
|
1 | /// [private]
|
||||||
| ^^^^^^^ this item is private
|
| ^^^^^^^ this item is private
|
||||||
|
|
|
|
||||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
= 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
|
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -125,13 +126,15 @@ warning: missing documentation for a function
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that unlike other rustdoc lints, this lint is also available from `rustc` directly.
|
||||||
|
|
||||||
## missing_crate_level_docs
|
## missing_crate_level_docs
|
||||||
|
|
||||||
This lint is **allowed by default**. It detects if there is no documentation
|
This lint is **allowed by default**. It detects if there is no documentation
|
||||||
at the crate root. For example:
|
at the crate root. For example:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![warn(missing_crate_level_docs)]
|
#![warn(rustdoc::missing_crate_level_docs)]
|
||||||
```
|
```
|
||||||
|
|
||||||
This will generate the following warning:
|
This will generate the following warning:
|
||||||
|
@ -155,7 +158,7 @@ This lint is **allowed by default** and is **nightly-only**. It detects when a d
|
||||||
is missing a code example. For example:
|
is missing a code example. For example:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![warn(missing_doc_code_examples)]
|
#![warn(rustdoc::missing_doc_code_examples)]
|
||||||
|
|
||||||
/// There is no code example!
|
/// There is no code example!
|
||||||
pub fn no_code_example() {}
|
pub fn no_code_example() {}
|
||||||
|
@ -191,7 +194,7 @@ This lint is **allowed by default**. It detects documentation tests when they
|
||||||
are on a private item. For example:
|
are on a private item. For example:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![warn(private_doc_tests)]
|
#![warn(rustdoc::private_doc_tests)]
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
/// private doc test
|
/// private doc test
|
||||||
|
@ -245,7 +248,7 @@ warning: unknown attribute `should-panic`. Did you mean `should_panic`?
|
||||||
5 | | /// ```
|
5 | | /// ```
|
||||||
| |_______^
|
| |_______^
|
||||||
|
|
|
|
||||||
= note: `#[warn(invalid_codeblock_attributes)]` on by default
|
= note: `#[warn(rustdoc::invalid_codeblock_attributes)]` on by default
|
||||||
= help: the code block will either not be tested if not marked as a rust one or won't fail if it doesn't panic when running
|
= help: the code block will either not be tested if not marked as a rust one or won't fail if it doesn't panic when running
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -258,7 +261,7 @@ This lint is **allowed by default** and is **nightly-only**. It detects unclosed
|
||||||
or invalid HTML tags. For example:
|
or invalid HTML tags. For example:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![warn(invalid_html_tags)]
|
#![warn(rustdoc::invalid_html_tags)]
|
||||||
|
|
||||||
/// <h1>
|
/// <h1>
|
||||||
/// </script>
|
/// </script>
|
||||||
|
@ -275,7 +278,11 @@ warning: unopened HTML tag `script`
|
||||||
2 | | /// </script>
|
2 | | /// </script>
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= note: `#[warn(invalid_html_tags)]` on by default
|
note: the lint level is defined here
|
||||||
|
--> foo.rs:1:9
|
||||||
|
|
|
||||||
|
1 | #![warn(rustdoc::invalid_html_tags)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: unclosed HTML tag `h1`
|
warning: unclosed HTML tag `h1`
|
||||||
--> foo.rs:1:1
|
--> foo.rs:1:1
|
||||||
|
@ -310,7 +317,7 @@ warning: this URL is not a hyperlink
|
||||||
1 | /// http://example.org
|
1 | /// http://example.org
|
||||||
| ^^^^^^^^^^^^^^^^^^ help: use an automatic link instead: `<http://example.org>`
|
| ^^^^^^^^^^^^^^^^^^ help: use an automatic link instead: `<http://example.org>`
|
||||||
|
|
|
|
||||||
= note: `#[warn(non_autolinks)]` on by default
|
= note: `#[warn(rustdoc::non_autolinks)]` on by default
|
||||||
|
|
||||||
warning: unneeded long form for URL
|
warning: unneeded long form for URL
|
||||||
--> foo.rs:2:5
|
--> foo.rs:2:5
|
||||||
|
|
|
@ -260,9 +260,8 @@ crate fn create_config(
|
||||||
// By default, rustdoc ignores all lints.
|
// By default, rustdoc ignores all lints.
|
||||||
// Specifically unblock lints relevant to documentation or the lint machinery itself.
|
// Specifically unblock lints relevant to documentation or the lint machinery itself.
|
||||||
let mut lints_to_show = vec![
|
let mut lints_to_show = vec![
|
||||||
// it's unclear whether these should be part of rustdoc directly
|
// it's unclear whether this should be part of rustdoc directly (#77364)
|
||||||
rustc_lint::builtin::MISSING_DOCS.name.to_string(),
|
rustc_lint::builtin::MISSING_DOCS.name.to_string(),
|
||||||
rustc_lint::builtin::MISSING_CRATE_LEVEL_DOCS.name.to_string(),
|
|
||||||
// these are definitely not part of rustdoc, but we want to warn on them anyway.
|
// these are definitely not part of rustdoc, but we want to warn on them anyway.
|
||||||
rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_string(),
|
rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_string(),
|
||||||
rustc_lint::builtin::UNKNOWN_LINTS.name.to_string(),
|
rustc_lint::builtin::UNKNOWN_LINTS.name.to_string(),
|
||||||
|
@ -482,7 +481,7 @@ crate fn run_global_ctxt(
|
||||||
let help = "The following guide may be of use:\n\
|
let help = "The following guide may be of use:\n\
|
||||||
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html";
|
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html";
|
||||||
tcx.struct_lint_node(
|
tcx.struct_lint_node(
|
||||||
rustc_lint::builtin::MISSING_CRATE_LEVEL_DOCS,
|
crate::lint::MISSING_CRATE_LEVEL_DOCS,
|
||||||
ctxt.as_local_hir_id(m.def_id).unwrap(),
|
ctxt.as_local_hir_id(m.def_id).unwrap(),
|
||||||
|lint| {
|
|lint| {
|
||||||
let mut diag =
|
let mut diag =
|
||||||
|
|
|
@ -104,6 +104,17 @@ declare_rustdoc_lint! {
|
||||||
"codeblock attribute looks a lot like a known one"
|
"codeblock attribute looks a lot like a known one"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare_rustdoc_lint! {
|
||||||
|
/// The `missing_crate_level_docs` lint detects if documentation is
|
||||||
|
/// missing at the crate root. This is a `rustdoc` only lint, see the
|
||||||
|
/// documentation in the [rustdoc book].
|
||||||
|
///
|
||||||
|
/// [rustdoc book]: ../../../rustdoc/lints.html#missing_crate_level_docs
|
||||||
|
MISSING_CRATE_LEVEL_DOCS,
|
||||||
|
Allow,
|
||||||
|
"detects crates with no crate-level documentation"
|
||||||
|
}
|
||||||
|
|
||||||
declare_rustdoc_lint! {
|
declare_rustdoc_lint! {
|
||||||
/// The `missing_doc_code_examples` lint detects publicly-exported items
|
/// The `missing_doc_code_examples` lint detects publicly-exported items
|
||||||
/// without code samples in their documentation. This is a `rustdoc` only
|
/// without code samples in their documentation. This is a `rustdoc` only
|
||||||
|
@ -156,6 +167,7 @@ crate static RUSTDOC_LINTS: Lazy<Vec<&'static Lint>> = Lazy::new(|| {
|
||||||
INVALID_CODEBLOCK_ATTRIBUTES,
|
INVALID_CODEBLOCK_ATTRIBUTES,
|
||||||
INVALID_HTML_TAGS,
|
INVALID_HTML_TAGS,
|
||||||
NON_AUTOLINKS,
|
NON_AUTOLINKS,
|
||||||
|
MISSING_CRATE_LEVEL_DOCS,
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,17 @@ warning: missing documentation for a function
|
||||||
LL | pub fn foo() {}
|
LL | pub fn foo() {}
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: no documentation found for this crate's top-level module
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/check.rs:7:9
|
||||||
|
|
|
||||||
|
LL | #![warn(rustdoc)]
|
||||||
|
| ^^^^^^^
|
||||||
|
= note: `#[warn(rustdoc::missing_crate_level_docs)]` implied by `#[warn(rustdoc)]`
|
||||||
|
= help: The following guide may be of use:
|
||||||
|
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html
|
||||||
|
|
||||||
warning: missing code example in this documentation
|
warning: missing code example in this documentation
|
||||||
--> $DIR/check.rs:4:1
|
--> $DIR/check.rs:4:1
|
||||||
|
|
|
|
||||||
|
@ -45,5 +56,5 @@ warning: missing code example in this documentation
|
||||||
LL | pub fn foo() {}
|
LL | pub fn foo() {}
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: 4 warnings emitted
|
warning: 5 warnings emitted
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
#![deny(missing_crate_level_docs)]
|
// error-pattern: no documentation found
|
||||||
|
#![deny(rustdoc::missing_crate_level_docs)]
|
||||||
|
//^~ NOTE defined here
|
||||||
|
|
||||||
pub fn foo() {}
|
pub fn foo() {}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
error: no documentation found for this crate's top-level module
|
error: no documentation found for this crate's top-level module
|
||||||
|
|
|
|
||||||
note: the lint level is defined here
|
note: the lint level is defined here
|
||||||
--> $DIR/no-crate-level-doc-lint.rs:1:9
|
--> $DIR/no-crate-level-doc-lint.rs:2:9
|
||||||
|
|
|
|
||||||
LL | #![deny(missing_crate_level_docs)]
|
LL | #![deny(rustdoc::missing_crate_level_docs)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
= help: The following guide may be of use:
|
= help: The following guide may be of use:
|
||||||
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html
|
https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue