Skip to content

Commit 1252107

Browse files
bors[bot]matklad
andauthored
Merge #4345
4345: Refactor assists a bit r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents efd8e34 + 020ca66 commit 1252107

File tree

6 files changed

+32
-47
lines changed

6 files changed

+32
-47
lines changed

crates/ra_assists/src/assist_ctx.rs

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ra_syntax::{
1313
};
1414
use ra_text_edit::TextEditBuilder;
1515

16-
use crate::{AssistFile, AssistId, AssistLabel, GroupLabel, ResolvedAssist};
16+
use crate::{AssistId, AssistLabel, GroupLabel, ResolvedAssist};
1717

1818
#[derive(Clone, Debug)]
1919
pub(crate) struct Assist(pub(crate) Vec<AssistInfo>);
@@ -22,16 +22,16 @@ pub(crate) struct Assist(pub(crate) Vec<AssistInfo>);
2222
pub(crate) struct AssistInfo {
2323
pub(crate) label: AssistLabel,
2424
pub(crate) group_label: Option<GroupLabel>,
25-
pub(crate) action: Option<SourceChange>,
25+
pub(crate) source_change: Option<SourceChange>,
2626
}
2727

2828
impl AssistInfo {
2929
fn new(label: AssistLabel) -> AssistInfo {
30-
AssistInfo { label, group_label: None, action: None }
30+
AssistInfo { label, group_label: None, source_change: None }
3131
}
3232

33-
fn resolved(self, action: SourceChange) -> AssistInfo {
34-
AssistInfo { action: Some(action), ..self }
33+
fn resolved(self, source_change: SourceChange) -> AssistInfo {
34+
AssistInfo { source_change: Some(source_change), ..self }
3535
}
3636

3737
fn with_group(self, group_label: GroupLabel) -> AssistInfo {
@@ -40,7 +40,7 @@ impl AssistInfo {
4040

4141
pub(crate) fn into_resolved(self) -> Option<ResolvedAssist> {
4242
let label = self.label;
43-
self.action.map(|action| ResolvedAssist { label, action })
43+
self.source_change.map(|source_change| ResolvedAssist { label, source_change })
4444
}
4545
}
4646

@@ -104,12 +104,12 @@ impl<'a> AssistCtx<'a> {
104104
let change_label = label.label.clone();
105105
let mut info = AssistInfo::new(label);
106106
if self.should_compute_edit {
107-
let action = {
107+
let source_change = {
108108
let mut edit = ActionBuilder::new(&self);
109109
f(&mut edit);
110-
edit.build(change_label, self.frange.file_id)
110+
edit.build(change_label)
111111
};
112-
info = info.resolved(action)
112+
info = info.resolved(source_change)
113113
};
114114

115115
Some(Assist(vec![info]))
@@ -163,12 +163,12 @@ impl<'a> AssistGroup<'a> {
163163
let change_label = label.label.clone();
164164
let mut info = AssistInfo::new(label).with_group(self.group.clone());
165165
if self.ctx.should_compute_edit {
166-
let action = {
166+
let source_change = {
167167
let mut edit = ActionBuilder::new(&self.ctx);
168168
f(&mut edit);
169-
edit.build(change_label, self.ctx.frange.file_id)
169+
edit.build(change_label)
170170
};
171-
info = info.resolved(action)
171+
info = info.resolved(source_change)
172172
};
173173

174174
self.assists.push(info)
@@ -186,7 +186,7 @@ impl<'a> AssistGroup<'a> {
186186
pub(crate) struct ActionBuilder<'a, 'b> {
187187
edit: TextEditBuilder,
188188
cursor_position: Option<TextSize>,
189-
file: AssistFile,
189+
file: FileId,
190190
ctx: &'a AssistCtx<'b>,
191191
}
192192

@@ -195,7 +195,7 @@ impl<'a, 'b> ActionBuilder<'a, 'b> {
195195
Self {
196196
edit: TextEditBuilder::default(),
197197
cursor_position: None,
198-
file: AssistFile::default(),
198+
file: ctx.frange.file_id,
199199
ctx,
200200
}
201201
}
@@ -254,20 +254,16 @@ impl<'a, 'b> ActionBuilder<'a, 'b> {
254254
algo::diff(&node, &new).into_text_edit(&mut self.edit)
255255
}
256256

257-
pub(crate) fn set_file(&mut self, assist_file: AssistFile) {
258-
self.file = assist_file
257+
pub(crate) fn set_file(&mut self, assist_file: FileId) {
258+
self.file = assist_file;
259259
}
260260

261-
fn build(self, change_label: String, current_file: FileId) -> SourceChange {
261+
fn build(self, change_label: String) -> SourceChange {
262262
let edit = self.edit.finish();
263263
if edit.is_empty() && self.cursor_position.is_none() {
264264
panic!("Only call `add_assist` if the assist can be applied")
265265
}
266-
let file = match self.file {
267-
AssistFile::CurrentFile => current_file,
268-
AssistFile::TargetFile(it) => it,
269-
};
270266
SingleFileChange { label: change_label, edit, cursor_position: self.cursor_position }
271-
.into_source_change(file)
267+
.into_source_change(self.file)
272268
}
273269
}

crates/ra_assists/src/handlers/add_function.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ use ra_syntax::{
33
SyntaxKind, SyntaxNode, TextSize,
44
};
55

6-
use crate::{Assist, AssistCtx, AssistFile, AssistId};
6+
use crate::{Assist, AssistCtx, AssistId};
77
use ast::{edit::IndentLevel, ArgListOwner, ModuleItemOwner};
88
use hir::HirDisplay;
9+
use ra_db::FileId;
910
use rustc_hash::{FxHashMap, FxHashSet};
1011

1112
// Assist: add_function
@@ -70,15 +71,15 @@ struct FunctionTemplate {
7071
insert_offset: TextSize,
7172
cursor_offset: TextSize,
7273
fn_def: ast::SourceFile,
73-
file: AssistFile,
74+
file: FileId,
7475
}
7576

7677
struct FunctionBuilder {
7778
target: GeneratedFunctionTarget,
7879
fn_name: ast::Name,
7980
type_params: Option<ast::TypeParamList>,
8081
params: ast::ParamList,
81-
file: AssistFile,
82+
file: FileId,
8283
needs_pub: bool,
8384
}
8485

@@ -92,7 +93,7 @@ impl FunctionBuilder {
9293
target_module: Option<hir::InFile<hir::ModuleSource>>,
9394
) -> Option<Self> {
9495
let needs_pub = target_module.is_some();
95-
let mut file = AssistFile::default();
96+
let mut file = ctx.frange.file_id;
9697
let target = if let Some(target_module) = target_module {
9798
let (in_file, target) = next_space_for_fn_in_module(ctx.sema.db, target_module)?;
9899
file = in_file;
@@ -253,9 +254,8 @@ fn next_space_for_fn_after_call_site(expr: &ast::CallExpr) -> Option<GeneratedFu
253254
fn next_space_for_fn_in_module(
254255
db: &dyn hir::db::AstDatabase,
255256
module: hir::InFile<hir::ModuleSource>,
256-
) -> Option<(AssistFile, GeneratedFunctionTarget)> {
257+
) -> Option<(FileId, GeneratedFunctionTarget)> {
257258
let file = module.file_id.original_file(db);
258-
let assist_file = AssistFile::TargetFile(file);
259259
let assist_item = match module.value {
260260
hir::ModuleSource::SourceFile(it) => {
261261
if let Some(last_item) = it.items().last() {
@@ -272,7 +272,7 @@ fn next_space_for_fn_in_module(
272272
}
273273
}
274274
};
275-
Some((assist_file, assist_item))
275+
Some((file, assist_item))
276276
}
277277

278278
#[cfg(test)]

crates/ra_assists/src/lib.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub mod utils;
1818
pub mod ast_transform;
1919

2020
use hir::Semantics;
21-
use ra_db::{FileId, FileRange};
21+
use ra_db::FileRange;
2222
use ra_ide_db::{source_change::SourceChange, RootDatabase};
2323
use ra_syntax::TextRange;
2424

@@ -59,19 +59,7 @@ impl AssistLabel {
5959
#[derive(Debug, Clone)]
6060
pub struct ResolvedAssist {
6161
pub label: AssistLabel,
62-
pub action: SourceChange,
63-
}
64-
65-
#[derive(Debug, Clone, Copy)]
66-
enum AssistFile {
67-
CurrentFile,
68-
TargetFile(FileId),
69-
}
70-
71-
impl Default for AssistFile {
72-
fn default() -> Self {
73-
Self::CurrentFile
74-
}
62+
pub source_change: SourceChange,
7563
}
7664

7765
/// Return all the assists applicable at the given position.

crates/ra_assists/src/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) {
5757
});
5858

5959
let actual = {
60-
let change = assist.action.source_file_edits.pop().unwrap();
60+
let change = assist.source_change.source_file_edits.pop().unwrap();
6161
let mut actual = before.clone();
6262
change.edit.apply(&mut actual);
6363
actual
@@ -94,7 +94,7 @@ fn check(assist: Handler, before: &str, expected: ExpectedResult) {
9494

9595
match (assist(assist_ctx), expected) {
9696
(Some(assist), ExpectedResult::After(after)) => {
97-
let mut action = assist.0[0].action.clone().unwrap();
97+
let mut action = assist.0[0].source_change.clone().unwrap();
9898
let change = action.source_file_edits.pop().unwrap();
9999

100100
let mut actual = db.file_text(change.file_id).as_ref().to_owned();

crates/ra_ide/src/completion/completion_item.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
33
use std::fmt;
44

5-
use super::completion_config::SnippetCap;
65
use hir::Documentation;
76
use ra_syntax::TextRange;
87
use ra_text_edit::TextEdit;
98

9+
use crate::completion::completion_config::SnippetCap;
10+
1011
/// `CompletionItem` describes a single completion variant in the editor pop-up.
1112
/// It is basically a POD with various properties. To construct a
1213
/// `CompletionItem`, use `new` method and the `Builder` struct.

crates/ra_ide/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ impl Analysis {
478478
id: assist.label.id,
479479
label: assist.label.label,
480480
group_label: assist.label.group.map(|it| it.0),
481-
source_change: assist.action,
481+
source_change: assist.source_change,
482482
})
483483
.collect()
484484
})

0 commit comments

Comments
 (0)