diff options
Diffstat (limited to 'subprojects/thiserror/tests/ui')
74 files changed, 859 insertions, 0 deletions
diff --git a/subprojects/thiserror/tests/ui/bad-field-attr.rs b/subprojects/thiserror/tests/ui/bad-field-attr.rs new file mode 100644 index 0000000..d5429b2 --- /dev/null +++ b/subprojects/thiserror/tests/ui/bad-field-attr.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +pub struct Error(#[error(transparent)] std::io::Error); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/bad-field-attr.stderr b/subprojects/thiserror/tests/ui/bad-field-attr.stderr new file mode 100644 index 0000000..5fb5744 --- /dev/null +++ b/subprojects/thiserror/tests/ui/bad-field-attr.stderr @@ -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); + | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/concat-display.rs b/subprojects/thiserror/tests/ui/concat-display.rs new file mode 100644 index 0000000..8b53cc0 --- /dev/null +++ b/subprojects/thiserror/tests/ui/concat-display.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/concat-display.stderr b/subprojects/thiserror/tests/ui/concat-display.stderr new file mode 100644 index 0000000..73718ae --- /dev/null +++ b/subprojects/thiserror/tests/ui/concat-display.stderr @@ -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) diff --git a/subprojects/thiserror/tests/ui/display-underscore.rs b/subprojects/thiserror/tests/ui/display-underscore.rs new file mode 100644 index 0000000..335614b --- /dev/null +++ b/subprojects/thiserror/tests/ui/display-underscore.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error("{_}")] +pub struct Error; + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/display-underscore.stderr b/subprojects/thiserror/tests/ui/display-underscore.stderr new file mode 100644 index 0000000..36882b9 --- /dev/null +++ b/subprojects/thiserror/tests/ui/display-underscore.stderr @@ -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 diff --git a/subprojects/thiserror/tests/ui/duplicate-enum-source.rs b/subprojects/thiserror/tests/ui/duplicate-enum-source.rs new file mode 100644 index 0000000..15e579f --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-enum-source.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/duplicate-enum-source.stderr b/subprojects/thiserror/tests/ui/duplicate-enum-source.stderr new file mode 100644 index 0000000..4a4b2d3 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-enum-source.stderr @@ -0,0 +1,5 @@ +error: duplicate #[source] attribute + --> tests/ui/duplicate-enum-source.rs:8:9 + | +8 | #[source] + | ^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/duplicate-fmt.rs b/subprojects/thiserror/tests/ui/duplicate-fmt.rs new file mode 100644 index 0000000..32f7a23 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-fmt.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/duplicate-fmt.stderr b/subprojects/thiserror/tests/ui/duplicate-fmt.stderr new file mode 100644 index 0000000..a6c9932 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-fmt.stderr @@ -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("...")] + | ^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/duplicate-struct-source.rs b/subprojects/thiserror/tests/ui/duplicate-struct-source.rs new file mode 100644 index 0000000..569df8d --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-struct-source.rs @@ -0,0 +1,11 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub struct ErrorStruct { + #[source] + a: std::io::Error, + #[source] + b: anyhow::Error, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/duplicate-struct-source.stderr b/subprojects/thiserror/tests/ui/duplicate-struct-source.stderr new file mode 100644 index 0000000..c8de574 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-struct-source.stderr @@ -0,0 +1,5 @@ +error: duplicate #[source] attribute + --> tests/ui/duplicate-struct-source.rs:7:5 + | +7 | #[source] + | ^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/duplicate-transparent.rs b/subprojects/thiserror/tests/ui/duplicate-transparent.rs new file mode 100644 index 0000000..49c0e46 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-transparent.rs @@ -0,0 +1,8 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +#[error(transparent)] +pub struct Error(anyhow::Error); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/duplicate-transparent.stderr b/subprojects/thiserror/tests/ui/duplicate-transparent.stderr new file mode 100644 index 0000000..a830879 --- /dev/null +++ b/subprojects/thiserror/tests/ui/duplicate-transparent.stderr @@ -0,0 +1,5 @@ +error: duplicate #[error(transparent)] attribute + --> tests/ui/duplicate-transparent.rs:5:1 + | +5 | #[error(transparent)] + | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/expression-fallback.rs b/subprojects/thiserror/tests/ui/expression-fallback.rs new file mode 100644 index 0000000..7269129 --- /dev/null +++ b/subprojects/thiserror/tests/ui/expression-fallback.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error("".yellow)] +pub struct ArgError; + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/expression-fallback.stderr b/subprojects/thiserror/tests/ui/expression-fallback.stderr new file mode 100644 index 0000000..8d22c3a --- /dev/null +++ b/subprojects/thiserror/tests/ui/expression-fallback.stderr @@ -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 diff --git a/subprojects/thiserror/tests/ui/fallback-impl-with-display.rs b/subprojects/thiserror/tests/ui/fallback-impl-with-display.rs new file mode 100644 index 0000000..23dcf28 --- /dev/null +++ b/subprojects/thiserror/tests/ui/fallback-impl-with-display.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/fallback-impl-with-display.stderr b/subprojects/thiserror/tests/ui/fallback-impl-with-display.stderr new file mode 100644 index 0000000..6bd3730 --- /dev/null +++ b/subprojects/thiserror/tests/ui/fallback-impl-with-display.stderr @@ -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) diff --git a/subprojects/thiserror/tests/ui/from-backtrace-backtrace.rs b/subprojects/thiserror/tests/ui/from-backtrace-backtrace.rs new file mode 100644 index 0000000..3b781ac --- /dev/null +++ b/subprojects/thiserror/tests/ui/from-backtrace-backtrace.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/from-backtrace-backtrace.stderr b/subprojects/thiserror/tests/ui/from-backtrace-backtrace.stderr new file mode 100644 index 0000000..5c0b9a3 --- /dev/null +++ b/subprojects/thiserror/tests/ui/from-backtrace-backtrace.stderr @@ -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] + | ^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/from-not-source.rs b/subprojects/thiserror/tests/ui/from-not-source.rs new file mode 100644 index 0000000..ad72867 --- /dev/null +++ b/subprojects/thiserror/tests/ui/from-not-source.rs @@ -0,0 +1,11 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub struct Error { + #[source] + source: std::io::Error, + #[from] + other: anyhow::Error, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/from-not-source.stderr b/subprojects/thiserror/tests/ui/from-not-source.stderr new file mode 100644 index 0000000..9713601 --- /dev/null +++ b/subprojects/thiserror/tests/ui/from-not-source.stderr @@ -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] + | ^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.rs b/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.rs new file mode 100644 index 0000000..0a0bcbe --- /dev/null +++ b/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.rs @@ -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; +} diff --git a/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.stderr b/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.stderr new file mode 100644 index 0000000..b98c31e --- /dev/null +++ b/subprojects/thiserror/tests/ui/invalid-input-impl-anyway.stderr @@ -0,0 +1,5 @@ +error: expected attribute arguments in parentheses: #[error(...)] + --> tests/ui/invalid-input-impl-anyway.rs:4:3 + | +4 | #[error] + | ^^^^^ diff --git a/subprojects/thiserror/tests/ui/lifetime.rs b/subprojects/thiserror/tests/ui/lifetime.rs new file mode 100644 index 0000000..a82909d --- /dev/null +++ b/subprojects/thiserror/tests/ui/lifetime.rs @@ -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"))) +} diff --git a/subprojects/thiserror/tests/ui/lifetime.stderr b/subprojects/thiserror/tests/ui/lifetime.stderr new file mode 100644 index 0000000..8b58136 --- /dev/null +++ b/subprojects/thiserror/tests/ui/lifetime.stderr @@ -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>), + | ^^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/missing-display.rs b/subprojects/thiserror/tests/ui/missing-display.rs new file mode 100644 index 0000000..31e23fe --- /dev/null +++ b/subprojects/thiserror/tests/ui/missing-display.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum MyError { + First, + Second, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/missing-display.stderr b/subprojects/thiserror/tests/ui/missing-display.stderr new file mode 100644 index 0000000..fe7472e --- /dev/null +++ b/subprojects/thiserror/tests/ui/missing-display.stderr @@ -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) diff --git a/subprojects/thiserror/tests/ui/missing-fmt.rs b/subprojects/thiserror/tests/ui/missing-fmt.rs new file mode 100644 index 0000000..d52fbdf --- /dev/null +++ b/subprojects/thiserror/tests/ui/missing-fmt.rs @@ -0,0 +1,10 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("...")] + A(usize), + B(usize), +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/missing-fmt.stderr b/subprojects/thiserror/tests/ui/missing-fmt.stderr new file mode 100644 index 0000000..c0be373 --- /dev/null +++ b/subprojects/thiserror/tests/ui/missing-fmt.stderr @@ -0,0 +1,5 @@ +error: missing #[error("...")] display attribute + --> tests/ui/missing-fmt.rs:7:5 + | +7 | B(usize), + | ^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/no-display.rs b/subprojects/thiserror/tests/ui/no-display.rs new file mode 100644 index 0000000..d804e00 --- /dev/null +++ b/subprojects/thiserror/tests/ui/no-display.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/no-display.stderr b/subprojects/thiserror/tests/ui/no-display.stderr new file mode 100644 index 0000000..9750582 --- /dev/null +++ b/subprojects/thiserror/tests/ui/no-display.stderr @@ -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) diff --git a/subprojects/thiserror/tests/ui/numbered-positional-tuple.rs b/subprojects/thiserror/tests/ui/numbered-positional-tuple.rs new file mode 100644 index 0000000..6deb658 --- /dev/null +++ b/subprojects/thiserror/tests/ui/numbered-positional-tuple.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/numbered-positional-tuple.stderr b/subprojects/thiserror/tests/ui/numbered-positional-tuple.stderr new file mode 100644 index 0000000..ab13371 --- /dev/null +++ b/subprojects/thiserror/tests/ui/numbered-positional-tuple.stderr @@ -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)] + | ^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/raw-identifier.rs b/subprojects/thiserror/tests/ui/raw-identifier.rs new file mode 100644 index 0000000..e7e66d0 --- /dev/null +++ b/subprojects/thiserror/tests/ui/raw-identifier.rs @@ -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}"); +} diff --git a/subprojects/thiserror/tests/ui/raw-identifier.stderr b/subprojects/thiserror/tests/ui/raw-identifier.stderr new file mode 100644 index 0000000..a3ce94d --- /dev/null +++ b/subprojects/thiserror/tests/ui/raw-identifier.stderr @@ -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#` diff --git a/subprojects/thiserror/tests/ui/same-from-type.rs b/subprojects/thiserror/tests/ui/same-from-type.rs new file mode 100644 index 0000000..0ebdf45 --- /dev/null +++ b/subprojects/thiserror/tests/ui/same-from-type.rs @@ -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() {} diff --git a/subprojects/thiserror/tests/ui/same-from-type.stderr b/subprojects/thiserror/tests/ui/same-from-type.stderr new file mode 100644 index 0000000..a655163 --- /dev/null +++ b/subprojects/thiserror/tests/ui/same-from-type.stderr @@ -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` diff --git a/subprojects/thiserror/tests/ui/source-enum-not-error.rs b/subprojects/thiserror/tests/ui/source-enum-not-error.rs new file mode 100644 index 0000000..dae2285 --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-enum-not-error.rs @@ -0,0 +1,12 @@ +use thiserror::Error; + +#[derive(Debug)] +pub struct NotError; + +#[derive(Error, Debug)] +#[error("...")] +pub enum ErrorEnum { + Broken { source: NotError }, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/source-enum-not-error.stderr b/subprojects/thiserror/tests/ui/source-enum-not-error.stderr new file mode 100644 index 0000000..649d77d --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-enum-not-error.stderr @@ -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` diff --git a/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.rs b/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.rs new file mode 100644 index 0000000..a877c2c --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.rs @@ -0,0 +1,12 @@ +use thiserror::Error; + +#[derive(Debug)] +pub struct NotError; + +#[derive(Error, Debug)] +#[error("...")] +pub enum ErrorEnum { + Broken(#[source] NotError), +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.stderr b/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.stderr new file mode 100644 index 0000000..dc97a4b --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-enum-unnamed-field-not-error.stderr @@ -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` diff --git a/subprojects/thiserror/tests/ui/source-struct-not-error.rs b/subprojects/thiserror/tests/ui/source-struct-not-error.rs new file mode 100644 index 0000000..d59df1e --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-struct-not-error.rs @@ -0,0 +1,12 @@ +use thiserror::Error; + +#[derive(Debug)] +struct NotError; + +#[derive(Error, Debug)] +#[error("...")] +pub struct ErrorStruct { + source: NotError, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/source-struct-not-error.stderr b/subprojects/thiserror/tests/ui/source-struct-not-error.stderr new file mode 100644 index 0000000..07cd67a --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-struct-not-error.stderr @@ -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` diff --git a/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.rs b/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.rs new file mode 100644 index 0000000..160b6b2 --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.rs @@ -0,0 +1,10 @@ +use thiserror::Error; + +#[derive(Debug)] +struct NotError; + +#[derive(Error, Debug)] +#[error("...")] +pub struct ErrorStruct(#[source] NotError); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.stderr b/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.stderr new file mode 100644 index 0000000..1f5350b --- /dev/null +++ b/subprojects/thiserror/tests/ui/source-struct-unnamed-field-not-error.stderr @@ -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` diff --git a/subprojects/thiserror/tests/ui/struct-with-fmt.rs b/subprojects/thiserror/tests/ui/struct-with-fmt.rs new file mode 100644 index 0000000..73bf79f --- /dev/null +++ b/subprojects/thiserror/tests/ui/struct-with-fmt.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(fmt = core::fmt::Octal::fmt)] +pub struct Error(i32); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/struct-with-fmt.stderr b/subprojects/thiserror/tests/ui/struct-with-fmt.stderr new file mode 100644 index 0000000..00463be --- /dev/null +++ b/subprojects/thiserror/tests/ui/struct-with-fmt.stderr @@ -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)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/transparent-display.rs b/subprojects/thiserror/tests/ui/transparent-display.rs new file mode 100644 index 0000000..2a59f18 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-display.rs @@ -0,0 +1,8 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +#[error("...")] +pub struct Error(anyhow::Error); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-display.stderr b/subprojects/thiserror/tests/ui/transparent-display.stderr new file mode 100644 index 0000000..54d958b --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-display.stderr @@ -0,0 +1,5 @@ +error: cannot have both #[error(transparent)] and a display attribute + --> tests/ui/transparent-display.rs:5:1 + | +5 | #[error("...")] + | ^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/transparent-enum-many.rs b/subprojects/thiserror/tests/ui/transparent-enum-many.rs new file mode 100644 index 0000000..e2a73a4 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-many.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + Other(anyhow::Error, String), +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-enum-many.stderr b/subprojects/thiserror/tests/ui/transparent-enum-many.stderr new file mode 100644 index 0000000..a9adfa5 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-many.stderr @@ -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), + | |________________________________^ diff --git a/subprojects/thiserror/tests/ui/transparent-enum-not-error.rs b/subprojects/thiserror/tests/ui/transparent-enum-not-error.rs new file mode 100644 index 0000000..80ccfc9 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-not-error.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + Other { message: String }, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-enum-not-error.stderr b/subprojects/thiserror/tests/ui/transparent-enum-not-error.stderr new file mode 100644 index 0000000..bb836d4 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-not-error.stderr @@ -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<'_>` diff --git a/subprojects/thiserror/tests/ui/transparent-enum-source.rs b/subprojects/thiserror/tests/ui/transparent-enum-source.rs new file mode 100644 index 0000000..3849f66 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-source.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + Other(#[source] anyhow::Error), +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-enum-source.stderr b/subprojects/thiserror/tests/ui/transparent-enum-source.stderr new file mode 100644 index 0000000..ccb9067 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-source.stderr @@ -0,0 +1,5 @@ +error: transparent variant can't contain #[source] + --> tests/ui/transparent-enum-source.rs:6:11 + | +6 | Other(#[source] anyhow::Error), + | ^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.rs b/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.rs new file mode 100644 index 0000000..87c32e0 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + Other(String), +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.stderr b/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.stderr new file mode 100644 index 0000000..f337c59 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-enum-unnamed-field-not-error.stderr @@ -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<'_>` diff --git a/subprojects/thiserror/tests/ui/transparent-struct-many.rs b/subprojects/thiserror/tests/ui/transparent-struct-many.rs new file mode 100644 index 0000000..18f2466 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-many.rs @@ -0,0 +1,10 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +pub struct Error { + inner: anyhow::Error, + what: String, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-struct-many.stderr b/subprojects/thiserror/tests/ui/transparent-struct-many.stderr new file mode 100644 index 0000000..c0e3806 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-many.stderr @@ -0,0 +1,5 @@ +error: #[error(transparent)] requires exactly one field + --> tests/ui/transparent-struct-many.rs:4:1 + | +4 | #[error(transparent)] + | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/transparent-struct-not-error.rs b/subprojects/thiserror/tests/ui/transparent-struct-not-error.rs new file mode 100644 index 0000000..811ff53 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-not-error.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +pub struct Error { + message: String, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-struct-not-error.stderr b/subprojects/thiserror/tests/ui/transparent-struct-not-error.stderr new file mode 100644 index 0000000..ee50d03 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-not-error.stderr @@ -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<'_>` diff --git a/subprojects/thiserror/tests/ui/transparent-struct-source.rs b/subprojects/thiserror/tests/ui/transparent-struct-source.rs new file mode 100644 index 0000000..d4512c2 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-source.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +pub struct Error(#[source] anyhow::Error); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-struct-source.stderr b/subprojects/thiserror/tests/ui/transparent-struct-source.stderr new file mode 100644 index 0000000..3012ca3 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-source.stderr @@ -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); + | ^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.rs b/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.rs new file mode 100644 index 0000000..b4f7fbb --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error(transparent)] +pub struct Error(String); + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.stderr b/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.stderr new file mode 100644 index 0000000..c3d6c00 --- /dev/null +++ b/subprojects/thiserror/tests/ui/transparent-struct-unnamed-field-not-error.stderr @@ -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<'_>` diff --git a/subprojects/thiserror/tests/ui/unconditional-recursion.rs b/subprojects/thiserror/tests/ui/unconditional-recursion.rs new file mode 100644 index 0000000..035b15e --- /dev/null +++ b/subprojects/thiserror/tests/ui/unconditional-recursion.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error("{self}")] +pub struct Error; + +fn main() { + __FAIL__; +} diff --git a/subprojects/thiserror/tests/ui/unconditional-recursion.stderr b/subprojects/thiserror/tests/ui/unconditional-recursion.stderr new file mode 100644 index 0000000..568e891 --- /dev/null +++ b/subprojects/thiserror/tests/ui/unconditional-recursion.stderr @@ -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}")] + | ^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/unexpected-field-fmt.rs b/subprojects/thiserror/tests/ui/unexpected-field-fmt.rs new file mode 100644 index 0000000..7c439d9 --- /dev/null +++ b/subprojects/thiserror/tests/ui/unexpected-field-fmt.rs @@ -0,0 +1,11 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + What { + #[error("...")] + io: std::io::Error, + }, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/unexpected-field-fmt.stderr b/subprojects/thiserror/tests/ui/unexpected-field-fmt.stderr new file mode 100644 index 0000000..bf3c24d --- /dev/null +++ b/subprojects/thiserror/tests/ui/unexpected-field-fmt.stderr @@ -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("...")] + | ^^^^^^^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/unexpected-struct-source.rs b/subprojects/thiserror/tests/ui/unexpected-struct-source.rs new file mode 100644 index 0000000..f396494 --- /dev/null +++ b/subprojects/thiserror/tests/ui/unexpected-struct-source.rs @@ -0,0 +1,7 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[source] +pub struct Error; + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/unexpected-struct-source.stderr b/subprojects/thiserror/tests/ui/unexpected-struct-source.stderr new file mode 100644 index 0000000..6f15841 --- /dev/null +++ b/subprojects/thiserror/tests/ui/unexpected-struct-source.stderr @@ -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] + | ^^^^^^^^^ diff --git a/subprojects/thiserror/tests/ui/union.rs b/subprojects/thiserror/tests/ui/union.rs new file mode 100644 index 0000000..cd6a934 --- /dev/null +++ b/subprojects/thiserror/tests/ui/union.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error)] +pub union U { + msg: &'static str, + num: usize, +} + +fn main() {} diff --git a/subprojects/thiserror/tests/ui/union.stderr b/subprojects/thiserror/tests/ui/union.stderr new file mode 100644 index 0000000..3ec4d71 --- /dev/null +++ b/subprojects/thiserror/tests/ui/union.stderr @@ -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 | | } + | |_^ |
