From 74f3cca85ab870614f314c6180e2fbb883ad4fe3 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 13 Jun 2021 20:13:15 +0300 Subject: internal: refactor remove this semicolon diagnostics --- crates/hir/src/diagnostics.rs | 22 ++-------------------- crates/hir/src/lib.rs | 5 +---- 2 files changed, 3 insertions(+), 24 deletions(-) (limited to 'crates/hir/src') diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs index f839616ce..b144bb335 100644 --- a/crates/hir/src/diagnostics.rs +++ b/crates/hir/src/diagnostics.rs @@ -39,6 +39,7 @@ diagnostics![ MissingFields, MissingUnsafe, NoSuchField, + RemoveThisSemicolon, UnimplementedBuiltinMacro, UnresolvedExternCrate, UnresolvedImport, @@ -153,26 +154,7 @@ pub struct MismatchedArgCount { #[derive(Debug)] pub struct RemoveThisSemicolon { - pub file: HirFileId, - pub expr: AstPtr, -} - -impl Diagnostic for RemoveThisSemicolon { - fn code(&self) -> DiagnosticCode { - DiagnosticCode("remove-this-semicolon") - } - - fn message(&self) -> String { - "Remove this semicolon".to_string() - } - - fn display_source(&self) -> InFile { - InFile { file_id: self.file, value: self.expr.clone().into() } - } - - fn as_any(&self) -> &(dyn Any + Send + 'static) { - self - } + pub expr: InFile>, } // Diagnostic: missing-ok-or-some-in-tail-expr diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index c1af5f097..cb9bf60b8 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -1184,10 +1184,7 @@ impl Function { } BodyValidationDiagnostic::RemoveThisSemicolon { expr } => { match source_map.expr_syntax(expr) { - Ok(source_ptr) => sink.push(RemoveThisSemicolon { - file: source_ptr.file_id, - expr: source_ptr.value, - }), + Ok(expr) => acc.push(RemoveThisSemicolon { expr }.into()), Err(SyntheticSyntax) => (), } } -- cgit v1.2.3 From 949a6ec469507db5e79578da94e17cb63cb54d19 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 13 Jun 2021 20:19:11 +0300 Subject: internal: refactor missing or or some diagnostic --- crates/hir/src/diagnostics.rs | 31 ++----------------------------- crates/hir/src/lib.rs | 6 +----- 2 files changed, 3 insertions(+), 34 deletions(-) (limited to 'crates/hir/src') diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs index b144bb335..9afee0b90 100644 --- a/crates/hir/src/diagnostics.rs +++ b/crates/hir/src/diagnostics.rs @@ -37,6 +37,7 @@ diagnostics![ MacroError, MismatchedArgCount, MissingFields, + MissingOkOrSomeInTailExpr, MissingUnsafe, NoSuchField, RemoveThisSemicolon, @@ -157,41 +158,13 @@ pub struct RemoveThisSemicolon { pub expr: InFile>, } -// Diagnostic: missing-ok-or-some-in-tail-expr -// -// This diagnostic is triggered if a block that should return `Result` returns a value not wrapped in `Ok`, -// or if a block that should return `Option` returns a value not wrapped in `Some`. -// -// Example: -// -// ```rust -// fn foo() -> Result { -// 10 -// } -// ``` #[derive(Debug)] pub struct MissingOkOrSomeInTailExpr { - pub file: HirFileId, - pub expr: AstPtr, + pub expr: InFile>, // `Some` or `Ok` depending on whether the return type is Result or Option pub required: String, } -impl Diagnostic for MissingOkOrSomeInTailExpr { - fn code(&self) -> DiagnosticCode { - DiagnosticCode("missing-ok-or-some-in-tail-expr") - } - fn message(&self) -> String { - format!("wrap return expression in {}", self.required) - } - fn display_source(&self) -> InFile { - InFile { file_id: self.file, value: self.expr.clone().into() } - } - fn as_any(&self) -> &(dyn Any + Send + 'static) { - self - } -} - // Diagnostic: missing-match-arm // // This diagnostic is triggered if `match` block is missing one or more match arms. diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index cb9bf60b8..aaab5336a 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -1190,11 +1190,7 @@ impl Function { } BodyValidationDiagnostic::MissingOkOrSomeInTailExpr { expr, required } => { match source_map.expr_syntax(expr) { - Ok(source_ptr) => sink.push(MissingOkOrSomeInTailExpr { - file: source_ptr.file_id, - expr: source_ptr.value, - required, - }), + Ok(expr) => acc.push(MissingOkOrSomeInTailExpr { expr, required }.into()), Err(SyntheticSyntax) => (), } } -- cgit v1.2.3 From de1fc70ccd3bf7a0850e036a12cf866a80d46458 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 13 Jun 2021 20:32:54 +0300 Subject: internal: refactor find_map diagnostic --- crates/hir/src/diagnostics.rs | 19 +------------------ crates/hir/src/lib.rs | 11 +++++++---- 2 files changed, 8 insertions(+), 22 deletions(-) (limited to 'crates/hir/src') diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs index 9afee0b90..c294a803b 100644 --- a/crates/hir/src/diagnostics.rs +++ b/crates/hir/src/diagnostics.rs @@ -41,6 +41,7 @@ diagnostics![ MissingUnsafe, NoSuchField, RemoveThisSemicolon, + ReplaceFilterMapNextWithFindMap, UnimplementedBuiltinMacro, UnresolvedExternCrate, UnresolvedImport, @@ -121,9 +122,6 @@ pub struct MissingFields { pub missed_fields: Vec, } -// Diagnostic: replace-filter-map-next-with-find-map -// -// This diagnostic is triggered when `.filter_map(..).next()` is used, rather than the more concise `.find_map(..)`. #[derive(Debug)] pub struct ReplaceFilterMapNextWithFindMap { pub file: HirFileId, @@ -131,21 +129,6 @@ pub struct ReplaceFilterMapNextWithFindMap { pub next_expr: AstPtr, } -impl Diagnostic for ReplaceFilterMapNextWithFindMap { - fn code(&self) -> DiagnosticCode { - DiagnosticCode("replace-filter-map-next-with-find-map") - } - fn message(&self) -> String { - "replace filter_map(..).next() with find_map(..)".to_string() - } - fn display_source(&self) -> InFile { - InFile { file_id: self.file, value: self.next_expr.clone().into() } - } - fn as_any(&self) -> &(dyn Any + Send + 'static) { - self - } -} - #[derive(Debug)] pub struct MismatchedArgCount { pub call_expr: InFile>, diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index aaab5336a..b2731b62f 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -1168,10 +1168,13 @@ impl Function { } BodyValidationDiagnostic::ReplaceFilterMapNextWithFindMap { method_call_expr } => { if let Ok(next_source_ptr) = source_map.expr_syntax(method_call_expr) { - sink.push(ReplaceFilterMapNextWithFindMap { - file: next_source_ptr.file_id, - next_expr: next_source_ptr.value, - }); + acc.push( + ReplaceFilterMapNextWithFindMap { + file: next_source_ptr.file_id, + next_expr: next_source_ptr.value, + } + .into(), + ); } } BodyValidationDiagnostic::MismatchedArgCount { call_expr, expected, found } => { -- cgit v1.2.3