Skip to content

Commit f0d3259

Browse files
bors[bot]matklad
andauthored
Merge #9812
9812: fix: add `!` to macro completions with existing arg r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 546d718 + 0e437c8 commit f0d3259

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

crates/ide_completion/src/render/macro_.rs

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,19 @@ impl<'a> MacroRender<'a> {
4949
.add_import(import_to_add)
5050
.set_detail(self.detail());
5151

52-
let needs_bang = self.needs_bang();
52+
let needs_bang = !(self.ctx.completion.in_use_tree()
53+
|| matches!(self.ctx.completion.path_call_kind(), Some(CallKind::Mac)));
54+
let has_parens = self.ctx.completion.path_call_kind().is_some();
55+
5356
match self.ctx.snippet_cap() {
54-
Some(cap) if needs_bang => {
55-
let snippet = self.snippet();
56-
let lookup = self.lookup();
57+
Some(cap) if needs_bang && !has_parens => {
58+
let snippet = format!("{}!{}$0{}", self.name, self.bra, self.ket);
59+
let lookup = self.banged_name();
5760
item.insert_snippet(cap, snippet).lookup_by(lookup);
5861
}
59-
None if needs_bang => {
60-
item.insert_text(self.banged_name());
62+
_ if needs_bang => {
63+
let lookup = self.banged_name();
64+
item.insert_text(self.banged_name()).lookup_by(lookup);
6165
}
6266
_ => {
6367
cov_mark::hit!(dont_insert_macro_call_parens_unncessary);
@@ -83,14 +87,6 @@ impl<'a> MacroRender<'a> {
8387
}
8488
}
8589

86-
fn snippet(&self) -> String {
87-
format!("{}!{}$0{}", self.name, self.bra, self.ket)
88-
}
89-
90-
fn lookup(&self) -> String {
91-
self.banged_name()
92-
}
93-
9490
fn banged_name(&self) -> String {
9591
format!("{}!", self.name)
9692
}
@@ -163,6 +159,25 @@ fn main() { frobnicate!(); }
163159
);
164160
}
165161

162+
#[test]
163+
fn add_bang_to_parens() {
164+
check_edit(
165+
"frobnicate!",
166+
r#"
167+
macro_rules! frobnicate { () => () }
168+
fn main() {
169+
frob$0()
170+
}
171+
"#,
172+
r#"
173+
macro_rules! frobnicate { () => () }
174+
fn main() {
175+
frobnicate!()
176+
}
177+
"#,
178+
);
179+
}
180+
166181
#[test]
167182
fn guesses_macro_braces() {
168183
check_edit(

0 commit comments

Comments
 (0)