summaryrefslogtreecommitdiff
path: root/subprojects/thiserror/tests/test_lints.rs
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-11-15 20:18:36 +0000
committerJohn Turner <jturner.usa@gmail.com>2025-11-15 20:18:36 +0000
commitc0bd0c9efd429b35354484e24fe272fa1fbfe901 (patch)
tree395d4918e6a2b882fc05b285001b6cb72ab10af2 /subprojects/thiserror/tests/test_lints.rs
parent0436fbc77039fa3d754f2db5cfefdd437fea51d1 (diff)
parent6eba9cd92c295c5389944f6adda1f1e83b2cb008 (diff)
downloadgentoo-utils-c0bd0c9efd429b35354484e24fe272fa1fbfe901.tar.gz
Merge commit '6eba9cd92c295c5389944f6adda1f1e83b2cb008' as 'subprojects/thiserror'
Diffstat (limited to 'subprojects/thiserror/tests/test_lints.rs')
-rw-r--r--subprojects/thiserror/tests/test_lints.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/subprojects/thiserror/tests/test_lints.rs b/subprojects/thiserror/tests/test_lints.rs
new file mode 100644
index 0000000..802ad50
--- /dev/null
+++ b/subprojects/thiserror/tests/test_lints.rs
@@ -0,0 +1,98 @@
+#![allow(clippy::mixed_attributes_style)]
+
+use thiserror::Error;
+
+pub use std::error::Error;
+
+#[test]
+fn test_allow_attributes() {
+ #![deny(clippy::allow_attributes)]
+
+ #[derive(Error, Debug)]
+ #[error("...")]
+ pub struct MyError(#[from] anyhow::Error);
+
+ let _: MyError;
+}
+
+#[test]
+fn test_unused_qualifications() {
+ #![deny(unused_qualifications)]
+
+ // Expansion of derive(Error) macro can't know whether something like
+ // std::error::Error is already imported in the caller's scope so it must
+ // suppress unused_qualifications.
+
+ #[derive(Error, Debug)]
+ #[error("...")]
+ pub struct MyError;
+
+ let _: MyError;
+}
+
+#[test]
+fn test_needless_lifetimes() {
+ #![allow(dead_code)]
+ #![deny(clippy::elidable_lifetime_names, clippy::needless_lifetimes)]
+
+ #[derive(Error, Debug)]
+ #[error("...")]
+ pub enum MyError<'a> {
+ A(#[from] std::io::Error),
+ B(&'a ()),
+ }
+
+ let _: MyError;
+}
+
+#[test]
+fn test_deprecated() {
+ #![deny(deprecated)]
+
+ #[derive(Error, Debug)]
+ #[deprecated]
+ #[error("...")]
+ pub struct DeprecatedStruct;
+
+ #[derive(Error, Debug)]
+ #[error("{message} {}", .message)]
+ pub struct DeprecatedStructField {
+ #[deprecated]
+ message: String,
+ }
+
+ #[derive(Error, Debug)]
+ #[deprecated]
+ pub enum DeprecatedEnum {
+ #[error("...")]
+ Variant,
+ }
+
+ #[derive(Error, Debug)]
+ pub enum DeprecatedVariant {
+ #[deprecated]
+ #[error("...")]
+ Variant,
+ }
+
+ #[derive(Error, Debug)]
+ pub enum DeprecatedFrom {
+ #[error(transparent)]
+ Variant(
+ #[from]
+ #[allow(deprecated)]
+ DeprecatedStruct,
+ ),
+ }
+
+ #[allow(deprecated)]
+ let _: DeprecatedStruct;
+ #[allow(deprecated)]
+ let _: DeprecatedStructField;
+ #[allow(deprecated)]
+ let _ = DeprecatedEnum::Variant;
+ #[allow(deprecated)]
+ let _ = DeprecatedVariant::Variant;
+ #[allow(deprecated)]
+ let _ = DeprecatedFrom::Variant(DeprecatedStruct);
+}