From 3db64a400c78bbd2708e67ddc07df1001fff3f29 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 17 Feb 2021 17:53:31 +0300 Subject: rename completion -> ide_completion We don't have completion-related PRs in flight, so lets do it --- .../src/completions/macro_in_item_position.rs | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 crates/ide_completion/src/completions/macro_in_item_position.rs (limited to 'crates/ide_completion/src/completions/macro_in_item_position.rs') diff --git a/crates/ide_completion/src/completions/macro_in_item_position.rs b/crates/ide_completion/src/completions/macro_in_item_position.rs new file mode 100644 index 000000000..2be299ac2 --- /dev/null +++ b/crates/ide_completion/src/completions/macro_in_item_position.rs @@ -0,0 +1,41 @@ +//! Completes macro invocations used in item position. + +use crate::{CompletionContext, Completions}; + +pub(crate) fn complete_macro_in_item_position(acc: &mut Completions, ctx: &CompletionContext) { + // Show only macros in top level. + if ctx.is_new_item { + ctx.scope.process_all_names(&mut |name, res| { + if let hir::ScopeDef::MacroDef(mac) = res { + acc.add_macro(ctx, Some(name.to_string()), mac); + } + }) + } +} + +#[cfg(test)] +mod tests { + use expect_test::{expect, Expect}; + + use crate::{test_utils::completion_list, CompletionKind}; + + fn check(ra_fixture: &str, expect: Expect) { + let actual = completion_list(ra_fixture, CompletionKind::Reference); + expect.assert_eq(&actual) + } + + #[test] + fn completes_macros_as_item() { + check( + r#" +macro_rules! foo { () => {} } +fn foo() {} + +$0 +"#, + expect![[r#" + ma foo!(…) macro_rules! foo + "#]], + ) + } +} -- cgit v1.2.3