Skip to content

Commit f731d91

Browse files
committed
Move Completions structure definition into completions module
1 parent 19c1067 commit f731d91

File tree

9 files changed

+74
-74
lines changed

9 files changed

+74
-74
lines changed

crates/completion/src/completions.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,39 @@ pub(crate) mod postfix;
1111
pub(crate) mod macro_in_item_position;
1212
pub(crate) mod trait_impl;
1313
pub(crate) mod mod_;
14+
15+
use crate::item::{Builder, CompletionItem};
16+
17+
/// Represents an in-progress set of completions being built.
18+
#[derive(Debug, Default)]
19+
pub struct Completions {
20+
buf: Vec<CompletionItem>,
21+
}
22+
23+
impl Completions {
24+
pub fn add(&mut self, item: CompletionItem) {
25+
self.buf.push(item.into())
26+
}
27+
28+
pub fn add_all<I>(&mut self, items: I)
29+
where
30+
I: IntoIterator,
31+
I::Item: Into<CompletionItem>,
32+
{
33+
items.into_iter().for_each(|item| self.add(item.into()))
34+
}
35+
}
36+
37+
impl Into<Vec<CompletionItem>> for Completions {
38+
fn into(self) -> Vec<CompletionItem> {
39+
self.buf
40+
}
41+
}
42+
43+
impl Builder {
44+
/// Convenience method, which allows to add a freshly created completion into accumulator
45+
/// without binding it to the variable.
46+
pub(crate) fn add_to(self, acc: &mut Completions) {
47+
acc.add(self.build())
48+
}
49+
}

crates/completion/src/completions/attribute.rs

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use syntax::{ast, AstNode, SyntaxKind};
99
use crate::{
1010
context::CompletionContext,
1111
generated_lint_completions::{CLIPPY_LINTS, FEATURES},
12-
item::{CompletionItem, CompletionItemKind, CompletionKind, Completions},
12+
item::{CompletionItem, CompletionItemKind, CompletionKind},
13+
Completions,
1314
};
1415

1516
pub(crate) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> {
@@ -60,7 +61,7 @@ fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attr
6061
}
6162

6263
if attribute.kind() == ast::AttrKind::Inner || !attr_completion.prefer_inner {
63-
acc.add(item);
64+
acc.add(item.build());
6465
}
6566
}
6667
}
@@ -152,21 +153,15 @@ fn complete_derive(acc: &mut Completions, ctx: &CompletionContext, derive_input:
152153
label.push_str(", ");
153154
label.push_str(dependency);
154155
}
155-
acc.add(
156-
CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), label)
157-
.kind(CompletionItemKind::Attribute),
158-
);
156+
CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), label)
157+
.kind(CompletionItemKind::Attribute)
158+
.add_to(acc)
159159
}
160160

161161
for custom_derive_name in get_derive_names_in_scope(ctx).difference(&existing_derives) {
162-
acc.add(
163-
CompletionItem::new(
164-
CompletionKind::Attribute,
165-
ctx.source_range(),
166-
custom_derive_name,
167-
)
168-
.kind(CompletionItemKind::Attribute),
169-
);
162+
CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), custom_derive_name)
163+
.kind(CompletionItemKind::Attribute)
164+
.add_to(acc)
170165
}
171166
}
172167
}
@@ -182,15 +177,14 @@ fn complete_lint(
182177
.into_iter()
183178
.filter(|completion| !existing_lints.contains(completion.label))
184179
{
185-
acc.add(
186-
CompletionItem::new(
187-
CompletionKind::Attribute,
188-
ctx.source_range(),
189-
lint_completion.label,
190-
)
191-
.kind(CompletionItemKind::Attribute)
192-
.detail(lint_completion.description),
193-
);
180+
CompletionItem::new(
181+
CompletionKind::Attribute,
182+
ctx.source_range(),
183+
lint_completion.label,
184+
)
185+
.kind(CompletionItemKind::Attribute)
186+
.detail(lint_completion.description)
187+
.add_to(acc)
194188
}
195189
}
196190
}

crates/completion/src/completions/dot.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use hir::{HasVisibility, Type};
44
use rustc_hash::FxHashSet;
55
use test_utils::mark;
66

7-
use crate::{context::CompletionContext, item::Completions};
7+
use crate::{context::CompletionContext, Completions};
88

99
/// Complete dot accesses, i.e. fields or methods.
1010
pub(crate) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {

crates/completion/src/completions/mod_.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rustc_hash::FxHashSet;
77

88
use crate::{CompletionItem, CompletionItemKind};
99

10-
use crate::{context::CompletionContext, item::CompletionKind, item::Completions};
10+
use crate::{context::CompletionContext, item::CompletionKind, Completions};
1111

1212
/// Complete mod declaration, i.e. `mod <|> ;`
1313
pub(crate) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> {
@@ -75,10 +75,9 @@ pub(crate) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op
7575
if mod_under_caret.semicolon_token().is_none() {
7676
label.push(';')
7777
}
78-
acc.add(
79-
CompletionItem::new(CompletionKind::Magic, ctx.source_range(), &label)
80-
.kind(CompletionItemKind::Module),
81-
)
78+
CompletionItem::new(CompletionKind::Magic, ctx.source_range(), &label)
79+
.kind(CompletionItemKind::Module)
80+
.add_to(acc)
8281
});
8382

