aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ide/src/diagnostics.rs35
-rw-r--r--crates/ide/src/diagnostics/fixes.rs (renamed from crates/ide/src/diagnostics/diagnostics_with_fix.rs)10
-rw-r--r--crates/ide/src/lib.rs31
3 files changed, 40 insertions, 36 deletions
diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs
index 89ff55490..1f85805d2 100644
--- a/crates/ide/src/diagnostics.rs
+++ b/crates/ide/src/diagnostics.rs
@@ -4,7 +4,7 @@
4//! macro-expanded files, but we need to present them to the users in terms of 4//! macro-expanded files, but we need to present them to the users in terms of
5//! original files. So we need to map the ranges. 5//! original files. So we need to map the ranges.
6 6
7mod diagnostics_with_fix; 7mod fixes;
8 8
9use std::cell::RefCell; 9use std::cell::RefCell;
10 10
@@ -19,9 +19,38 @@ use syntax::{
19}; 19};
20use text_edit::TextEdit; 20use text_edit::TextEdit;
21 21
22use crate::{Diagnostic, FileId, Fix, SourceFileEdit}; 22use crate::{FileId, SourceChange, SourceFileEdit};
23 23
24use self::diagnostics_with_fix::DiagnosticWithFix; 24use self::fixes::DiagnosticWithFix;
25
26#[derive(Debug)]
27pub struct Diagnostic {
28 pub name: Option<String>,
29 pub message: String,
30 pub range: TextRange,
31 pub severity: Severity,
32 pub fix: Option<Fix>,
33}
34
35#[derive(Debug)]
36pub struct Fix {
37 pub label: String,
38 pub source_change: SourceChange,
39 /// Allows to trigger the fix only when the caret is in the range given
40 pub fix_trigger_range: TextRange,
41}
42
43impl Fix {
44 fn new(
45 label: impl Into<String>,
46 source_change: SourceChange,
47 fix_trigger_range: TextRange,
48 ) -> Self {
49 let label = label.into();
50 assert!(label.starts_with(char::is_uppercase) && !label.ends_with('.'));
51 Self { label, source_change, fix_trigger_range }
52 }
53}
25 54
26#[derive(Debug, Copy, Clone)] 55#[derive(Debug, Copy, Clone)]
27pub enum Severity { 56pub enum Severity {
diff --git a/crates/ide/src/diagnostics/diagnostics_with_fix.rs b/crates/ide/src/diagnostics/fixes.rs
index 85b46c995..68ae1c239 100644
--- a/crates/ide/src/diagnostics/diagnostics_with_fix.rs
+++ b/crates/ide/src/diagnostics/fixes.rs
@@ -1,7 +1,5 @@
1//! Provides a way to attach fixes to the diagnostics. 1//! Provides a way to attach fixes to the diagnostics.
2//! The same module also has all curret custom fixes for the diagnostics implemented. 2//! The same module also has all curret custom fixes for the diagnostics implemented.
3use crate::Fix;
4use ast::{edit::IndentLevel, make};
5use base_db::FileId; 3use base_db::FileId;
6use hir::{ 4use hir::{
7 db::AstDatabase, 5 db::AstDatabase,
@@ -12,9 +10,15 @@ use ide_db::{
12 source_change::{FileSystemEdit, SourceFileEdit}, 10 source_change::{FileSystemEdit, SourceFileEdit},
13 RootDatabase, 11 RootDatabase,
14}; 12};
15use syntax::{algo, ast, AstNode}; 13use syntax::{
14 algo,
15 ast::{self, edit::IndentLevel, make},
16 AstNode,
17};
16use text_edit::TextEdit; 18use text_edit::TextEdit;
17 19
20use crate::diagnostics::Fix;
21
18/// A [Diagnostic] that potentially has a fix available. 22/// A [Diagnostic] that potentially has a fix available.
19/// 23///
20/// [Diagnostic]: hir::diagnostics::Diagnostic 24/// [Diagnostic]: hir::diagnostics::Diagnostic
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 2a73abba2..f37119e28 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -65,7 +65,7 @@ pub use crate::{
65 completion::{ 65 completion::{
66 CompletionConfig, CompletionItem, CompletionItemKind, CompletionScore, InsertTextFormat, 66 CompletionConfig, CompletionItem, CompletionItemKind, CompletionScore, InsertTextFormat,
67 }, 67 },
68 diagnostics::{DiagnosticsConfig, Severity}, 68 diagnostics::{Diagnostic, DiagnosticsConfig, Fix, Severity},
69 display::NavigationTarget, 69 display::NavigationTarget,
70 expand_macro::ExpandedMacro, 70 expand_macro::ExpandedMacro,
71 file_structure::StructureNode, 71 file_structure::StructureNode,
@@ -99,35 +99,6 @@ pub use text_edit::{Indel, TextEdit};
99 99
100pub type Cancelable<T> = Result<T, Canceled>; 100pub type Cancelable<T> = Result<T, Canceled>;
101 101
102#[derive(Debug)]
103pub struct Diagnostic {
104 pub name: Option<String>,
105 pub message: String,
106 pub range: TextRange,
107 pub severity: Severity,
108 pub fix: Option<Fix>,
109}
110
111#[derive(Debug)]
112pub struct Fix {
113 pub label: String,
114 pub source_change: SourceChange,
115 /// Allows to trigger the fix only when the caret is in the range given
116 pub fix_trigger_range: TextRange,
117}
118
119impl Fix {
120 pub fn new(
121 label: impl Into<String>,
122 source_change: SourceChange,
123 fix_trigger_range: TextRange,
124 ) -> Self {
125 let label = label.into();
126 assert!(label.starts_with(char::is_uppercase) && !label.ends_with('.'));
127 Self { label, source_change, fix_trigger_range }
128 }
129}
130
131/// Info associated with a text range. 102/// Info associated with a text range.
132#[derive(Debug)] 103#[derive(Debug)]
133pub struct RangeInfo<T> { 104pub struct RangeInfo<T> {