diff options
author | Aleksey Kladov <[email protected]> | 2020-05-06 10:31:26 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-05-06 10:32:34 +0100 |
commit | 3850b1c0860a075f1fd569577c2a2fecd1fc2f0c (patch) | |
tree | fd9a78d80ae77f1fb706ba48bff0195be24bf5d6 /crates/ra_ide | |
parent | beb35c3ecb4aa5139571aba70f7364d135302775 (diff) |
Lift SourceChange to the ra_ide_db
Diffstat (limited to 'crates/ra_ide')
-rw-r--r-- | crates/ra_ide/src/lib.rs | 3 | ||||
-rw-r--r-- | crates/ra_ide/src/source_change.rs | 121 | ||||
-rw-r--r-- | crates/ra_ide/src/ssr.rs | 14 | ||||
-rw-r--r-- | crates/ra_ide/src/typing.rs | 5 |
4 files changed, 11 insertions, 132 deletions
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index 12c005f06..4ed02f60e 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs | |||
@@ -16,7 +16,6 @@ macro_rules! eprintln { | |||
16 | } | 16 | } |
17 | 17 | ||
18 | pub mod mock_analysis; | 18 | pub mod mock_analysis; |
19 | mod source_change; | ||
20 | 19 | ||
21 | mod prime_caches; | 20 | mod prime_caches; |
22 | mod status; | 21 | mod status; |
@@ -78,7 +77,6 @@ pub use crate::{ | |||
78 | inlay_hints::{InlayHint, InlayHintsConfig, InlayKind}, | 77 | inlay_hints::{InlayHint, InlayHintsConfig, InlayKind}, |
79 | references::{Declaration, Reference, ReferenceAccess, ReferenceKind, ReferenceSearchResult}, | 78 | references::{Declaration, Reference, ReferenceAccess, ReferenceKind, ReferenceSearchResult}, |
80 | runnables::{Runnable, RunnableKind, TestId}, | 79 | runnables::{Runnable, RunnableKind, TestId}, |
81 | source_change::{FileSystemEdit, SourceChange, SourceFileEdit}, | ||
82 | ssr::SsrError, | 80 | ssr::SsrError, |
83 | syntax_highlighting::{ | 81 | syntax_highlighting::{ |
84 | Highlight, HighlightModifier, HighlightModifiers, HighlightTag, HighlightedRange, | 82 | Highlight, HighlightModifier, HighlightModifiers, HighlightTag, HighlightedRange, |
@@ -94,6 +92,7 @@ pub use ra_ide_db::{ | |||
94 | line_index::{LineCol, LineIndex}, | 92 | line_index::{LineCol, LineIndex}, |
95 | line_index_utils::translate_offset_with_edit, | 93 | line_index_utils::translate_offset_with_edit, |
96 | search::SearchScope, | 94 | search::SearchScope, |
95 | source_change::{FileSystemEdit, SourceChange, SourceFileEdit}, | ||
97 | symbol_index::Query, | 96 | symbol_index::Query, |
98 | RootDatabase, | 97 | RootDatabase, |
99 | }; | 98 | }; |
diff --git a/crates/ra_ide/src/source_change.rs b/crates/ra_ide/src/source_change.rs deleted file mode 100644 index 10afd7825..000000000 --- a/crates/ra_ide/src/source_change.rs +++ /dev/null | |||
@@ -1,121 +0,0 @@ | |||
1 | //! This modules defines type to represent changes to the source code, that flow | ||
2 | //! from the server to the client. | ||
3 | //! | ||
4 | //! It can be viewed as a dual for `AnalysisChange`. | ||
5 | |||
6 | use ra_db::RelativePathBuf; | ||
7 | use ra_text_edit::TextEdit; | ||
8 | |||
9 | use crate::{FileId, FilePosition, SourceRootId, TextSize}; | ||
10 | |||
11 | #[derive(Debug)] | ||
12 | pub struct SourceChange { | ||
13 | pub label: String, | ||
14 | pub source_file_edits: Vec<SourceFileEdit>, | ||
15 | pub file_system_edits: Vec<FileSystemEdit>, | ||
16 | pub cursor_position: Option<FilePosition>, | ||
17 | } | ||
18 | |||
19 | impl SourceChange { | ||
20 | /// Creates a new SourceChange with the given label | ||
21 | /// from the edits. | ||
22 | pub(crate) fn from_edits<L: Into<String>>( | ||
23 | label: L, | ||
24 | source_file_edits: Vec<SourceFileEdit>, | ||
25 | file_system_edits: Vec<FileSystemEdit>, | ||
26 | ) -> Self { | ||
27 | SourceChange { | ||
28 | label: label.into(), | ||
29 | source_file_edits, | ||
30 | file_system_edits, | ||
31 | cursor_position: None, | ||
32 | } | ||
33 | } | ||
34 | |||
35 | /// Creates a new SourceChange with the given label, | ||
36 | /// containing only the given `SourceFileEdits`. | ||
37 | pub(crate) fn source_file_edits<L: Into<String>>(label: L, edits: Vec<SourceFileEdit>) -> Self { | ||
38 | let label = label.into(); | ||
39 | assert!(label.starts_with(char::is_uppercase)); | ||
40 | SourceChange { | ||
41 | label: label, | ||
42 | source_file_edits: edits, | ||
43 | file_system_edits: vec![], | ||
44 | cursor_position: None, | ||
45 | } | ||
46 | } | ||
47 | |||
48 | /// Creates a new SourceChange with the given label, | ||
49 | /// containing only the given `FileSystemEdits`. | ||
50 | pub(crate) fn file_system_edits<L: Into<String>>(label: L, edits: Vec<FileSystemEdit>) -> Self { | ||
51 | SourceChange { | ||
52 | label: label.into(), | ||
53 | source_file_edits: vec![], | ||
54 | file_system_edits: edits, | ||
55 | cursor_position: None, | ||
56 | } | ||
57 | } | ||
58 | |||
59 | /// Creates a new SourceChange with the given label, | ||
60 | /// containing only a single `SourceFileEdit`. | ||
61 | pub(crate) fn source_file_edit<L: Into<String>>(label: L, edit: SourceFileEdit) -> Self { | ||
62 | SourceChange::source_file_edits(label, vec![edit]) | ||
63 | } | ||
64 | |||
65 | /// Creates a new SourceChange with the given label | ||
66 | /// from the given `FileId` and `TextEdit` | ||
67 | pub(crate) fn source_file_edit_from<L: Into<String>>( | ||
68 | label: L, | ||
69 | file_id: FileId, | ||
70 | edit: TextEdit, | ||
71 | ) -> Self { | ||
72 | SourceChange::source_file_edit(label, SourceFileEdit { file_id, edit }) | ||
73 | } | ||
74 | |||
75 | /// Creates a new SourceChange with the given label | ||
76 | /// from the given `FileId` and `TextEdit` | ||
77 | pub(crate) fn file_system_edit<L: Into<String>>(label: L, edit: FileSystemEdit) -> Self { | ||
78 | SourceChange::file_system_edits(label, vec![edit]) | ||
79 | } | ||
80 | |||
81 | /// Sets the cursor position to the given `FilePosition` | ||
82 | pub(crate) fn with_cursor(mut self, cursor_position: FilePosition) -> Self { | ||
83 | self.cursor_position = Some(cursor_position); | ||
84 | self | ||
85 | } | ||
86 | |||
87 | /// Sets the cursor position to the given `FilePosition` | ||
88 | pub(crate) fn with_cursor_opt(mut self, cursor_position: Option<FilePosition>) -> Self { | ||
89 | self.cursor_position = cursor_position; | ||
90 | self | ||
91 | } | ||
92 | } | ||
93 | |||
94 | #[derive(Debug)] | ||
95 | pub struct SourceFileEdit { | ||
96 | pub file_id: FileId, | ||
97 | pub edit: TextEdit, | ||
98 | } | ||
99 | |||
100 | #[derive(Debug)] | ||
101 | pub enum FileSystemEdit { | ||
102 | CreateFile { source_root: SourceRootId, path: RelativePathBuf }, | ||
103 | MoveFile { src: FileId, dst_source_root: SourceRootId, dst_path: RelativePathBuf }, | ||
104 | } | ||
105 | |||
106 | pub(crate) struct SingleFileChange { | ||
107 | pub label: String, | ||
108 | pub edit: TextEdit, | ||
109 | pub cursor_position: Option<TextSize>, | ||
110 | } | ||
111 | |||
112 | impl SingleFileChange { | ||
113 | pub(crate) fn into_source_change(self, file_id: FileId) -> SourceChange { | ||
114 | SourceChange { | ||
115 | label: self.label, | ||
116 | source_file_edits: vec![SourceFileEdit { file_id, edit: self.edit }], | ||
117 | file_system_edits: Vec::new(), | ||
118 | cursor_position: self.cursor_position.map(|offset| FilePosition { file_id, offset }), | ||
119 | } | ||
120 | } | ||
121 | } | ||
diff --git a/crates/ra_ide/src/ssr.rs b/crates/ra_ide/src/ssr.rs index 8bf52d0fa..1873d1d0d 100644 --- a/crates/ra_ide/src/ssr.rs +++ b/crates/ra_ide/src/ssr.rs | |||
@@ -1,18 +1,18 @@ | |||
1 | //! structural search replace | 1 | //! structural search replace |
2 | 2 | ||
3 | use crate::source_change::SourceFileEdit; | 3 | use std::{collections::HashMap, iter::once, str::FromStr}; |
4 | |||
4 | use ra_db::{SourceDatabase, SourceDatabaseExt}; | 5 | use ra_db::{SourceDatabase, SourceDatabaseExt}; |
5 | use ra_ide_db::symbol_index::SymbolsDatabase; | 6 | use ra_ide_db::{symbol_index::SymbolsDatabase, RootDatabase}; |
6 | use ra_ide_db::RootDatabase; | ||
7 | use ra_syntax::ast::make::try_expr_from_text; | ||
8 | use ra_syntax::ast::{ | 7 | use ra_syntax::ast::{ |
9 | ArgList, AstToken, CallExpr, Comment, Expr, MethodCallExpr, RecordField, RecordLit, | 8 | make::try_expr_from_text, ArgList, AstToken, CallExpr, Comment, Expr, MethodCallExpr, |
9 | RecordField, RecordLit, | ||
10 | }; | 10 | }; |
11 | use ra_syntax::{AstNode, SyntaxElement, SyntaxKind, SyntaxNode}; | 11 | use ra_syntax::{AstNode, SyntaxElement, SyntaxKind, SyntaxNode}; |
12 | use ra_text_edit::{TextEdit, TextEditBuilder}; | 12 | use ra_text_edit::{TextEdit, TextEditBuilder}; |
13 | use rustc_hash::FxHashMap; | 13 | use rustc_hash::FxHashMap; |
14 | use std::collections::HashMap; | 14 | |
15 | use std::{iter::once, str::FromStr}; | 15 | use crate::SourceFileEdit; |
16 | 16 | ||
17 | #[derive(Debug, PartialEq)] | 17 | #[derive(Debug, PartialEq)] |
18 | pub struct SsrError(String); | 18 | pub struct SsrError(String); |
diff --git a/crates/ra_ide/src/typing.rs b/crates/ra_ide/src/typing.rs index a03da4693..6f04f0be4 100644 --- a/crates/ra_ide/src/typing.rs +++ b/crates/ra_ide/src/typing.rs | |||
@@ -17,15 +17,16 @@ mod on_enter; | |||
17 | 17 | ||
18 | use ra_db::{FilePosition, SourceDatabase}; | 18 | use ra_db::{FilePosition, SourceDatabase}; |
19 | use ra_fmt::leading_indent; | 19 | use ra_fmt::leading_indent; |
20 | use ra_ide_db::RootDatabase; | 20 | use ra_ide_db::{source_change::SingleFileChange, RootDatabase}; |
21 | use ra_syntax::{ | 21 | use ra_syntax::{ |
22 | algo::find_node_at_offset, | 22 | algo::find_node_at_offset, |
23 | ast::{self, AstToken}, | 23 | ast::{self, AstToken}, |
24 | AstNode, SourceFile, TextRange, TextSize, | 24 | AstNode, SourceFile, TextRange, TextSize, |
25 | }; | 25 | }; |
26 | |||
26 | use ra_text_edit::TextEdit; | 27 | use ra_text_edit::TextEdit; |
27 | 28 | ||
28 | use crate::{source_change::SingleFileChange, SourceChange}; | 29 | use crate::SourceChange; |
29 | 30 | ||
30 | pub(crate) use on_enter::on_enter; | 31 | pub(crate) use on_enter::on_enter; |
31 | 32 | ||