diff options
author | Aleksey Kladov <[email protected]> | 2021-06-13 18:00:27 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-06-13 18:01:01 +0100 |
commit | bccf77f26cd504de14f7d7d03f9f2a85d0fabb3d (patch) | |
tree | 2d38ea6fb04b05a44467bd9614253b8621848f20 /crates/hir/src | |
parent | 886b66cd03cbe7cb13e248d7c7bbdeba66c7796a (diff) |
internal: refactor missing unsafe diagnostic
Diffstat (limited to 'crates/hir/src')
-rw-r--r-- | crates/hir/src/diagnostics.rs | 22 | ||||
-rw-r--r-- | crates/hir/src/lib.rs | 4 |
2 files changed, 3 insertions, 23 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs index 47d17ba70..f7bf63215 100644 --- a/crates/hir/src/diagnostics.rs +++ b/crates/hir/src/diagnostics.rs | |||
@@ -36,6 +36,7 @@ diagnostics![ | |||
36 | InactiveCode, | 36 | InactiveCode, |
37 | MacroError, | 37 | MacroError, |
38 | MissingFields, | 38 | MissingFields, |
39 | MissingUnsafe, | ||
39 | NoSuchField, | 40 | NoSuchField, |
40 | UnimplementedBuiltinMacro, | 41 | UnimplementedBuiltinMacro, |
41 | UnresolvedExternCrate, | 42 | UnresolvedExternCrate, |
@@ -104,28 +105,9 @@ pub struct BreakOutsideOfLoop { | |||
104 | pub expr: InFile<AstPtr<ast::Expr>>, | 105 | pub expr: InFile<AstPtr<ast::Expr>>, |
105 | } | 106 | } |
106 | 107 | ||
107 | // Diagnostic: missing-unsafe | ||
108 | // | ||
109 | // This diagnostic is triggered if an operation marked as `unsafe` is used outside of an `unsafe` function or block. | ||
110 | #[derive(Debug)] | 108 | #[derive(Debug)] |
111 | pub struct MissingUnsafe { | 109 | pub struct MissingUnsafe { |
112 | pub file: HirFileId, | 110 | pub expr: InFile<AstPtr<ast::Expr>>, |
113 | pub expr: AstPtr<ast::Expr>, | ||
114 | } | ||
115 | |||
116 | impl Diagnostic for MissingUnsafe { | ||
117 | fn code(&self) -> DiagnosticCode { | ||
118 | DiagnosticCode("missing-unsafe") | ||
119 | } | ||
120 | fn message(&self) -> String { | ||
121 | format!("This operation is unsafe and requires an unsafe function or block") | ||
122 | } | ||
123 | fn display_source(&self) -> InFile<SyntaxNodePtr> { | ||
124 | InFile { file_id: self.file, value: self.expr.clone().into() } | ||
125 | } | ||
126 | fn as_any(&self) -> &(dyn Any + Send + 'static) { | ||
127 | self | ||
128 | } | ||
129 | } | 111 | } |
130 | 112 | ||
131 | #[derive(Debug)] | 113 | #[derive(Debug)] |
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 2f507b83b..16f862707 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs | |||
@@ -1090,9 +1090,7 @@ impl Function { | |||
1090 | 1090 | ||
1091 | for expr in hir_ty::diagnostics::missing_unsafe(db, self.id.into()) { | 1091 | for expr in hir_ty::diagnostics::missing_unsafe(db, self.id.into()) { |
1092 | match source_map.expr_syntax(expr) { | 1092 | match source_map.expr_syntax(expr) { |
1093 | Ok(in_file) => { | 1093 | Ok(expr) => acc.push(MissingUnsafe { expr }.into()), |
1094 | sink.push(MissingUnsafe { file: in_file.file_id, expr: in_file.value }) | ||
1095 | } | ||
1096 | Err(SyntheticSyntax) => { | 1094 | Err(SyntheticSyntax) => { |
1097 | // FIXME: Here and eslwhere in this file, the `expr` was | 1095 | // FIXME: Here and eslwhere in this file, the `expr` was |
1098 | // desugared, report or assert that this doesn't happen. | 1096 | // desugared, report or assert that this doesn't happen. |