Uh oh!
There was an error while loading. Please reload this page.
Declare a new lint to properly deny warnings in rustdoc - #79816
Declare a new lint to properly deny warnings in rustdoc#79816poliorcetics wants to merge 1 commit into
Conversation
rust-highfive
commented
Dec 7, 2020
(rust-highfive has picked a reviewer for you, use r? to override) |
jyn514
commented
Dec 12, 2020
r? @jyn514 |
jyn514
left a comment
There was a problem hiding this comment.
This looks about like what I imagined, thanks :)
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
It is not always local (e.g. if this is a re-export), I think we found why it wasn't a lint before. Fortunately, we don't need to check the syntax of other crates, so you can just return without doing anything if it's non-local.
See #77230 for more discussion; it would also be good to add a test, since if the behavior changes it should be intentional.
There was a problem hiding this comment.
Could you add a test for the behavior?
poliorcetics
commented
Dec 14, 2020
@rustbot label +S-waiting-on-review -S-waiting-on-author |
jyn514
left a comment
There was a problem hiding this comment.
Thanks, LGTM. Can you squash the commits before merging?
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
jyn514
commented
Dec 14, 2020
Also you need to update |
7158e11 to
d271e41CompareAdded the changes you proposed and squashed the whole thing Edit: I forgot to ran |
d271e41 to
0e0ae47Comparejyn514
commented
Dec 16, 2020
@bors r+ Looks great, thanks! |
bors
commented
Dec 16, 2020
📌 Commit 0e0ae47 has been approved by |
…r=jyn514 Declare a new lint to properly deny warnings in rustdoc This declares a new lint: `INVALID_RUST_CODEBLOCK` that is used by `rustdoc` to properly follow `-D warnings` instead of unconditionally emitting a warning. ## Todo List - [x] Declare lint. - [x] Document lint (file: `src/doc/rustdoc/src/lints.md`). - [x] Use lint in `rustdoc` (file: `src/librustdoc/passes/check_code_block_syntax.rs`, maybe others). - [x] Write tests. - [x] Note: one for the behaviour of the new lint when the error is in a dependency, not the crate being tested (rust-lang#79816 (comment)) - [x] Refactor things. ## Questions - How/where are lints tested ? - Where are lints for `rustdoc` tested ? Fixrust-lang#79792. `@rustbot` label T-rustdoc A-lint
…r=jyn514 Declare a new lint to properly deny warnings in rustdoc This declares a new lint: `INVALID_RUST_CODEBLOCK` that is used by `rustdoc` to properly follow `-D warnings` instead of unconditionally emitting a warning. ## Todo List - [x] Declare lint. - [x] Document lint (file: `src/doc/rustdoc/src/lints.md`). - [x] Use lint in `rustdoc` (file: `src/librustdoc/passes/check_code_block_syntax.rs`, maybe others). - [x] Write tests. - [x] Note: one for the behaviour of the new lint when the error is in a dependency, not the crate being tested (rust-lang#79816 (comment)) - [x] Refactor things. ## Questions - How/where are lints tested ? - Where are lints for `rustdoc` tested ? Fixrust-lang#79792. ``@rustbot`` label T-rustdoc A-lint
e5a1d97 to
03f64fcCompare
This comment has been minimized.
This comment has been minimized.
03f64fc to
2c33488CompareThese were the warnings previously:
```
warning: could not parse code block as Rust code
--> crates/stdx/src/lib.rs:137:9
|
137 | /// ∀ x in slice[..idx]: pred(x)
| _________^
138 | | /// && ∀ x in slice[idx..]: !pred(x)
| |____^
|
= note: error from rustc: unknown start of token: \u{2200}
warning: 1 warning emitted
warning: unresolved link to `package`
--> crates/base_db/src/input.rs:181:15
|
181 | /// it's [package].name, can be different for other project types or even
| ^^^^^^^ no item named `package` in scope
|
= note: `#[warn(broken_intra_doc_links)]` on by default
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
warning: unresolved link to `package`
--> crates/base_db/src/input.rs:181:15
|
181 | /// it's [package].name, can be different for other project types or even
| ^^^^^^^ no item named `package` in scope
|
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
warning: 2 warnings emitted
warning: unresolved link to `package`
--> crates/base_db/src/input.rs:181:15
|
181 | /// it's [package].name, can be different for other project types or even
| ^^^^^^^ no item named `package` in scope
|
= note: `#[warn(broken_intra_doc_links)]` on by default
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
warning: unresolved link to `package`
--> crates/base_db/src/input.rs:181:15
|
181 | /// it's [package].name, can be different for other project types or even
| ^^^^^^^ no item named `package` in scope
|
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
warning: 2 warnings emitted
```
This does *not* fix the following warning, because it is actually rust
code and rustdoc is being over eager:
```
warning: Rust code block is empty
--> crates/parser/src/grammar.rs:16:5
|
16 | //! ```
| _____^
17 | | //! // test function_with_zero_parameters
18 | | //! // fn foo() {}
19 | | //! ```
| |_______^
|
help: mark blocks that do not contain Rust code as text
|
16 | //! ```text
| ^^^^^^^
```
rust-lang/rust#79816 should make this
configurable so the warning can be `allow`ed.Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). ## Current status This is waiting on FCP: rust-lang#80527 (comment)
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
Make rustdoc lints a tool lint instead of built-in - Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` (and similar for other rustdoc lints; I don't expect any others to be used frequently, though). - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests - Move lint machinery into a separate file - Add `declare_rustdoc_lint!` macro Unblocks rust-lang#80300, rust-lang#79816, rust-lang#80965. Makes the strangeness in rust-lang#77364 more apparent to the end user (note that `missing_docs` is *not* moved to rustdoc in this PR). Closesrust-lang#78786. ## Current status This is blocked on rust-lang#82620 (see rust-lang#80527 (comment))
This comment has been minimized.
This comment has been minimized.
jyn514
commented
Mar 4, 2021
2c33488 to
c067faeCompare@rustbot label: +S-waiting-on-review -S-waiting-on-author |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This comment has been minimized.
This comment has been minimized.
This adds a new lint to `rustc` that is used in rustdoc when a code block is empty or cannot be parsed as valid Rust code. Previously this was unconditionally a warning. As such some documentation comments were (unknowingly) abusing this to pass despite the `-Dwarnings` used when compiling `rustc`, this should not be the case anymore.
jyn514
commented
Mar 19, 2021
This is still not correct. Any new lints should be added to |
| LL | | /// ``` | ||
| | |_______^ | ||
| | | ||
| = note: `#[warn(invalid_rust_codeblock)]` on by default |
There was a problem hiding this comment.
Could you add some tests for when ignore is present (and for all the rest of the branching you have for the diagnostics)?
JohnCSimon
commented
Apr 4, 2021
@poliorcetics - Ping from triage: can you please resolve the merge conflict and set it to |
jyn514
commented
Apr 23, 2021
Hi @poliorcetics, any updates on this? It's really close to being done :/ |
jyn514
commented
Apr 26, 2021
I'm going to close this - feel free to re-open if you have time to work on this again. |
This declares a new lint:
INVALID_RUST_CODEBLOCKthat is used byrustdocto properly follow-D warningsinstead of unconditionally emitting a warning.Todo List
Declare lint.
Document lint (file:
src/doc/rustdoc/src/lints.md).Use lint in
rustdoc(file:src/librustdoc/passes/check_code_block_syntax.rs, maybe others).Write tests.
Refactor things.
Wait on Make rustdoc lints a tool lint instead of built-in #80527.
Fix#79792.
@rustbot label T-rustdoc A-lint