aboutsummaryrefslogtreecommitdiff
path: root/crates/hir
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir')
-rw-r--r--crates/hir/src/diagnostics.rs22
-rw-r--r--crates/hir/src/lib.rs4
2 files changed, 4 insertions, 22 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index c7702e09f..47d17ba70 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -32,6 +32,7 @@ macro_rules! diagnostics {
32} 32}
33 33
34diagnostics![ 34diagnostics![
35 BreakOutsideOfLoop,
35 InactiveCode, 36 InactiveCode,
36 MacroError, 37 MacroError,
37 MissingFields, 38 MissingFields,
@@ -98,28 +99,9 @@ pub struct NoSuchField {
98 pub field: InFile<AstPtr<ast::RecordExprField>>, 99 pub field: InFile<AstPtr<ast::RecordExprField>>,
99} 100}
100 101
101// Diagnostic: break-outside-of-loop
102//
103// This diagnostic is triggered if the `break` keyword is used outside of a loop.
104#[derive(Debug)] 102#[derive(Debug)]
105pub struct BreakOutsideOfLoop { 103pub struct BreakOutsideOfLoop {
106 pub file: HirFileId, 104 pub expr: InFile<AstPtr<ast::Expr>>,
107 pub expr: AstPtr<ast::Expr>,
108}
109
110impl Diagnostic for BreakOutsideOfLoop {
111 fn code(&self) -> DiagnosticCode {
112 DiagnosticCode("break-outside-of-loop")
113 }
114 fn message(&self) -> String {
115 "break outside of loop".to_string()
116 }
117 fn display_source(&self) -> InFile<SyntaxNodePtr> {
118 InFile { file_id: self.file, value: self.expr.clone().into() }
119 }
120 fn as_any(&self) -> &(dyn Any + Send + 'static) {
121 self
122 }
123} 105}
124 106
125// Diagnostic: missing-unsafe 107// Diagnostic: missing-unsafe
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 7faf6ec1f..2f507b83b 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -1080,10 +1080,10 @@ impl Function {
1080 acc.push(NoSuchField { field }.into()) 1080 acc.push(NoSuchField { field }.into())
1081 } 1081 }
1082 hir_ty::InferenceDiagnostic::BreakOutsideOfLoop { expr } => { 1082 hir_ty::InferenceDiagnostic::BreakOutsideOfLoop { expr } => {
1083 let ptr = source_map 1083 let expr = source_map
1084 .expr_syntax(*expr) 1084 .expr_syntax(*expr)
1085 .expect("break outside of loop in synthetic syntax"); 1085 .expect("break outside of loop in synthetic syntax");
1086 sink.push(BreakOutsideOfLoop { file: ptr.file_id, expr: ptr.value }) 1086 acc.push(BreakOutsideOfLoop { expr }.into())
1087 } 1087 }
1088 } 1088 }
1089 } 1089 }