forked from gentoo-utils/gentoo-utils
Merge commit '6eba9cd92c295c5389944f6adda1f1e83b2cb008' as 'subprojects/thiserror'
This commit is contained in:
7
subprojects/thiserror/tests/ui/bad-field-attr.rs
Normal file
7
subprojects/thiserror/tests/ui/bad-field-attr.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
pub struct Error(#[error(transparent)] std::io::Error);
|
||||
|
||||
fn main() {}
|
||||
5
subprojects/thiserror/tests/ui/bad-field-attr.stderr
Normal file
5
subprojects/thiserror/tests/ui/bad-field-attr.stderr
Normal file
@@ -0,0 +1,5 @@
|
||||
error: #[error(transparent)] needs to go outside the enum or struct, not on an individual field
|
||||
--> tests/ui/bad-field-attr.rs:5:18
|
||||
|
|
||||
5 | pub struct Error(#[error(transparent)] std::io::Error);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
15
subprojects/thiserror/tests/ui/concat-display.rs
Normal file
15
subprojects/thiserror/tests/ui/concat-display.rs
Normal file
@@ -0,0 +1,15 @@
|
||||
use thiserror::Error;
|
||||
|
||||
macro_rules! error_type {
|
||||
($name:ident, $what:expr) => {
|
||||
// Use #[error("invalid {}", $what)] instead.
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(concat!("invalid ", $what))]
|
||||
pub struct $name;
|
||||
};
|
||||
}
|
||||
|
||||
error_type!(Error, "foo");
|
||||
|
||||
fn main() {}
|
||||
10
subprojects/thiserror/tests/ui/concat-display.stderr
Normal file
10
subprojects/thiserror/tests/ui/concat-display.stderr
Normal file
@@ -0,0 +1,10 @@
|
||||
error: expected one of: string literal, `transparent`, `fmt`
|
||||
--> tests/ui/concat-display.rs:8:17
|
||||
|
|
||||
8 | #[error(concat!("invalid ", $what))]
|
||||
| ^^^^^^
|
||||
...
|
||||
13 | error_type!(Error, "foo");
|
||||
| ------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `error_type` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
7
subprojects/thiserror/tests/ui/display-underscore.rs
Normal file
7
subprojects/thiserror/tests/ui/display-underscore.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("{_}")]
|
||||
pub struct Error;
|
||||
|
||||
fn main() {}
|
||||
7
subprojects/thiserror/tests/ui/display-underscore.stderr
Normal file
7
subprojects/thiserror/tests/ui/display-underscore.stderr
Normal file
@@ -0,0 +1,7 @@
|
||||
error: invalid format string: invalid argument name `_`
|
||||
--> tests/ui/display-underscore.rs:4:11
|
||||
|
|
||||
4 | #[error("{_}")]
|
||||
| ^ invalid argument name in format string
|
||||
|
|
||||
= note: argument name cannot be a single underscore
|
||||
13
subprojects/thiserror/tests/ui/duplicate-enum-source.rs
Normal file
13
subprojects/thiserror/tests/ui/duplicate-enum-source.rs
Normal file
@@ -0,0 +1,13 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum ErrorEnum {
|
||||
Confusing {
|
||||
#[source]
|
||||
a: std::io::Error,
|
||||
#[source]
|
||||
b: anyhow::Error,
|
||||
},
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: duplicate #[source] attribute
|
||||
--> tests/ui/duplicate-enum-source.rs:8:9
|
||||
|
|
||||
8 | #[source]
|
||||
| ^^^^^^^^^
|
||||
23
subprojects/thiserror/tests/ui/duplicate-fmt.rs
Normal file
23
subprojects/thiserror/tests/ui/duplicate-fmt.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
#[error("...")]
|
||||
pub struct Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(fmt = core::fmt::Octal::fmt)]
|
||||
#[error(fmt = core::fmt::LowerHex::fmt)]
|
||||
pub enum FmtFmt {}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(fmt = core::fmt::Octal::fmt)]
|
||||
#[error(transparent)]
|
||||
pub enum FmtTransparent {}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(fmt = core::fmt::Octal::fmt)]
|
||||
#[error("...")]
|
||||
pub enum FmtDisplay {}
|
||||
|
||||
fn main() {}
|
||||
23
subprojects/thiserror/tests/ui/duplicate-fmt.stderr
Normal file
23
subprojects/thiserror/tests/ui/duplicate-fmt.stderr
Normal file
@@ -0,0 +1,23 @@
|
||||
error: only one #[error(...)] attribute is allowed
|
||||
--> tests/ui/duplicate-fmt.rs:5:1
|
||||
|
|
||||
5 | #[error("...")]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: duplicate #[error(fmt = ...)] attribute
|
||||
--> tests/ui/duplicate-fmt.rs:10:1
|
||||
|
|
||||
10 | #[error(fmt = core::fmt::LowerHex::fmt)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot have both #[error(transparent)] and #[error(fmt = ...)]
|
||||
--> tests/ui/duplicate-fmt.rs:14:1
|
||||
|
|
||||
14 | #[error(fmt = core::fmt::Octal::fmt)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot have both #[error(fmt = ...)] and a format arguments attribute
|
||||
--> tests/ui/duplicate-fmt.rs:20:1
|
||||
|
|
||||
20 | #[error("...")]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
11
subprojects/thiserror/tests/ui/duplicate-struct-source.rs
Normal file
11
subprojects/thiserror/tests/ui/duplicate-struct-source.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub struct ErrorStruct {
|
||||
#[source]
|
||||
a: std::io::Error,
|
||||
#[source]
|
||||
b: anyhow::Error,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: duplicate #[source] attribute
|
||||
--> tests/ui/duplicate-struct-source.rs:7:5
|
||||
|
|
||||
7 | #[source]
|
||||
| ^^^^^^^^^
|
||||
8
subprojects/thiserror/tests/ui/duplicate-transparent.rs
Normal file
8
subprojects/thiserror/tests/ui/duplicate-transparent.rs
Normal file
@@ -0,0 +1,8 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
#[error(transparent)]
|
||||
pub struct Error(anyhow::Error);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: duplicate #[error(transparent)] attribute
|
||||
--> tests/ui/duplicate-transparent.rs:5:1
|
||||
|
|
||||
5 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
7
subprojects/thiserror/tests/ui/expression-fallback.rs
Normal file
7
subprojects/thiserror/tests/ui/expression-fallback.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("".yellow)]
|
||||
pub struct ArgError;
|
||||
|
||||
fn main() {}
|
||||
24
subprojects/thiserror/tests/ui/expression-fallback.stderr
Normal file
24
subprojects/thiserror/tests/ui/expression-fallback.stderr
Normal file
@@ -0,0 +1,24 @@
|
||||
error: expected `,`, found `.`
|
||||
--> tests/ui/expression-fallback.rs:4:11
|
||||
|
|
||||
4 | #[error("".yellow)]
|
||||
| ^ expected `,`
|
||||
|
||||
error: argument never used
|
||||
--> tests/ui/expression-fallback.rs:4:12
|
||||
|
|
||||
4 | #[error("".yellow)]
|
||||
| -- ^^^^^^ argument never used
|
||||
| |
|
||||
| formatting specifier missing
|
||||
|
|
||||
help: format specifiers use curly braces, consider adding a format specifier
|
||||
|
|
||||
4 | #[error("{}".yellow)]
|
||||
| ++
|
||||
|
||||
error[E0425]: cannot find value `yellow` in this scope
|
||||
--> tests/ui/expression-fallback.rs:4:12
|
||||
|
|
||||
4 | #[error("".yellow)]
|
||||
| ^^^^^^ not found in this scope
|
||||
14
subprojects/thiserror/tests/ui/fallback-impl-with-display.rs
Normal file
14
subprojects/thiserror/tests/ui/fallback-impl-with-display.rs
Normal file
@@ -0,0 +1,14 @@
|
||||
use core::fmt::{self, Display};
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error]
|
||||
pub struct MyError;
|
||||
|
||||
impl Display for MyError {
|
||||
fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,16 @@
|
||||
error: expected attribute arguments in parentheses: #[error(...)]
|
||||
--> tests/ui/fallback-impl-with-display.rs:5:3
|
||||
|
|
||||
5 | #[error]
|
||||
| ^^^^^
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::fmt::Display` for type `MyError`
|
||||
--> tests/ui/fallback-impl-with-display.rs:4:10
|
||||
|
|
||||
4 | #[derive(Error, Debug)]
|
||||
| ^^^^^ conflicting implementation for `MyError`
|
||||
...
|
||||
8 | impl Display for MyError {
|
||||
| ------------------------ first implementation here
|
||||
|
|
||||
= note: this error originates in the derive macro `Error` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
15
subprojects/thiserror/tests/ui/from-backtrace-backtrace.rs
Normal file
15
subprojects/thiserror/tests/ui/from-backtrace-backtrace.rs
Normal file
@@ -0,0 +1,15 @@
|
||||
// https://github.com/dtolnay/thiserror/issues/163
|
||||
|
||||
use std::backtrace::Backtrace;
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
pub struct Error(
|
||||
#[from]
|
||||
#[backtrace]
|
||||
std::io::Error,
|
||||
Backtrace,
|
||||
);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: deriving From requires no fields other than source and backtrace
|
||||
--> tests/ui/from-backtrace-backtrace.rs:9:5
|
||||
|
|
||||
9 | #[from]
|
||||
| ^^^^^^^
|
||||
11
subprojects/thiserror/tests/ui/from-not-source.rs
Normal file
11
subprojects/thiserror/tests/ui/from-not-source.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub struct Error {
|
||||
#[source]
|
||||
source: std::io::Error,
|
||||
#[from]
|
||||
other: anyhow::Error,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
5
subprojects/thiserror/tests/ui/from-not-source.stderr
Normal file
5
subprojects/thiserror/tests/ui/from-not-source.stderr
Normal file
@@ -0,0 +1,5 @@
|
||||
error: #[from] is only supported on the source field, not any other field
|
||||
--> tests/ui/from-not-source.rs:7:5
|
||||
|
|
||||
7 | #[from]
|
||||
| ^^^^^^^
|
||||
11
subprojects/thiserror/tests/ui/invalid-input-impl-anyway.rs
Normal file
11
subprojects/thiserror/tests/ui/invalid-input-impl-anyway.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error]
|
||||
pub struct MyError;
|
||||
|
||||
fn main() {
|
||||
// No error on the following line. Thiserror emits an Error impl despite the
|
||||
// bad attribute.
|
||||
_ = &MyError as &dyn std::error::Error;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: expected attribute arguments in parentheses: #[error(...)]
|
||||
--> tests/ui/invalid-input-impl-anyway.rs:4:3
|
||||
|
|
||||
4 | #[error]
|
||||
| ^^^^^
|
||||
24
subprojects/thiserror/tests/ui/lifetime.rs
Normal file
24
subprojects/thiserror/tests/ui/lifetime.rs
Normal file
@@ -0,0 +1,24 @@
|
||||
use core::fmt::Debug;
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("error")]
|
||||
struct Error<'a>(#[from] Inner<'a>);
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("{0}")]
|
||||
struct Inner<'a>(&'a str);
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
enum Enum<'a> {
|
||||
#[error("error")]
|
||||
Foo(#[from] Generic<&'a str>),
|
||||
}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("{0:?}")]
|
||||
struct Generic<T: Debug>(T);
|
||||
|
||||
fn main() -> Result<(), Error<'static>> {
|
||||
Err(Error(Inner("some text")))
|
||||
}
|
||||
11
subprojects/thiserror/tests/ui/lifetime.stderr
Normal file
11
subprojects/thiserror/tests/ui/lifetime.stderr
Normal file
@@ -0,0 +1,11 @@
|
||||
error: non-static lifetimes are not allowed in the source of an error, because std::error::Error requires the source is dyn Error + 'static
|
||||
--> tests/ui/lifetime.rs:6:26
|
||||
|
|
||||
6 | struct Error<'a>(#[from] Inner<'a>);
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: non-static lifetimes are not allowed in the source of an error, because std::error::Error requires the source is dyn Error + 'static
|
||||
--> tests/ui/lifetime.rs:15:17
|
||||
|
|
||||
15 | Foo(#[from] Generic<&'a str>),
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
9
subprojects/thiserror/tests/ui/missing-display.rs
Normal file
9
subprojects/thiserror/tests/ui/missing-display.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum MyError {
|
||||
First,
|
||||
Second,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
19
subprojects/thiserror/tests/ui/missing-display.stderr
Normal file
19
subprojects/thiserror/tests/ui/missing-display.stderr
Normal file
@@ -0,0 +1,19 @@
|
||||
error[E0277]: `MyError` doesn't implement `std::fmt::Display`
|
||||
--> tests/ui/missing-display.rs:4:10
|
||||
|
|
||||
3 | #[derive(Error, Debug)]
|
||||
| ----- in this derive macro expansion
|
||||
4 | pub enum MyError {
|
||||
| ^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `std::fmt::Display` is not implemented for `MyError`
|
||||
--> tests/ui/missing-display.rs:4:1
|
||||
|
|
||||
4 | pub enum MyError {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
note: required by a bound in `std::error::Error`
|
||||
--> $RUST/core/src/error.rs
|
||||
|
|
||||
| pub trait Error: Debug + Display {
|
||||
| ^^^^^^^ required by this bound in `Error`
|
||||
= note: this error originates in the derive macro `Error` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
10
subprojects/thiserror/tests/ui/missing-fmt.rs
Normal file
10
subprojects/thiserror/tests/ui/missing-fmt.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error("...")]
|
||||
A(usize),
|
||||
B(usize),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
5
subprojects/thiserror/tests/ui/missing-fmt.stderr
Normal file
5
subprojects/thiserror/tests/ui/missing-fmt.stderr
Normal file
@@ -0,0 +1,5 @@
|
||||
error: missing #[error("...")] display attribute
|
||||
--> tests/ui/missing-fmt.rs:7:5
|
||||
|
|
||||
7 | B(usize),
|
||||
| ^^^^^^^^
|
||||
18
subprojects/thiserror/tests/ui/no-display.rs
Normal file
18
subprojects/thiserror/tests/ui/no-display.rs
Normal file
@@ -0,0 +1,18 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct NoDisplay;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("thread: {thread}")]
|
||||
pub struct Error {
|
||||
thread: NoDisplay,
|
||||
}
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("thread: {thread:o}")]
|
||||
pub struct ErrorOctal {
|
||||
thread: NoDisplay,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
46
subprojects/thiserror/tests/ui/no-display.stderr
Normal file
46
subprojects/thiserror/tests/ui/no-display.stderr
Normal file
@@ -0,0 +1,46 @@
|
||||
error[E0599]: the method `as_display` exists for reference `&NoDisplay`, but its trait bounds were not satisfied
|
||||
--> tests/ui/no-display.rs:7:9
|
||||
|
|
||||
4 | struct NoDisplay;
|
||||
| ---------------- doesn't satisfy `NoDisplay: std::fmt::Display`
|
||||
...
|
||||
7 | #[error("thread: {thread}")]
|
||||
| ^^^^^^^^^^^^^^^^^^ method cannot be called on `&NoDisplay` due to unsatisfied trait bounds
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`NoDisplay: std::fmt::Display`
|
||||
which is required by `&NoDisplay: AsDisplay<'_>`
|
||||
note: the trait `std::fmt::Display` must be implemented
|
||||
--> $RUST/core/src/fmt/mod.rs
|
||||
|
|
||||
| pub trait Display: PointeeSized {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `as_display`, perhaps you need to implement it:
|
||||
candidate #1: `AsDisplay`
|
||||
|
||||
error[E0277]: the trait bound `NoDisplay: Octal` is not satisfied
|
||||
--> tests/ui/no-display.rs:13:9
|
||||
|
|
||||
12 | #[derive(Error, Debug)]
|
||||
| ----- in this derive macro expansion
|
||||
13 | #[error("thread: {thread:o}")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `Octal` is not implemented for `NoDisplay`
|
||||
--> tests/ui/no-display.rs:4:1
|
||||
|
|
||||
4 | struct NoDisplay;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
= help: the following other types implement trait `Octal`:
|
||||
&T
|
||||
&mut T
|
||||
NonZero<T>
|
||||
Saturating<T>
|
||||
Wrapping<T>
|
||||
i128
|
||||
i16
|
||||
i32
|
||||
and $N others
|
||||
= note: required for `&NoDisplay` to implement `Octal`
|
||||
= note: this error originates in the macro `$crate::format_args` which comes from the expansion of the derive macro `Error` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("invalid rdo_lookahead_frames {0} (expected < {})", i32::MAX)]
|
||||
pub struct Error(u32);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: ambiguous reference to positional arguments by number in a tuple struct; change this to a named argument
|
||||
--> tests/ui/numbered-positional-tuple.rs:4:61
|
||||
|
|
||||
4 | #[error("invalid rdo_lookahead_frames {0} (expected < {})", i32::MAX)]
|
||||
| ^^^^^^^^
|
||||
12
subprojects/thiserror/tests/ui/raw-identifier.rs
Normal file
12
subprojects/thiserror/tests/ui/raw-identifier.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("error: {r#fn}")]
|
||||
pub struct Error {
|
||||
r#fn: &'static str,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let r#fn = "...";
|
||||
let _ = format!("error: {r#fn}");
|
||||
}
|
||||
21
subprojects/thiserror/tests/ui/raw-identifier.stderr
Normal file
21
subprojects/thiserror/tests/ui/raw-identifier.stderr
Normal file
@@ -0,0 +1,21 @@
|
||||
error: invalid format string: raw identifiers are not supported
|
||||
--> tests/ui/raw-identifier.rs:4:18
|
||||
|
|
||||
4 | #[error("error: {r#fn}")]
|
||||
| --^^
|
||||
| |
|
||||
| raw identifier used here in format string
|
||||
| help: remove the `r#`
|
||||
|
|
||||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#`
|
||||
|
||||
error: invalid format string: raw identifiers are not supported
|
||||
--> tests/ui/raw-identifier.rs:11:30
|
||||
|
|
||||
11 | let _ = format!("error: {r#fn}");
|
||||
| --^^
|
||||
| |
|
||||
| raw identifier used here in format string
|
||||
| help: remove the `r#`
|
||||
|
|
||||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#`
|
||||
11
subprojects/thiserror/tests/ui/same-from-type.rs
Normal file
11
subprojects/thiserror/tests/ui/same-from-type.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error("failed to open")]
|
||||
OpenFile(#[from] std::io::Error),
|
||||
#[error("failed to close")]
|
||||
CloseFile(#[from] std::io::Error),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
8
subprojects/thiserror/tests/ui/same-from-type.stderr
Normal file
8
subprojects/thiserror/tests/ui/same-from-type.stderr
Normal file
@@ -0,0 +1,8 @@
|
||||
error[E0119]: conflicting implementations of trait `From<std::io::Error>` for type `Error`
|
||||
--> tests/ui/same-from-type.rs:8:15
|
||||
|
|
||||
6 | OpenFile(#[from] std::io::Error),
|
||||
| ------- first implementation here
|
||||
7 | #[error("failed to close")]
|
||||
8 | CloseFile(#[from] std::io::Error),
|
||||
| ^^^^^^^ conflicting implementation for `Error`
|
||||
12
subprojects/thiserror/tests/ui/source-enum-not-error.rs
Normal file
12
subprojects/thiserror/tests/ui/source-enum-not-error.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct NotError;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
pub enum ErrorEnum {
|
||||
Broken { source: NotError },
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
22
subprojects/thiserror/tests/ui/source-enum-not-error.stderr
Normal file
22
subprojects/thiserror/tests/ui/source-enum-not-error.stderr
Normal file
@@ -0,0 +1,22 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for reference `&NotError`, but its trait bounds were not satisfied
|
||||
--> tests/ui/source-enum-not-error.rs:9:14
|
||||
|
|
||||
4 | pub struct NotError;
|
||||
| ------------------- doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
|
||||
...
|
||||
9 | Broken { source: NotError },
|
||||
| ^^^^^^ method cannot be called on `&NotError` due to unsatisfied trait bounds
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`NotError: std::error::Error`
|
||||
which is required by `NotError: AsDynError<'_>`
|
||||
`&NotError: std::error::Error`
|
||||
which is required by `&NotError: AsDynError<'_>`
|
||||
note: the trait `std::error::Error` must be implemented
|
||||
--> $RUST/core/src/error.rs
|
||||
|
|
||||
| pub trait Error: Debug + Display {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `as_dyn_error`, perhaps you need to implement it:
|
||||
candidate #1: `AsDynError`
|
||||
@@ -0,0 +1,12 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct NotError;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
pub enum ErrorEnum {
|
||||
Broken(#[source] NotError),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,22 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for reference `&NotError`, but its trait bounds were not satisfied
|
||||
--> tests/ui/source-enum-unnamed-field-not-error.rs:9:12
|
||||
|
|
||||
4 | pub struct NotError;
|
||||
| ------------------- doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
|
||||
...
|
||||
9 | Broken(#[source] NotError),
|
||||
| ^^^^^^^^^ method cannot be called on `&NotError` due to unsatisfied trait bounds
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`NotError: std::error::Error`
|
||||
which is required by `NotError: AsDynError<'_>`
|
||||
`&NotError: std::error::Error`
|
||||
which is required by `&NotError: AsDynError<'_>`
|
||||
note: the trait `std::error::Error` must be implemented
|
||||
--> $RUST/core/src/error.rs
|
||||
|
|
||||
| pub trait Error: Debug + Display {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `as_dyn_error`, perhaps you need to implement it:
|
||||
candidate #1: `AsDynError`
|
||||
12
subprojects/thiserror/tests/ui/source-struct-not-error.rs
Normal file
12
subprojects/thiserror/tests/ui/source-struct-not-error.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct NotError;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
pub struct ErrorStruct {
|
||||
source: NotError,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,20 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for struct `NotError`, but its trait bounds were not satisfied
|
||||
--> tests/ui/source-struct-not-error.rs:9:5
|
||||
|
|
||||
4 | struct NotError;
|
||||
| --------------- method `as_dyn_error` not found for this struct because it doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
|
||||
...
|
||||
9 | source: NotError,
|
||||
| ^^^^^^ method cannot be called on `NotError` due to unsatisfied trait bounds
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`NotError: std::error::Error`
|
||||
which is required by `NotError: AsDynError<'_>`
|
||||
note: the trait `std::error::Error` must be implemented
|
||||
--> $RUST/core/src/error.rs
|
||||
|
|
||||
| pub trait Error: Debug + Display {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `as_dyn_error`, perhaps you need to implement it:
|
||||
candidate #1: `AsDynError`
|
||||
@@ -0,0 +1,10 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct NotError;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("...")]
|
||||
pub struct ErrorStruct(#[source] NotError);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,20 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for struct `NotError`, but its trait bounds were not satisfied
|
||||
--> tests/ui/source-struct-unnamed-field-not-error.rs:8:24
|
||||
|
|
||||
4 | struct NotError;
|
||||
| --------------- method `as_dyn_error` not found for this struct because it doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
|
||||
...
|
||||
8 | pub struct ErrorStruct(#[source] NotError);
|
||||
| ^^^^^^^^^ method cannot be called on `NotError` due to unsatisfied trait bounds
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`NotError: std::error::Error`
|
||||
which is required by `NotError: AsDynError<'_>`
|
||||
note: the trait `std::error::Error` must be implemented
|
||||
--> $RUST/core/src/error.rs
|
||||
|
|
||||
| pub trait Error: Debug + Display {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `as_dyn_error`, perhaps you need to implement it:
|
||||
candidate #1: `AsDynError`
|
||||
7
subprojects/thiserror/tests/ui/struct-with-fmt.rs
Normal file
7
subprojects/thiserror/tests/ui/struct-with-fmt.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(fmt = core::fmt::Octal::fmt)]
|
||||
pub struct Error(i32);
|
||||
|
||||
fn main() {}
|
||||
5
subprojects/thiserror/tests/ui/struct-with-fmt.stderr
Normal file
5
subprojects/thiserror/tests/ui/struct-with-fmt.stderr
Normal file
@@ -0,0 +1,5 @@
|
||||
error: #[error(fmt = ...)] is only supported in enums; for a struct, handwrite your own Display impl
|
||||
--> tests/ui/struct-with-fmt.rs:4:1
|
||||
|
|
||||
4 | #[error(fmt = core::fmt::Octal::fmt)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
8
subprojects/thiserror/tests/ui/transparent-display.rs
Normal file
8
subprojects/thiserror/tests/ui/transparent-display.rs
Normal file
@@ -0,0 +1,8 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
#[error("...")]
|
||||
pub struct Error(anyhow::Error);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: cannot have both #[error(transparent)] and a display attribute
|
||||
--> tests/ui/transparent-display.rs:5:1
|
||||
|
|
||||
5 | #[error("...")]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
9
subprojects/thiserror/tests/ui/transparent-enum-many.rs
Normal file
9
subprojects/thiserror/tests/ui/transparent-enum-many.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error(transparent)]
|
||||
Other(anyhow::Error, String),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,6 @@
|
||||
error: #[error(transparent)] requires exactly one field
|
||||
--> tests/ui/transparent-enum-many.rs:5:5
|
||||
|
|
||||
5 | / #[error(transparent)]
|
||||
6 | | Other(anyhow::Error, String),
|
||||
| |________________________________^
|
||||
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error(transparent)]
|
||||
Other { message: String },
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,20 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for reference `&String`, but its trait bounds were not satisfied
|
||||
--> tests/ui/transparent-enum-not-error.rs:5:13
|
||||
|
|
||||
5 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^ method cannot be called on `&String` due to unsatisfied trait bounds
|
||||
|
|
||||
::: $RUST/alloc/src/string.rs
|
||||
|
|
||||
| pub struct String {
|
||||
| ----------------- doesn't satisfy `String: AsDynError<'_>` or `String: std::error::Error`
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`String: std::error::Error`
|
||||
which is required by `String: AsDynError<'_>`
|
||||
`&String: std::error::Error`
|
||||
which is required by `&String: AsDynError<'_>`
|
||||
`str: Sized`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
`str: std::error::Error`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error(transparent)]
|
||||
Other(#[source] anyhow::Error),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: transparent variant can't contain #[source]
|
||||
--> tests/ui/transparent-enum-source.rs:6:11
|
||||
|
|
||||
6 | Other(#[source] anyhow::Error),
|
||||
| ^^^^^^^^^
|
||||
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error(transparent)]
|
||||
Other(String),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,20 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for reference `&String`, but its trait bounds were not satisfied
|
||||
--> tests/ui/transparent-enum-unnamed-field-not-error.rs:5:13
|
||||
|
|
||||
5 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^ method cannot be called on `&String` due to unsatisfied trait bounds
|
||||
|
|
||||
::: $RUST/alloc/src/string.rs
|
||||
|
|
||||
| pub struct String {
|
||||
| ----------------- doesn't satisfy `String: AsDynError<'_>` or `String: std::error::Error`
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`String: std::error::Error`
|
||||
which is required by `String: AsDynError<'_>`
|
||||
`&String: std::error::Error`
|
||||
which is required by `&String: AsDynError<'_>`
|
||||
`str: Sized`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
`str: std::error::Error`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
10
subprojects/thiserror/tests/ui/transparent-struct-many.rs
Normal file
10
subprojects/thiserror/tests/ui/transparent-struct-many.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
pub struct Error {
|
||||
inner: anyhow::Error,
|
||||
what: String,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: #[error(transparent)] requires exactly one field
|
||||
--> tests/ui/transparent-struct-many.rs:4:1
|
||||
|
|
||||
4 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
pub struct Error {
|
||||
message: String,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,18 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for struct `String`, but its trait bounds were not satisfied
|
||||
--> tests/ui/transparent-struct-not-error.rs:4:9
|
||||
|
|
||||
4 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^ method cannot be called on `String` due to unsatisfied trait bounds
|
||||
|
|
||||
::: $RUST/alloc/src/string.rs
|
||||
|
|
||||
| pub struct String {
|
||||
| ----------------- doesn't satisfy `String: AsDynError<'_>` or `String: std::error::Error`
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`String: std::error::Error`
|
||||
which is required by `String: AsDynError<'_>`
|
||||
`str: Sized`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
`str: std::error::Error`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
pub struct Error(#[source] anyhow::Error);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: transparent error struct can't contain #[source]
|
||||
--> tests/ui/transparent-struct-source.rs:5:18
|
||||
|
|
||||
5 | pub struct Error(#[source] anyhow::Error);
|
||||
| ^^^^^^^^^
|
||||
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error(transparent)]
|
||||
pub struct Error(String);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,18 @@
|
||||
error[E0599]: the method `as_dyn_error` exists for struct `String`, but its trait bounds were not satisfied
|
||||
--> tests/ui/transparent-struct-unnamed-field-not-error.rs:4:9
|
||||
|
|
||||
4 | #[error(transparent)]
|
||||
| ^^^^^^^^^^^ method cannot be called on `String` due to unsatisfied trait bounds
|
||||
|
|
||||
::: $RUST/alloc/src/string.rs
|
||||
|
|
||||
| pub struct String {
|
||||
| ----------------- doesn't satisfy `String: AsDynError<'_>` or `String: std::error::Error`
|
||||
|
|
||||
= note: the following trait bounds were not satisfied:
|
||||
`String: std::error::Error`
|
||||
which is required by `String: AsDynError<'_>`
|
||||
`str: Sized`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
`str: std::error::Error`
|
||||
which is required by `str: AsDynError<'_>`
|
||||
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[error("{self}")]
|
||||
pub struct Error;
|
||||
|
||||
fn main() {
|
||||
__FAIL__;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
error[E0425]: cannot find value `__FAIL__` in this scope
|
||||
--> tests/ui/unconditional-recursion.rs:8:5
|
||||
|
|
||||
8 | __FAIL__;
|
||||
| ^^^^^^^^ not found in this scope
|
||||
|
||||
warning: function cannot return without recursing
|
||||
--> tests/ui/unconditional-recursion.rs:4:9
|
||||
|
|
||||
4 | #[error("{self}")]
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| cannot return without recursing
|
||||
| recursive call site
|
||||
|
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/unconditional-recursion.rs:4:9
|
||||
|
|
||||
4 | #[error("{self}")]
|
||||
| ^^^^^^^^
|
||||
11
subprojects/thiserror/tests/ui/unexpected-field-fmt.rs
Normal file
11
subprojects/thiserror/tests/ui/unexpected-field-fmt.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Error {
|
||||
What {
|
||||
#[error("...")]
|
||||
io: std::io::Error,
|
||||
},
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: not expected here; the #[error(...)] attribute belongs on top of a struct or an enum variant
|
||||
--> tests/ui/unexpected-field-fmt.rs:6:9
|
||||
|
|
||||
6 | #[error("...")]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -0,0 +1,7 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
#[source]
|
||||
pub struct Error;
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: not expected here; the #[source] attribute belongs on a specific field
|
||||
--> tests/ui/unexpected-struct-source.rs:4:1
|
||||
|
|
||||
4 | #[source]
|
||||
| ^^^^^^^^^
|
||||
9
subprojects/thiserror/tests/ui/union.rs
Normal file
9
subprojects/thiserror/tests/ui/union.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error)]
|
||||
pub union U {
|
||||
msg: &'static str,
|
||||
num: usize,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
8
subprojects/thiserror/tests/ui/union.stderr
Normal file
8
subprojects/thiserror/tests/ui/union.stderr
Normal file
@@ -0,0 +1,8 @@
|
||||
error: union as errors are not supported
|
||||
--> tests/ui/union.rs:4:1
|
||||
|
|
||||
4 | / pub union U {
|
||||
5 | | msg: &'static str,
|
||||
6 | | num: usize,
|
||||
7 | | }
|
||||
| |_^
|
||||
Reference in New Issue
Block a user