diff options
Diffstat (limited to 'crates/ra_hir_ty/src/diagnostics.rs')
-rw-r--r-- | crates/ra_hir_ty/src/diagnostics.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/diagnostics.rs b/crates/ra_hir_ty/src/diagnostics.rs index ebd9cb08f..a59efb347 100644 --- a/crates/ra_hir_ty/src/diagnostics.rs +++ b/crates/ra_hir_ty/src/diagnostics.rs | |||
@@ -169,3 +169,31 @@ impl AstDiagnostic for BreakOutsideOfLoop { | |||
169 | ast::Expr::cast(node).unwrap() | 169 | ast::Expr::cast(node).unwrap() |
170 | } | 170 | } |
171 | } | 171 | } |
172 | |||
173 | #[derive(Debug)] | ||
174 | pub struct MissingUnsafe { | ||
175 | pub file: HirFileId, | ||
176 | pub expr: AstPtr<ast::Expr>, | ||
177 | } | ||
178 | |||
179 | impl Diagnostic for MissingUnsafe { | ||
180 | fn message(&self) -> String { | ||
181 | format!("This operation is unsafe and requires an unsafe function or block") | ||
182 | } | ||
183 | fn source(&self) -> InFile<SyntaxNodePtr> { | ||
184 | InFile { file_id: self.file, value: self.expr.clone().into() } | ||
185 | } | ||
186 | fn as_any(&self) -> &(dyn Any + Send + 'static) { | ||
187 | self | ||
188 | } | ||
189 | } | ||
190 | |||
191 | impl AstDiagnostic for MissingUnsafe { | ||
192 | type AST = ast::Expr; | ||
193 | |||
194 | fn ast(&self, db: &impl AstDatabase) -> Self::AST { | ||
195 | let root = db.parse_or_expand(self.source().file_id).unwrap(); | ||
196 | let node = self.source().value.to_node(&root); | ||
197 | ast::Expr::cast(node).unwrap() | ||
198 | } | ||
199 | } | ||