Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/handlers/unused_must_use.rs')
-rw-r--r--crates/ide-diagnostics/src/handlers/unused_must_use.rs30
1 files changed, 26 insertions, 4 deletions
diff --git a/crates/ide-diagnostics/src/handlers/unused_must_use.rs b/crates/ide-diagnostics/src/handlers/unused_must_use.rs
index 4b9ecf2169..e8d0717c91 100644
--- a/crates/ide-diagnostics/src/handlers/unused_must_use.rs
+++ b/crates/ide-diagnostics/src/handlers/unused_must_use.rs
@@ -4,14 +4,18 @@ use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext};
//
// This diagnostic is triggered when a value with the `#[must_use]` attribute
// is dropped without being used.
-pub(crate) fn unused_must_use(
- ctx: &DiagnosticsContext<'_, '_>,
- d: &hir::UnusedMustUse,
+pub(crate) fn unused_must_use<'db>(
+ ctx: &DiagnosticsContext<'_, 'db>,
+ d: &hir::UnusedMustUse<'db>,
) -> Diagnostic {
+ let message = match d.message {
+ Some(message) => format!("unused return value that must be used: {message}"),
+ None => "unused return value that must be used".to_owned(),
+ };
Diagnostic::new_with_syntax_node_ptr(
ctx,
DiagnosticCode::RustcLint("unused_must_use"),
- "unused return value that must be used",
+ message,
d.expr.map(Into::into),
)
.stable()
@@ -54,6 +58,24 @@ fn main() {
}
#[test]
+ fn with_message() {
+ check_diagnostics(
+ r#"
+struct S;
+impl S {
+ #[must_use = "custom message"]
+ fn produces(&self) -> i32 { 0 }
+}
+fn main() {
+ let s = S;
+ s.produces();
+ //^^^^^^^^^^^^ warn: unused return value that must be used: custom message
+}
+"#,
+ );
+ }
+
+ #[test]
fn unused_must_use_type() {
check_diagnostics(
r#"