diff options
Diffstat (limited to 'crates/ra_hir_ty/src/diagnostics.rs')
-rw-r--r-- | crates/ra_hir_ty/src/diagnostics.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/diagnostics.rs b/crates/ra_hir_ty/src/diagnostics.rs index 0289911de..5b0dda634 100644 --- a/crates/ra_hir_ty/src/diagnostics.rs +++ b/crates/ra_hir_ty/src/diagnostics.rs | |||
@@ -197,3 +197,33 @@ impl AstDiagnostic for MissingUnsafe { | |||
197 | ast::Expr::cast(node).unwrap() | 197 | ast::Expr::cast(node).unwrap() |
198 | } | 198 | } |
199 | } | 199 | } |
200 | |||
201 | #[derive(Debug)] | ||
202 | pub struct MismatchedArgCount { | ||
203 | pub file: HirFileId, | ||
204 | pub call_expr: AstPtr<ast::Expr>, | ||
205 | pub expected: usize, | ||
206 | pub found: usize, | ||
207 | } | ||
208 | |||
209 | impl Diagnostic for MismatchedArgCount { | ||
210 | fn message(&self) -> String { | ||
211 | let s = if self.expected == 1 { "" } else { "s" }; | ||
212 | format!("Expected {} argument{}, found {}", self.expected, s, self.found) | ||
213 | } | ||
214 | fn source(&self) -> InFile<SyntaxNodePtr> { | ||
215 | InFile { file_id: self.file, value: self.call_expr.clone().into() } | ||
216 | } | ||
217 | fn as_any(&self) -> &(dyn Any + Send + 'static) { | ||
218 | self | ||
219 | } | ||
220 | } | ||
221 | |||
222 | impl AstDiagnostic for MismatchedArgCount { | ||
223 | type AST = ast::CallExpr; | ||
224 | fn ast(&self, db: &dyn AstDatabase) -> Self::AST { | ||
225 | let root = db.parse_or_expand(self.source().file_id).unwrap(); | ||
226 | let node = self.source().value.to_node(&root); | ||
227 | ast::CallExpr::cast(node).unwrap() | ||
228 | } | ||
229 | } | ||