forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#126422 - Urgau:doctest-impl-non-local-def, r=fmease Suggest using a standalone doctest for non-local impl defs This PR tweaks the lint output of the `non_local_definitions` lint to suggest using a standalone doctest instead of a moving the `impl` def to an impossible place as was already done with `macro_rules!` case in rust-lang#124568. Fixes rust-lang#126339 r? ```@fmease```
- Loading branch information
Showing
6 changed files
with
125 additions
and
46 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pub trait Trait {} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
//@ check-fail | ||
//@ edition:2018 | ||
//@ failure-status: 101 | ||
//@ aux-build:pub_trait.rs | ||
//@ compile-flags: --test --test-args --test-threads=1 | ||
//@ normalize-stdout-test: "tests/rustdoc-ui/doctest" -> "$$DIR" | ||
//@ normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME" | ||
|
||
#![doc(test(attr(deny(non_local_definitions))))] | ||
#![doc(test(attr(allow(dead_code))))] | ||
|
||
/// This will produce a warning: | ||
/// ```rust,no_run | ||
/// # extern crate pub_trait; | ||
/// # use pub_trait::Trait; | ||
/// | ||
/// struct Local; | ||
/// impl Trait for &Local {} | ||
/// ``` | ||
/// | ||
/// But this shoudln't produce a warning: | ||
/// ```rust,no_run | ||
/// # extern crate pub_trait; | ||
/// # use pub_trait::Trait; | ||
/// | ||
/// struct Local; | ||
/// impl Trait for &Local {} | ||
/// | ||
/// # fn main() {} | ||
/// ``` | ||
pub fn doctest() {} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
|
||
running 2 tests | ||
test $DIR/non-local-defs-impl.rs - doctest (line 13) - compile ... FAILED | ||
test $DIR/non-local-defs-impl.rs - doctest (line 22) - compile ... ok | ||
|
||
failures: | ||
|
||
---- $DIR/non-local-defs-impl.rs - doctest (line 13) stdout ---- | ||
error: non-local `impl` definition, `impl` blocks should be written at the same level as their item | ||
--> $DIR/non-local-defs-impl.rs:18:1 | ||
| | ||
LL | impl Trait for &Local {} | ||
| ^^^^^-----^^^^^------ | ||
| | | | ||
| | `&'_ Local` is not local | ||
| | help: remove `&` to make the `impl` local | ||
| `Trait` is not local | ||
| | ||
= note: `impl` may be usable in bounds, etc. from outside the expression, which might e.g. make something constructible that previously wasn't, because it's still on a publicly-visible type | ||
= note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` | ||
= help: make this doc-test a standalone test with its own `fn main() { ... }` | ||
= note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363> | ||
note: the lint level is defined here | ||
--> $DIR/non-local-defs-impl.rs:11:9 | ||
| | ||
LL | #![deny(non_local_definitions)] | ||
| ^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
Couldn't compile the test. | ||
|
||
failures: | ||
$DIR/non-local-defs-impl.rs - doctest (line 13) | ||
|
||
test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME | ||
|