Skip to content

Commit f8a0561

Browse files
committed
Align config's API with usage
The config now is mostly immutable, optimize for that.
1 parent 7ae4b8b commit f8a0561

File tree

22 files changed

+164
-162
lines changed

22 files changed

+164
-162
lines changed

crates/assists/src/assist_config.rs

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
//! module, and we use to statically check that we only produce snippet
55
//! assists if we are allowed to.
66
7-
use hir::PrefixKind;
8-
use ide_db::helpers::insert_use::MergeBehavior;
7+
use ide_db::helpers::{insert_use::MergeBehavior, SnippetCap};
98

109
use crate::AssistKind;
1110

@@ -16,35 +15,8 @@ pub struct AssistConfig {
1615
pub insert_use: InsertUseConfig,
1716
}
1817

19-
impl AssistConfig {
20-
pub fn allow_snippets(&mut self, yes: bool) {
21-
self.snippet_cap = if yes { Some(SnippetCap { _private: () }) } else { None }
22-
}
23-
}
24-
25-
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
26-
pub struct SnippetCap {
27-
_private: (),
28-
}
29-
30-
impl Default for AssistConfig {
31-
fn default() -> Self {
32-
AssistConfig {
33-
snippet_cap: Some(SnippetCap { _private: () }),
34-
allowed: None,
35-
insert_use: InsertUseConfig::default(),
36-
}
37-
}
38-
}
39-
4018
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4119
pub struct InsertUseConfig {
4220
pub merge: Option<MergeBehavior>,
43-
pub prefix_kind: PrefixKind,
44-
}
45-
46-
impl Default for InsertUseConfig {
47-
fn default() -> Self {
48-
InsertUseConfig { merge: Some(MergeBehavior::Full), prefix_kind: PrefixKind::Plain }
49-
}
21+
pub prefix_kind: hir::PrefixKind,
5022
}

crates/assists/src/assist_context.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ use std::mem;
44

