diff options
author | Kirill Bulatov <[email protected]> | 2020-08-08 23:59:26 +0100 |
---|---|---|
committer | Kirill Bulatov <[email protected]> | 2020-08-11 13:09:08 +0100 |
commit | 9963f43d51071ea02f8f6d490b9c49882034b42c (patch) | |
tree | 7ecdbbd66fb8c988989e6de17c77ab14262589c0 /crates/ra_hir_expand | |
parent | cfbbd91a886e2394e7411f9d7f4966dcbd454764 (diff) |
Refactor the diagnostics
Diffstat (limited to 'crates/ra_hir_expand')
-rw-r--r-- | crates/ra_hir_expand/src/diagnostics.rs | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/crates/ra_hir_expand/src/diagnostics.rs b/crates/ra_hir_expand/src/diagnostics.rs index 90a3b87f9..2b74473ce 100644 --- a/crates/ra_hir_expand/src/diagnostics.rs +++ b/crates/ra_hir_expand/src/diagnostics.rs | |||
@@ -16,18 +16,13 @@ | |||
16 | 16 | ||
17 | use std::{any::Any, fmt}; | 17 | use std::{any::Any, fmt}; |
18 | 18 | ||
19 | use ra_syntax::{SyntaxNode, SyntaxNodePtr}; | 19 | use ra_syntax::SyntaxNodePtr; |
20 | 20 | ||
21 | use crate::{db::AstDatabase, InFile}; | 21 | use crate::{db::AstDatabase, InFile}; |
22 | 22 | ||
23 | pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static { | 23 | pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static { |
24 | fn message(&self) -> String; | 24 | fn message(&self) -> String; |
25 | /// A source to be used in highlighting and other visual representations | 25 | fn presentation(&self) -> InFile<SyntaxNodePtr>; |
26 | fn source(&self) -> InFile<SyntaxNodePtr>; | ||
27 | /// A source to be used during the fix application | ||
28 | fn fix_source(&self) -> InFile<SyntaxNodePtr> { | ||
29 | self.source() | ||
30 | } | ||
31 | fn as_any(&self) -> &(dyn Any + Send + 'static); | 26 | fn as_any(&self) -> &(dyn Any + Send + 'static); |
32 | fn is_experimental(&self) -> bool { | 27 | fn is_experimental(&self) -> bool { |
33 | false | 28 | false |
@@ -36,16 +31,10 @@ pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static { | |||
36 | 31 | ||
37 | pub trait AstDiagnostic { | 32 | pub trait AstDiagnostic { |
38 | type AST; | 33 | type AST; |
39 | fn ast(&self, db: &dyn AstDatabase) -> Self::AST; | 34 | fn fix_source(&self, db: &dyn AstDatabase) -> Self::AST; |
40 | } | 35 | } |
41 | 36 | ||
42 | impl dyn Diagnostic { | 37 | impl dyn Diagnostic { |
43 | pub fn syntax_node(&self, db: &impl AstDatabase) -> SyntaxNode { | ||
44 | let source = self.source(); | ||
45 | let node = db.parse_or_expand(source.file_id).unwrap(); | ||
46 | source.value.to_node(&node) | ||
47 | } | ||
48 | |||
49 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { | 38 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { |
50 | self.as_any().downcast_ref() | 39 | self.as_any().downcast_ref() |
51 | } | 40 | } |