aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs
diff options
context:
space:
mode:
authoruHOOCCOOHu <[email protected]>2019-09-11 15:44:44 +0100
committeruHOOCCOOHu <[email protected]>2019-09-11 15:44:44 +0100
commit6353b1621f44e1b0db65ebbe414aa7c5f1864b9d (patch)
treedd32501321994bc8e9dcacd634cb4511053b20bf /crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs
parentc033d18700e86c9bb028344f28e2eb7d670fe241 (diff)
Split out `complete_macro_in_item_position`
Diffstat (limited to 'crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs')
-rw-r--r--crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs b/crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs
new file mode 100644
index 000000000..708dc9777
--- /dev/null
+++ b/crates/ra_ide_api/src/completion/complete_macro_in_item_position.rs
@@ -0,0 +1,50 @@
1use crate::completion::{CompletionContext, Completions};
2
3pub(super) fn complete_macro_in_item_position(acc: &mut Completions, ctx: &CompletionContext) {
4 // Show only macros in top level.
5 if ctx.is_new_item {
6 for (name, res) in ctx.analyzer.all_names(ctx.db) {
7 if res.get_macros().is_some() {
8 acc.add_resolution(ctx, name.to_string(), &res.only_macros());
9 }
10 }
11 }
12}
13
14#[cfg(test)]
15mod tests {
16 use crate::completion::{do_completion, CompletionItem, CompletionKind};
17 use insta::assert_debug_snapshot;
18
19 fn do_reference_completion(code: &str) -> Vec<CompletionItem> {
20 do_completion(code, CompletionKind::Reference)
21 }
22
23 #[test]
24 fn completes_macros_as_item() {
25 assert_debug_snapshot!(
26 do_reference_completion(
27 "
28 //- /main.rs
29 macro_rules! foo {
30 () => {}
31 }
32
33 fn foo() {}
34
35 <|>
36 "
37 ),
38 @r##"[
39 CompletionItem {
40 label: "foo",
41 source_range: [46; 46),
42 delete: [46; 46),
43 insert: "foo!",
44 kind: Macro,
45 detail: "macro_rules! foo",
46 },
47]"##
48 );
49 }
50}