1 //! Completes macro invocations used in item position.
3 use crate::{CompletionContext, Completions};
5 // Ideally this should be removed and moved into `(un)qualified_path` respectively
6 pub(crate) fn complete_macro_in_item_position(acc: &mut Completions, ctx: &CompletionContext) {
7 // Show only macros in top level.
12 ctx.scope.process_all_names(&mut |name, res| {
13 if let hir::ScopeDef::MacroDef(mac) = res {
14 acc.add_macro(ctx, Some(name.clone()), mac);
16 // FIXME: This should be done in qualified_path/unqualified_path instead?
17 if let hir::ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) = res {
18 acc.add_resolution(ctx, name, &res);
25 use expect_test::{expect, Expect};
27 use crate::{test_utils::completion_list, CompletionKind};
29 fn check(ra_fixture: &str, expect: Expect) {
30 let actual = completion_list(ra_fixture, CompletionKind::Reference);
31 expect.assert_eq(&actual)
35 fn completes_macros_as_item() {
38 macro_rules! foo { () => {} }
44 ma foo!(…) macro_rules! foo