Skip to content

Commit 16bbf4a

Browse files
committed
Merge branch 'master' into keyword_completion
# Conflicts: # docs/user/generated_features.adoc
2 parents eeb8b9e + b56ad14 commit 16bbf4a

File tree

175 files changed

+7387
-3882
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+7387
-3882
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ crates/*/target
88
*.iml
99
.vscode/settings.json
1010
*.html
11+
generated_assists.adoc
12+
generated_features.adoc

Cargo.lock

Lines changed: 47 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/ra_assists/src/assist_context.rs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! See `AssistContext`
22
3+
use std::mem;
4+
35
use algo::find_covering_element;
46
use hir::Semantics;
57
use ra_db::{FileId, FileRange};
@@ -170,13 +172,32 @@ impl Assists {
170172

171173
pub(crate) struct AssistBuilder {
172174
edit: TextEditBuilder,
173-
file: FileId,
175+
file_id: FileId,
174176
is_snippet: bool,
177+
edits: Vec<SourceFileEdit>,
175178
}
176179

177180
impl AssistBuilder {
178-
pub(crate) fn new(file: FileId) -> AssistBuilder {
179-
AssistBuilder { edit: TextEditBuilder::default(), file, is_snippet: false }
181+
pub(crate) fn new(file_id: FileId) -> AssistBuilder {
182+
AssistBuilder {
183+
edit: TextEditBuilder::default(),
184+
file_id,
185+
is_snippet: false,
186+
edits: Vec::new(),
187+
}
188+
}
189+
190+
pub(crate) fn edit_file(&mut self, file_id: FileId) {
191+
self.file_id = file_id;
192+
}
193+
194+
fn commit(&mut self) {
195+
let edit = mem::take(&mut self.edit).finish();
196+
if !edit.is_empty() {
197+
let new_edit = SourceFileEdit { file_id: self.file_id, edit };
198+
assert!(!self.edits.iter().any(|it| it.file_id == new_edit.file_id));
199+
self.edits.push(new_edit);
200+
}
180201
}
181202

182203
/// Remove specified `range` of text.
@@ -234,21 +255,15 @@ impl AssistBuilder {
234255
algo::diff(&node, &new).into_text_edit(&mut self.edit)
235256
}
236257

237-
// FIXME: better API
238-
pub(crate) fn set_file(&mut self, assist_file: FileId) {
239-
self.file = assist_file;
240-
}
241-
242258
// FIXME: kill this API
243259
/// Get access to the raw `TextEditBuilder`.
244260
pub(crate) fn text_edit_builder(&mut self) -> &mut TextEditBuilder {
245261
&mut self.edit
246262
}
247263

248-
fn finish(self) -> SourceChange {
249-
let edit = self.edit.finish();
250-
let source_file_edit = SourceFileEdit { file_id: self.file, edit };
251-
let mut res: SourceChange = source_file_edit.into();
264+
fn finish(mut self) -> SourceChange {
265+
self.commit();
266+
let mut res: SourceChange = mem::take(&mut self.edits).into();
252267
if self.is_snippet {
253268
res.is_snippet = true;
254269
}

crates/ra_assists/src/handlers/add_explicit_type.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ struct Test<K, T = u8> {
195195
}
196196
197197
fn main() {
198-
let test<|> = Test { t: 23, k: 33 };
198+
let test<|> = Test { t: 23u8, k: 33 };
199199
}"#,
200200
r#"
201201
struct Test<K, T = u8> {
@@ -204,7 +204,7 @@ struct Test<K, T = u8> {
204204
}
205205
206206
fn main() {
207-
let test: Test<i32> = Test { t: 23, k: 33 };
207+
let test: Test<i32> = Test { t: 23u8, k: 33 };
208208
}"#,
209209
);
210210
}

crates/ra_assists/src/handlers/add_function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub(crate) fn add_function(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
6464
let target = call.syntax().text_range();
6565
acc.add(AssistId("add_function"), "Add function", target, |builder| {
6666
let function_template = function_builder.render();
67-
builder.set_file(function_template.file);
67+
builder.edit_file(function_template.file);
6868
let new_fn = function_template.to_string(ctx.config.snippet_cap);
6969
match ctx.config.snippet_cap {
7070
Some(cap) => builder.insert_snippet(cap, function_template.insert_offset, new_fn),

0 commit comments

Comments
 (0)