55
use algo::find_covering_element;
66
use hir::Semantics;
7-
use ide_db::base_db::{AnchoredPathBuf, FileId, FileRange};
7+
use ide_db::{
8+
base_db::{AnchoredPathBuf, FileId, FileRange},
9+
helpers::SnippetCap,
10+
};
811
use ide_db::{
912
label::Label,
1013
source_change::{FileSystemEdit, SourceChange, SourceFileEdit},
@@ -17,10 +20,7 @@ use syntax::{
1720
};
1821
use text_edit::{TextEdit, TextEditBuilder};
1922

20-
use crate::{
21-
assist_config::{AssistConfig, SnippetCap},
22-
Assist, AssistId, AssistKind, GroupLabel,
23-
};
23+
use crate::{assist_config::AssistConfig, Assist, AssistId, AssistKind, GroupLabel};
2424

2525
/// `AssistContext` allows to apply an assist or check if it could be applied.
2626
///

crates/assists/src/handlers/generate_function.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use hir::HirDisplay;
2-
use ide_db::base_db::FileId;
2+
use ide_db::{base_db::FileId, helpers::SnippetCap};
33
use rustc_hash::{FxHashMap, FxHashSet};
44
use syntax::{
55
ast::{
@@ -11,7 +11,6 @@ use syntax::{
1111
};
1212

1313
use crate::{
14-
assist_config::SnippetCap,
1514
utils::{render_snippet, Cursor},
1615
AssistContext, AssistId, AssistKind, Assists,
1716
};

crates/assists/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use syntax::TextRange;
2424

2525
pub(crate) use crate::assist_context::{AssistContext, Assists};
2626

27-
pub use assist_config::AssistConfig;
27+
pub use assist_config::{AssistConfig, InsertUseConfig};
2828

2929
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3030
pub enum AssistKind {

crates/assists/src/tests.rs

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
11
mod generated;
22

33
use hir::Semantics;
4-
use ide_db::base_db::{fixture::WithFixture, FileId, FileRange, SourceDatabaseExt};
5-
use ide_db::source_change::FileSystemEdit;
6-
use ide_db::RootDatabase;
4+
use ide_db::{
5+
base_db::{fixture::WithFixture, FileId, FileRange, SourceDatabaseExt},
6+
helpers::{insert_use::MergeBehavior, SnippetCap},
7+
source_change::FileSystemEdit,
8+
RootDatabase,
9+
};
710
use syntax::TextRange;
811
use test_utils::{assert_eq_text, extract_offset, extract_range};
912

10-
use crate::{handlers::Handler, Assist, AssistConfig, AssistContext, AssistKind, Assists};
13+
use crate::{
14+
handlers::Handler, Assist, AssistConfig, AssistContext, AssistKind, Assists, InsertUseConfig,
15+
};
1116
use stdx::{format_to, trim_indent};
1217

18+
pub(crate) const TEST_CONFIG: AssistConfig = AssistConfig {
19+
snippet_cap: SnippetCap::new(true),
20+
allowed: None,
21+
insert_use: InsertUseConfig {
22+
merge: Some(MergeBehavior::Full),
23+
prefix_kind: hir::PrefixKind::Plain,
24+
},
25+
};
26+
1327
pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) {
1428
RootDatabase::with_single_file(text)
1529
}
@@ -48,14 +62,14 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) {
4862
let before = db.file_text(file_id).to_string();
4963
let frange = FileRange { file_id, range: selection.into() };
5064

51-
let assist = Assist::get(&db, &AssistConfig::default(), true, frange)
65+
let assist = Assist::get(&db, &TEST_CONFIG, true, frange)
5266
.into_iter()
5367
.find(|assist| assist.id.0 == assist_id)
5468
.unwrap_or_else(|| {
5569
panic!(
5670
"\n\nAssist is not applicable: {}\nAvailable assists: {}",
5771
assist_id,
58-
Assist::get(&db, &AssistConfig::default(), false, frange)
72+
Assist::get(&db, &TEST_CONFIG, false, frange)
5973
.into_iter()
6074
.map(|assist| assist.id.0)
6175
.collect::<Vec<_>>()
@@ -89,7 +103,7 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label:
89103
let frange = FileRange { file_id: file_with_caret_id, range: range_or_offset.into() };
90104

91105
let sema = Semantics::new(&db);
92-
let config = AssistConfig::default();
106+
let config = TEST_CONFIG;
93107
let ctx = AssistContext::new(sema, &config, frange);
94108
let mut acc = Assists::new(&ctx, true);
95109
handler(&mut acc, &ctx);
@@ -156,7 +170,7 @@ fn assist_order_field_struct() {
156170
let (before_cursor_pos, before) = extract_offset(before);
157171
let (db, file_id) = with_single_file(&before);
158172
let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) };
159-
let assists = Assist::get(&db, &AssistConfig::default(), false, frange);
173+
let assists = Assist::get(&db, &TEST_CONFIG, false, frange);
160174
let mut assists = assists.iter();
161175

162176
assert_eq!(assists.next().expect("expected assist").label, "Change visibility to pub(crate)");
@@ -176,7 +190,7 @@ fn assist_order_if_expr() {
176190
let (range, before) = extract_range(before);
177191
let (db, file_id) = with_single_file(&before);
178192
let frange = FileRange { file_id, range };
179-
let assists = Assist::get(&db, &AssistConfig::default(), false, frange);
193+
let assists = Assist::get(&db, &TEST_CONFIG, false, frange);
180194
let mut assists = assists.iter();
181195

182196
assert_eq!(assists.next().expect("expected assist").label, "Extract into variable");
@@ -198,7 +212,7 @@ fn assist_filter_works() {
198212
let frange = FileRange { file_id, range };
199213

200214
{
201-
let mut cfg = AssistConfig::default();
215+
let mut cfg = TEST_CONFIG;
202216
cfg.allowed = Some(vec![AssistKind::Refactor]);
203217

204218
let assists = Assist::get(&db, &cfg, false, frange);
@@ -209,7 +223,7 @@ fn assist_filter_works() {
209223
}
210224

211225
{
212-
let mut cfg = AssistConfig::default();
226+
let mut cfg = TEST_CONFIG;
213227
cfg.allowed = Some(vec![AssistKind::RefactorExtract]);
214228
let assists = Assist::get(&db, &cfg, false, frange);
215229
assert_eq!(assists.len(), 1);
@@ -219,7 +233,7 @@ fn assist_filter_works() {
219233
}
220234

221235
{
222-
let mut cfg = AssistConfig::default();
236+
let mut cfg = TEST_CONFIG;
223237
cfg.allowed = Some(vec![AssistKind::QuickFix]);
224238
let assists = Assist::get(&db, &cfg, false, frange);
225239
assert!(assists.is_empty(), "All asserts but quickfixes should be filtered out");

crates/assists/src/utils.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub(crate) mod import_assets;
44
use std::ops;
55

66
use hir::HasSource;
7-
use ide_db::RootDatabase;
7+
use ide_db::{helpers::SnippetCap, RootDatabase};
88
use itertools::Itertools;
99
use syntax::{
1010
ast::edit::AstNodeEdit,
@@ -16,10 +16,7 @@ use syntax::{
1616
SyntaxNode, TextSize, T,
1717
};
1818

19-
use crate::{
20-
assist_config::SnippetCap,
21-
ast_transform::{self, AstTransform, QualifyPaths, SubstituteTypeParams},
22-
};
19+
use crate::ast_transform::{self, AstTransform, QualifyPaths, SubstituteTypeParams};
2320

2421
pub(crate) fn unwrap_trivial_block(block: ast::BlockExpr) -> ast::Expr {
2522
extract_trivial_expression(&block)

crates/completion/src/completions/postfix.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@
22
33
mod format_like;
44

5-
use ide_db::ty_filter::TryEnum;
5+
use ide_db::{helpers::SnippetCap, ty_filter::TryEnum};
66
use syntax::{
77
ast::{self, AstNode, AstToken},
88
SyntaxKind::{BLOCK_EXPR, EXPR_STMT},
99
TextRange, TextSize,
1010
};
1111
use text_edit::TextEdit;
1212

13-
use self::format_like::add_format_like_completions;
1413
use crate::{
15-
config::SnippetCap,
14+
completions::postfix::format_like::add_format_like_completions,
1615
context::CompletionContext,
1716
item::{Builder, CompletionKind},
1817
CompletionItem, CompletionItemKind, Completions,

crates/completion/src/completions/postfix/format_like.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@
1414
// + `logw` -> `log::warn!(...)`
1515
// + `loge` -> `log::error!(...)`
1616

17-
use crate::{
18-
completions::postfix::postfix_snippet, config::SnippetCap, context::CompletionContext,
19-
Completions,
20-
};
17+
use ide_db::helpers::SnippetCap;
2118
use syntax::ast::{self, AstToken};
2219

20+
use crate::{completions::postfix::postfix_snippet, context::CompletionContext, Completions};
21+
2322
/// Mapping ("postfix completion item" => "macro to use")
2423
static KINDS: &[(&str, &str)] = &[
2524
("format", "format!"),

crates/completion/src/completions/snippet.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
//! This file provides snippet completions, like `pd` => `eprintln!(...)`.
22
3+
use ide_db::helpers::SnippetCap;
4+
35
use crate::{
4-
config::SnippetCap, item::Builder, CompletionContext, CompletionItem, CompletionItemKind,
5-
CompletionKind, Completions,
6+
item::Builder, CompletionContext, CompletionItem, CompletionItemKind, CompletionKind,
7+
Completions,
68
};
79

810
fn snippet(ctx: &CompletionContext, cap: SnippetCap, label: &str, snippet: &str) -> Builder {

crates/completion/src/completions/unqualified_path.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -192,23 +192,21 @@ mod tests {
192192
use test_utils::mark;
193193

194194
use crate::{
195-
test_utils::{check_edit, check_edit_with_config, completion_list_with_config},
195+
test_utils::{
196+
check_edit, check_edit_with_config, completion_list_with_config, TEST_CONFIG,
197+
},
196198
CompletionConfig, CompletionKind,
197199
};
198200

199201
fn check(ra_fixture: &str, expect: Expect) {
200-
check_with_config(CompletionConfig::default(), ra_fixture, expect);
202+
check_with_config(TEST_CONFIG, ra_fixture, expect);
201203
}
202204

203205
fn check_with_config(config: CompletionConfig, ra_fixture: &str, expect: Expect) {
204206
let actual = completion_list_with_config(config, ra_fixture, CompletionKind::Reference);
205207
expect.assert_eq(&actual)
206208
}
207209

208-
fn fuzzy_completion_config() -> CompletionConfig {
209-
CompletionConfig::default()
210-
}
211-
212210
#[test]
213211
fn self_fulfilling_completion() {
214212
mark::check!(self_fulfilling_completion);
@@ -832,7 +830,7 @@ impl My<|>
832830
#[test]
833831
fn function_fuzzy_completion() {
834832
check_edit_with_config(
835-
fuzzy_completion_config(),
833+
TEST_CONFIG,
836834
"stdin",
837835
r#"
838836
//- /lib.rs crate:dep
@@ -858,7 +856,7 @@ fn main() {
858856
#[test]
859857
fn macro_fuzzy_completion() {
860858
check_edit_with_config(
861-
fuzzy_completion_config(),
859+
TEST_CONFIG,
862860
"macro_with_curlies!",
863861
r#"
864862
//- /lib.rs crate:dep
@@ -886,7 +884,7 @@ fn main() {
886884
#[test]
887885
fn struct_fuzzy_completion() {
888886
check_edit_with_config(
889-
fuzzy_completion_config(),
887+
TEST_CONFIG,
890888
"ThirdStruct",
891889
r#"
892890
//- /lib.rs crate:dep
@@ -917,7 +915,7 @@ fn main() {
917915
fn fuzzy_completions_come_in_specific_order() {
918916
mark::check!(certain_fuzzy_order_test);
919917
check_with_config(
920-
fuzzy_completion_config(),
918+
TEST_CONFIG,
921919
r#"
922920
//- /lib.rs crate:dep
923921
pub struct FirstStruct;

0 commit comments

Comments
 (0)