aboutsummaryrefslogtreecommitdiff
path: root/crates/hir/src/diagnostics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir/src/diagnostics.rs')
-rw-r--r--crates/hir/src/diagnostics.rs54
1 files changed, 52 insertions, 2 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index 2cdbd172a..2edb53765 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -14,8 +14,7 @@ use syntax::{ast, AstPtr, SyntaxNodePtr, TextRange};
14pub use hir_ty::{ 14pub use hir_ty::{
15 diagnostics::{ 15 diagnostics::{
16 IncorrectCase, MismatchedArgCount, MissingFields, MissingMatchArms, 16 IncorrectCase, MismatchedArgCount, MissingFields, MissingMatchArms,
17 MissingOkOrSomeInTailExpr, NoSuchField, RemoveThisSemicolon, 17 MissingOkOrSomeInTailExpr, RemoveThisSemicolon, ReplaceFilterMapNextWithFindMap,
18 ReplaceFilterMapNextWithFindMap,
19 }, 18 },
20 diagnostics_sink::{Diagnostic, DiagnosticCode, DiagnosticSink, DiagnosticSinkBuilder}, 19 diagnostics_sink::{Diagnostic, DiagnosticCode, DiagnosticSink, DiagnosticSinkBuilder},
21}; 20};
@@ -251,3 +250,54 @@ impl Diagnostic for UnimplementedBuiltinMacro {
251 self 250 self
252 } 251 }
253} 252}
253
254// Diagnostic: no-such-field
255//
256// This diagnostic is triggered if created structure does not have field provided in record.
257#[derive(Debug)]
258pub struct NoSuchField {
259 pub file: HirFileId,
260 pub field: AstPtr<ast::RecordExprField>,
261}
262
263impl Diagnostic for NoSuchField {
264 fn code(&self) -> DiagnosticCode {
265 DiagnosticCode("no-such-field")
266 }
267
268 fn message(&self) -> String {
269 "no such field".to_string()
270 }
271
272 fn display_source(&self) -> InFile<SyntaxNodePtr> {
273 InFile::new(self.file, self.field.clone().into())
274 }
275
276 fn as_any(&self) -> &(dyn Any + Send + 'static) {
277 self
278 }
279}
280
281// Diagnostic: break-outside-of-loop
282//
283// This diagnostic is triggered if the `break` keyword is used outside of a loop.
284#[derive(Debug)]
285pub struct BreakOutsideOfLoop {
286 pub file: HirFileId,
287 pub expr: AstPtr<ast::Expr>,
288}
289
290impl Diagnostic for BreakOutsideOfLoop {
291 fn code(&self) -> DiagnosticCode {
292 DiagnosticCode("break-outside-of-loop")
293 }
294 fn message(&self) -> String {
295 "break outside of loop".to_string()
296 }
297 fn display_source(&self) -> InFile<SyntaxNodePtr> {
298 InFile { file_id: self.file, value: self.expr.clone().into() }
299 }
300 fn as_any(&self) -> &(dyn Any + Send + 'static) {
301 self
302 }
303}