diff options
author | Kirill Bulatov <[email protected]> | 2020-07-28 08:24:59 +0100 |
---|---|---|
committer | Kirill Bulatov <[email protected]> | 2020-08-11 13:09:08 +0100 |
commit | cfbbd91a886e2394e7411f9d7f4966dcbd454764 (patch) | |
tree | baa61b0cd6e1b7424d7760402e1dafb21dc3fe72 /crates/ra_hir_expand/src | |
parent | 21184a1b2a4bea57a7666432749b171414136c60 (diff) |
Require source implementations for Diagnostic
Diffstat (limited to 'crates/ra_hir_expand/src')
-rw-r--r-- | crates/ra_hir_expand/src/diagnostics.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/crates/ra_hir_expand/src/diagnostics.rs b/crates/ra_hir_expand/src/diagnostics.rs index 23f28a7f7..90a3b87f9 100644 --- a/crates/ra_hir_expand/src/diagnostics.rs +++ b/crates/ra_hir_expand/src/diagnostics.rs | |||
@@ -22,9 +22,11 @@ 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 | fn fix_source(&self) -> InFile<SyntaxNodePtr>; | 25 | /// A source to be used in highlighting and other visual representations |
26 | fn source(&self) -> InFile<SyntaxNodePtr> { | 26 | fn source(&self) -> InFile<SyntaxNodePtr>; |
27 | self.fix_source() | 27 | /// A source to be used during the fix application |
28 | fn fix_source(&self) -> InFile<SyntaxNodePtr> { | ||
29 | self.source() | ||
28 | } | 30 | } |
29 | fn as_any(&self) -> &(dyn Any + Send + 'static); | 31 | fn as_any(&self) -> &(dyn Any + Send + 'static); |
30 | fn is_experimental(&self) -> bool { | 32 | fn is_experimental(&self) -> bool { |
@@ -39,8 +41,9 @@ pub trait AstDiagnostic { | |||
39 | 41 | ||
40 | impl dyn Diagnostic { | 42 | impl dyn Diagnostic { |
41 | pub fn syntax_node(&self, db: &impl AstDatabase) -> SyntaxNode { | 43 | pub fn syntax_node(&self, db: &impl AstDatabase) -> SyntaxNode { |
42 | let node = db.parse_or_expand(self.source().file_id).unwrap(); | 44 | let source = self.source(); |
43 | self.source().value.to_node(&node) | 45 | let node = db.parse_or_expand(source.file_id).unwrap(); |
46 | source.value.to_node(&node) | ||
44 | } | 47 | } |
45 | 48 | ||
46 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { | 49 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { |