From cbca4effce148b1bdebd32556aaa19d13dd2a974 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 7 Mar 2020 16:50:30 +0100 Subject: Fix record pattern completion --- crates/ra_ide/src/completion/complete_keyword.rs | 1 + .../src/completion/complete_record_pattern.rs | 28 ++++++++++++++++++++++ crates/ra_ide/src/completion/completion_context.rs | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'crates') diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index eb7cd9ac2..e1c0ffb1f 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs @@ -79,6 +79,7 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte } fn is_in_loop_body(leaf: &SyntaxToken) -> bool { + // FIXME move this to CompletionContext and make it handle macros for node in leaf.parent().ancestors() { if node.kind() == FN_DEF || node.kind() == LAMBDA_EXPR { break; diff --git a/crates/ra_ide/src/completion/complete_record_pattern.rs b/crates/ra_ide/src/completion/complete_record_pattern.rs index 9bdeae49f..687c57d3e 100644 --- a/crates/ra_ide/src/completion/complete_record_pattern.rs +++ b/crates/ra_ide/src/completion/complete_record_pattern.rs @@ -87,4 +87,32 @@ mod tests { ] "###); } + + #[test] + fn test_record_pattern_field_in_simple_macro() { + let completions = complete( + r" + macro_rules! m { ($e:expr) => { $e } } + struct S { foo: u32 } + + fn process(f: S) { + m!(match f { + S { f<|>: 92 } => (), + }) + } + ", + ); + assert_debug_snapshot!(completions, @r###" + [ + CompletionItem { + label: "foo", + source_range: [171; 172), + delete: [171; 172), + insert: "foo", + kind: Field, + detail: "u32", + }, + ] + "###); + } } diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index fe9777487..ae3528f35 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs @@ -185,7 +185,7 @@ impl<'a> CompletionContext<'a> { } if name.syntax().ancestors().find_map(ast::RecordFieldPatList::cast).is_some() { self.record_lit_pat = - self.sema.find_node_at_offset_with_macros(&original_file, self.offset); + self.sema.find_node_at_offset_with_macros(&original_file, offset); } } } -- cgit v1.2.3