8483
Some(())

crates/completion/src/completions/postfix.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use self::format_like::add_format_like_completions;
1313
use crate::{
1414
config::SnippetCap,
1515
context::CompletionContext,
16-
item::{Builder, CompletionKind, Completions},
17-
CompletionItem, CompletionItemKind,
16+
item::{Builder, CompletionKind},
17+
CompletionItem, CompletionItemKind, Completions,
1818
};
1919

2020
pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
use crate::{
1818
completions::postfix::postfix_snippet, config::SnippetCap, context::CompletionContext,
19-
item::Completions,
19+
Completions,
2020
};
2121
use syntax::ast::{self, AstToken};
2222

crates/completion/src/item.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,6 @@ pub(crate) struct Builder {
272272
}
273273

274274
impl Builder {
275-
pub(crate) fn add_to(self, acc: &mut Completions) {
276-
acc.add(self.build())
277-
}
278-
279275
pub(crate) fn build(self) -> CompletionItem {
280276
let label = self.label;
281277
let text_edit = match self.text_edit {
@@ -376,28 +372,3 @@ impl<'a> Into<CompletionItem> for Builder {
376372
self.build()
377373
}
378374
}
379-
380-
/// Represents an in-progress set of completions being built.
381-
#[derive(Debug, Default)]
382-
pub struct Completions {
383-
buf: Vec<CompletionItem>,
384-
}
385-
386-
impl Completions {
387-
pub fn add(&mut self, item: impl Into<CompletionItem>) {
388-
self.buf.push(item.into())
389-
}
390-
pub fn add_all<I>(&mut self, items: I)
391-
where
392-
I: IntoIterator,
393-
I::Item: Into<CompletionItem>,
394-
{
395-
items.into_iter().for_each(|item| self.add(item.into()))
396-
}
397-
}
398-
399-
impl Into<Vec<CompletionItem>> for Completions {
400-
fn into(self) -> Vec<CompletionItem> {
401-
self.buf
402-
}
403-
}

crates/completion/src/lib.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ mod completions;
1414
use ide_db::base_db::FilePosition;
1515
use ide_db::RootDatabase;
1616

17-
use crate::{
18-
context::CompletionContext,
19-
item::{CompletionKind, Completions},
20-
};
17+
use crate::{completions::Completions, context::CompletionContext, item::CompletionKind};
2118

2219
pub use crate::{
2320
config::CompletionConfig,

crates/completion/src/presentation.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,17 @@ impl Completions {
5757
let kind = match resolution {
5858
ScopeDef::ModuleDef(Module(..)) => CompletionItemKind::Module,
5959
ScopeDef::ModuleDef(Function(func)) => {
60-
return self.add_function(ctx, *func, Some(local_name));
60+
self.add_function(ctx, *func, Some(local_name));
61+
return;
6162
}
6263
ScopeDef::ModuleDef(Adt(hir::Adt::Struct(_))) => CompletionItemKind::Struct,
6364
// FIXME: add CompletionItemKind::Union
6465
ScopeDef::ModuleDef(Adt(hir::Adt::Union(_))) => CompletionItemKind::Struct,
6566
ScopeDef::ModuleDef(Adt(hir::Adt::Enum(_))) => CompletionItemKind::Enum,
6667

6768
ScopeDef::ModuleDef(EnumVariant(var)) => {
68-
return self.add_enum_variant(ctx, *var, Some(local_name));
69+
self.add_enum_variant(ctx, *var, Some(local_name));
70+
return;
6971
}
7072
ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::Const,
7173
ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::Static,
@@ -77,13 +79,14 @@ impl Completions {
7779
// (does this need its own kind?)
7880
ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => CompletionItemKind::TypeParam,
7981
ScopeDef::MacroDef(mac) => {
80-
return self.add_macro(ctx, Some(local_name), *mac);
82+
self.add_macro(ctx, Some(local_name), *mac);
83+
return;
8184
}
8285
ScopeDef::Unknown => {
83-
return self.add(
84-
CompletionItem::new(CompletionKind::Reference, ctx.source_range(), local_name)
85-
.kind(CompletionItemKind::UnresolvedReference),
86-
);
86+
CompletionItem::new(CompletionKind::Reference, ctx.source_range(), local_name)
87+
.kind(CompletionItemKind::UnresolvedReference)
88+
.add_to(self);
89+
return;
8790
}
8891
};
8992

@@ -189,7 +192,7 @@ impl Completions {
189192
}
190193
};
191194

192-
self.add(builder);
195+
self.add(builder.build());
193196
}
194197

195198
pub(crate) fn add_function(
@@ -241,7 +244,7 @@ impl Completions {
241244

242245
builder = builder.add_call_parens(ctx, name, Params::Named(params));
243246

244-
self.add(builder)
247+
self.add(builder.build())
245248
}
246249

247250
pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) {

0 commit comments

Comments
 (0)