Skip to content

Commit ef70076

Browse files
committed
Cleanup
1 parent d583e34 commit ef70076

File tree

4 files changed

+154
-255
lines changed

4 files changed

+154
-255
lines changed

crates/ra_ide/src/completion/complete_keyword.rs

Lines changed: 99 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -36,184 +36,98 @@ pub(super) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC
3636
}
3737
}
3838

39-
fn keyword(ctx: &CompletionContext, kw: &str, snippet: &str) -> CompletionItem {
40-
let res = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw)
41-
.kind(CompletionItemKind::Keyword);
42-
43-
match ctx.config.snippet_cap {
44-
Some(cap) => res.insert_snippet(cap, snippet),
45-
_ => res.insert_text(if snippet.contains('$') { kw } else { snippet }),
46-
}
47-
.build()
48-
}
49-
50-
fn add_keyword(
51-
ctx: &CompletionContext,
52-
acc: &mut Completions,
53-
kw: &str,
54-
snippet: &str,
55-
should_add: bool,
56-
) {
57-
if should_add {
58-
acc.add(keyword(ctx, kw, snippet));
59-
}
60-
}
61-
6239
pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionContext) {
6340
let has_trait_or_impl_parent = ctx.has_impl_parent || ctx.has_trait_parent;
6441
if ctx.trait_as_prev_sibling || ctx.impl_as_prev_sibling {
65-
add_keyword(ctx, acc, "where", "where ", true);
42+
add_keyword(ctx, acc, "where", "where ");
6643
return;
6744
}
6845
if ctx.unsafe_is_prev {
69-
add_keyword(
70-
ctx,
71-
acc,
72-
"fn",
73-
"fn $0() {}",
74-
ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent,
75-
);
76-
add_keyword(
77-
ctx,
78-
acc,
79-
"trait",
80-
"trait $0 {}",
81-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
82-
|| ctx.block_expr_parent,
83-
);
84-
add_keyword(
85-
ctx,
86-
acc,
87-
"impl",
88-
"impl $0 {}",
89-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
90-
|| ctx.block_expr_parent,
91-
);
46+
if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent {
47+
add_keyword(ctx, acc, "fn", "fn $0() {}")
48+
}
49+
50+
if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
51+
|| ctx.block_expr_parent
52+
{
53+
add_keyword(ctx, acc, "trait", "trait $0 {}");
54+
add_keyword(ctx, acc, "impl", "impl $0 {}");
55+
}
56+
9257
return;
9358
}
94-
add_keyword(
95-
ctx,
96-
acc,
97-
"fn",
98-
"fn $0() {}",
99-
ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent,
100-
);
101-
add_keyword(
102-
ctx,
103-
acc,
104-
"use",
105-
"use ",
106-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
107-
|| ctx.block_expr_parent,
108-
);
109-
add_keyword(
110-
ctx,
111-
acc,
112-
"impl",
113-
"impl $0 {}",
114-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
115-
|| ctx.block_expr_parent,
116-
);
117-
add_keyword(
118-
ctx,
119-
acc,
120-
"trait",
121-
"trait $0 {}",
122-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
123-
|| ctx.block_expr_parent,
124-
);
125-
add_keyword(
126-
ctx,
127-
acc,
128-
"enum",
129-
"enum $0 {}",
130-
ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
131-
);
132-
add_keyword(
133-
ctx,
134-
acc,
135-
"struct",
136-
"struct $0 {}",
137-
ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
138-
);
139-
add_keyword(
140-
ctx,
141-
acc,
142-
"union",
143-
"union $0 {}",
144-
ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
145-
);
146-
add_keyword(ctx, acc, "match", "match $0 {}", ctx.block_expr_parent || ctx.is_match_arm);
147-
add_keyword(ctx, acc, "loop", "loop {$0}", ctx.block_expr_parent || ctx.is_match_arm);
148-
add_keyword(ctx, acc, "while", "while $0 {}", ctx.block_expr_parent);
149-
add_keyword(ctx, acc, "let", "let ", ctx.if_is_prev || ctx.block_expr_parent);
150-
add_keyword(ctx, acc, "if", "if ", ctx.if_is_prev || ctx.block_expr_parent || ctx.is_match_arm);
151-
add_keyword(
152-
ctx,
153-
acc,
154-
"if let",
155-
"if let ",
156-
ctx.if_is_prev || ctx.block_expr_parent || ctx.is_match_arm,
157-
);
158-
add_keyword(ctx, acc, "else", "else {$0}", ctx.after_if);
159-
add_keyword(ctx, acc, "else if", "else if $0 {}", ctx.after_if);
160-
add_keyword(
161-
ctx,
162-
acc,
163-
"mod",
164-
"mod $0 {}",
165-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
166-
|| ctx.block_expr_parent,
167-
);
168-
add_keyword(ctx, acc, "mut", "mut ", ctx.bind_pat_parent || ctx.ref_pat_parent);
169-
add_keyword(
170-
ctx,
171-
acc,
172-
"const",
173-
"const ",
174-
ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent,
175-
);
176-
add_keyword(
177-
ctx,
178-
acc,
179-
"type",
180-
"type ",
181-
ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent,
182-
);
183-
add_keyword(
184-
ctx,
185-
acc,
186-
"static",
187-
"static ",
188-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
189-
|| ctx.block_expr_parent,
190-
);
191-
add_keyword(
192-
ctx,
193-
acc,
194-
"extern",
195-
"extern ",
196-
(ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
197-
|| ctx.block_expr_parent,
198-
);
199-
add_keyword(
200-
ctx,
201-
acc,
202-
"unsafe",
203-
"unsafe ",
204-
ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent || ctx.is_match_arm,
205-
);
206-
add_keyword(ctx, acc, "continue", "continue;", ctx.in_loop_body && ctx.can_be_stmt);
207-
add_keyword(ctx, acc, "break", "break;", ctx.in_loop_body && ctx.can_be_stmt);
208-
add_keyword(ctx, acc, "continue", "continue", ctx.in_loop_body && !ctx.can_be_stmt);
209-
add_keyword(ctx, acc, "break", "break", ctx.in_loop_body && !ctx.can_be_stmt);
210-
add_keyword(
211-
ctx,
212-
acc,
213-
"pub",
214-
"pub ",
215-
ctx.has_item_list_or_source_file_parent && !ctx.has_trait_parent,
216-
);
59+
if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent {
60+
add_keyword(ctx, acc, "fn", "fn $0() {}");
61+
}
62+
if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
63+
|| ctx.block_expr_parent
64+
{
65+
add_keyword(ctx, acc, "use", "use ");
66+
add_keyword(ctx, acc, "impl", "impl $0 {}");
67+
add_keyword(ctx, acc, "trait", "trait $0 {}");
68+
}
69+
70+
if ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent {
71+
add_keyword(ctx, acc, "enum", "enum $0 {}");
72+
add_keyword(ctx, acc, "struct", "struct $0 {}");
73+
add_keyword(ctx, acc, "union", "union $0 {}");
74+
}
75+
76+
if ctx.block_expr_parent || ctx.is_match_arm {
77+
add_keyword(ctx, acc, "match", "match $0 {}");
78+
add_keyword(ctx, acc, "loop", "loop {$0}");
79+
}
80+
if ctx.block_expr_parent {
81+
add_keyword(ctx, acc, "while", "while $0 {}");
82+
}
83+
if ctx.if_is_prev || ctx.block_expr_parent {
84+
add_keyword(ctx, acc, "let", "let ");
85+
}
86+
if ctx.if_is_prev || ctx.block_expr_parent || ctx.is_match_arm {
87+
add_keyword(ctx, acc, "if", "if ");
88+
add_keyword(ctx, acc, "if let", "if let ");
89+
}
90+
if ctx.after_if {
91+
add_keyword(ctx, acc, "else", "else {$0}");
92+
add_keyword(ctx, acc, "else if", "else if $0 {}");
93+
}
94+
if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
95+
|| ctx.block_expr_parent
96+
{
97+
add_keyword(ctx, acc, "mod", "mod $0 {}");
98+
}
99+
if ctx.bind_pat_parent || ctx.ref_pat_parent {
100+
add_keyword(ctx, acc, "mut", "mut ");
101+
}
102+
if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent {
103+
add_keyword(ctx, acc, "const", "const ");
104+
add_keyword(ctx, acc, "type", "type ");
105+
}
106+
if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
107+
|| ctx.block_expr_parent
108+
{
109+
add_keyword(ctx, acc, "static", "static ");
110+
};
111+
if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
112+
|| ctx.block_expr_parent
113+
{
114+
add_keyword(ctx, acc, "extern", "extern ");
115+
}
116+
if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent || ctx.is_match_arm {
117+
add_keyword(ctx, acc, "unsafe", "unsafe ");
118+
}
119+
if ctx.in_loop_body {
120+
if ctx.can_be_stmt {
121+
add_keyword(ctx, acc, "continue", "continue;");
122+
add_keyword(ctx, acc, "break", "break;");
123+
} else {
124+
add_keyword(ctx, acc, "continue", "continue");
125+
add_keyword(ctx, acc, "break", "break");
126+
}
127+
}
128+
if ctx.has_item_list_or_source_file_parent && !ctx.has_trait_parent {
129+
add_keyword(ctx, acc, "pub", "pub ")
130+
}
217131

218132
if !ctx.is_trivial_path {
219133
return;
@@ -225,6 +139,21 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
225139
acc.add_all(complete_return(ctx, &fn_def, ctx.can_be_stmt));
226140
}
227141

142+
fn keyword(ctx: &CompletionContext, kw: &str, snippet: &str) -> CompletionItem {
143+
let res = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw)
144+
.kind(CompletionItemKind::Keyword);
145+
146+
match ctx.config.snippet_cap {
147+
Some(cap) => res.insert_snippet(cap, snippet),
148+
_ => res.insert_text(if snippet.contains('$') { kw } else { snippet }),
149+
}
150+
.build()
151+
}
152+
153+
fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet: &str) {
154+
acc.add(keyword(ctx, kw, snippet));
155+
}
156+
228157
fn complete_return(
229158
ctx: &CompletionContext,
230159
fn_def: &ast::FnDef,

crates/ra_ide/src/completion/completion_item.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,9 @@ pub enum CompletionItemKind {
126126
}
127127

128128
impl CompletionItemKind {
129-
pub fn tag(&self) -> String {
130-
let tag = match self {
129+
#[cfg(test)]
130+
pub(crate) fn tag(&self) -> &'static str {
131+
match self {
131132
CompletionItemKind::Snippet => "sn",
132133
CompletionItemKind::Keyword => "kw",
133134
CompletionItemKind::Module => "md",
@@ -146,8 +147,7 @@ impl CompletionItemKind {
146147
CompletionItemKind::TypeParam => "tp",
147148
CompletionItemKind::Macro => "ma",
148149
CompletionItemKind::Attribute => "at",
149-
};
150-
tag.to_owned()
150+
}
151151
}
152152
}
153153

0 commit comments

Comments
 (0)