diff options
author | Aleksey Kladov <[email protected]> | 2021-06-13 18:32:54 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-06-13 18:32:54 +0100 |
commit | de1fc70ccd3bf7a0850e036a12cf866a80d46458 (patch) | |
tree | d93cc6be7678b8be01a5162e80bb3f8df84e8c50 /crates/hir/src | |
parent | 24262f9ff6ae9ea326fa35d238704d18e99d52a1 (diff) |
internal: refactor find_map diagnostic
Diffstat (limited to 'crates/hir/src')
-rw-r--r-- | crates/hir/src/diagnostics.rs | 19 | ||||
-rw-r--r-- | crates/hir/src/lib.rs | 11 |
2 files changed, 8 insertions, 22 deletions
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![ | |||
41 | MissingUnsafe, | 41 | MissingUnsafe, |
42 | NoSuchField, | 42 | NoSuchField, |
43 | RemoveThisSemicolon, | 43 | RemoveThisSemicolon, |
44 | ReplaceFilterMapNextWithFindMap, | ||
44 | UnimplementedBuiltinMacro, | 45 | UnimplementedBuiltinMacro, |
45 | UnresolvedExternCrate, | 46 | UnresolvedExternCrate, |
46 | UnresolvedImport, | 47 | UnresolvedImport, |
@@ -121,9 +122,6 @@ pub struct MissingFields { | |||
121 | pub missed_fields: Vec<Name>, | 122 | pub missed_fields: Vec<Name>, |
122 | } | 123 | } |
123 | 124 | ||
124 | // Diagnostic: replace-filter-map-next-with-find-map | ||
125 | // | ||
126 | // This diagnostic is triggered when `.filter_map(..).next()` is used, rather than the more concise `.find_map(..)`. | ||
127 | #[derive(Debug)] | 125 | #[derive(Debug)] |
128 | pub struct ReplaceFilterMapNextWithFindMap { | 126 | pub struct ReplaceFilterMapNextWithFindMap { |
129 | pub file: HirFileId, | 127 | pub file: HirFileId, |
@@ -131,21 +129,6 @@ pub struct ReplaceFilterMapNextWithFindMap { | |||
131 | pub next_expr: AstPtr<ast::Expr>, | 129 | pub next_expr: AstPtr<ast::Expr>, |
132 | } | 130 | } |
133 | 131 | ||
134 | impl Diagnostic for ReplaceFilterMapNextWithFindMap { | ||
135 | fn code(&self) -> DiagnosticCode { | ||
136 | DiagnosticCode("replace-filter-map-next-with-find-map") | ||
137 | } | ||
138 | fn message(&self) -> String { | ||
139 | "replace filter_map(..).next() with find_map(..)".to_string() | ||
140 | } | ||
141 | fn display_source(&self) -> InFile<SyntaxNodePtr> { | ||
142 | InFile { file_id: self.file, value: self.next_expr.clone().into() } | ||
143 | } | ||
144 | fn as_any(&self) -> &(dyn Any + Send + 'static) { | ||
145 | self | ||
146 | } | ||
147 | } | ||
148 | |||
149 | #[derive(Debug)] | 132 | #[derive(Debug)] |
150 | pub struct MismatchedArgCount { | 133 | pub struct MismatchedArgCount { |
151 | pub call_expr: InFile<AstPtr<ast::Expr>>, | 134 | pub call_expr: InFile<AstPtr<ast::Expr>>, |
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 { | |||
1168 | } | 1168 | } |
1169 | BodyValidationDiagnostic::ReplaceFilterMapNextWithFindMap { method_call_expr } => { | 1169 | BodyValidationDiagnostic::ReplaceFilterMapNextWithFindMap { method_call_expr } => { |
1170 | if let Ok(next_source_ptr) = source_map.expr_syntax(method_call_expr) { | 1170 | if let Ok(next_source_ptr) = source_map.expr_syntax(method_call_expr) { |
1171 | sink.push(ReplaceFilterMapNextWithFindMap { | 1171 | acc.push( |
1172 | file: next_source_ptr.file_id, | 1172 | ReplaceFilterMapNextWithFindMap { |
1173 | next_expr: next_source_ptr.value, | 1173 | file: next_source_ptr.file_id, |
1174 | }); | 1174 | next_expr: next_source_ptr.value, |
1175 | } | ||
1176 | .into(), | ||
1177 | ); | ||
1175 | } | 1178 | } |
1176 | } | 1179 | } |
1177 | BodyValidationDiagnostic::MismatchedArgCount { call_expr, expected, found } => { | 1180 | BodyValidationDiagnostic::MismatchedArgCount { call_expr, expected, found } => { |