From 9aad07dbea39132692ff68bd421b88aad9644d81 Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Mon, 15 Jun 2020 23:10:59 +0200 Subject: don't complete top level attrs inside nested attrs and add better labels #4890 Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- crates/ra_ide/src/completion/complete_attribute.rs | 186 ++++++++++++++------- 1 file changed, 123 insertions(+), 63 deletions(-) diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs index fb3f0b743..814d7109d 100644 --- a/crates/ra_ide/src/completion/complete_attribute.rs +++ b/crates/ra_ide/src/completion/complete_attribute.rs @@ -20,12 +20,26 @@ pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) { complete_derive(acc, ctx, token_tree) } - _ => complete_attribute_start(acc, ctx, attribute), + (_, Some(ast::AttrInput::TokenTree(token_tree))) => { + let token_tree_str = token_tree.to_string(); + complete_attribute_start( + acc, + ctx, + attribute, + token_tree_str.starts_with('(') && token_tree_str.ends_with(')'), + ) + } + _ => complete_attribute_start(acc, ctx, attribute, false), } Some(()) } -fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attribute: &ast::Attr) { +fn complete_attribute_start( + acc: &mut Completions, + ctx: &CompletionContext, + attribute: &ast::Attr, + nested: bool, +) { for attr_completion in ATTRIBUTES { let mut item = CompletionItem::new( CompletionKind::Attribute, @@ -42,7 +56,9 @@ fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attr } if attribute.kind() == ast::AttrKind::Inner || !attr_completion.should_be_inner { - acc.add(item); + if (nested && attr_completion.should_be_inner) || !nested { + acc.add(item); + } } } } @@ -54,33 +70,59 @@ struct AttrCompletion { } const ATTRIBUTES: &[AttrCompletion] = &[ - AttrCompletion { label: "allow", snippet: Some("allow(${0:lint})"), should_be_inner: false }, AttrCompletion { - label: "cfg_attr", + label: "allow(…)", snippet: Some("allow(${0:lint})"), should_be_inner: false + }, + AttrCompletion { + label: "cfg_attr(…)", snippet: Some("cfg_attr(${1:predicate}, ${0:attr})"), should_be_inner: false, }, - AttrCompletion { label: "cfg", snippet: Some("cfg(${0:predicate})"), should_be_inner: false }, - AttrCompletion { label: "deny", snippet: Some("deny(${0:lint})"), should_be_inner: false }, AttrCompletion { - label: "deprecated", + label: "cfg(…)", + snippet: Some("cfg(${0:predicate})"), + should_be_inner: false, + }, + AttrCompletion { label: "deny(…)", snippet: Some("deny(${0:lint})"), should_be_inner: false }, + AttrCompletion { + label: r#"deprecated = "…""#, snippet: Some(r#"deprecated = "${0:reason}""#), should_be_inner: false, }, AttrCompletion { - label: "derive", + label: "derive(…)", snippet: Some(r#"derive(${0:Debug})"#), should_be_inner: false, }, - AttrCompletion { label: "doc", snippet: Some(r#"doc = "${0:docs}""#), should_be_inner: false }, - AttrCompletion { label: "feature", snippet: Some("feature(${0:flag})"), should_be_inner: true }, - AttrCompletion { label: "forbid", snippet: Some("forbid(${0:lint})"), should_be_inner: false }, + AttrCompletion { + label: r#"doc = "…""#, + snippet: Some(r#"doc = "${0:docs}""#), + should_be_inner: false, + }, + AttrCompletion { + label: "feature(…)", + snippet: Some("feature(${0:flag})"), + should_be_inner: true, + }, + AttrCompletion { + label: "forbid(…)", + snippet: Some("forbid(${0:lint})"), + should_be_inner: false, + }, // FIXME: resolve through macro resolution? AttrCompletion { label: "global_allocator", snippet: None, should_be_inner: true }, - AttrCompletion { label: "ignore", snippet: Some("ignore(${0:lint})"), should_be_inner: false }, - AttrCompletion { label: "inline", snippet: Some("inline(${0:lint})"), should_be_inner: false }, AttrCompletion { - label: "link_name", + label: "ignore(…)", + snippet: Some("ignore(${0:lint})"), + should_be_inner: false, + }, + AttrCompletion { + label: "inline(…)", + snippet: Some("inline(${0:lint})"), + should_be_inner: false, + }, + AttrCompletion { + label: r#"link_name = "…""#, snippet: Some(r#"link_name = "${0:symbol_name}""#), should_be_inner: false, }, @@ -88,7 +130,7 @@ const ATTRIBUTES: &[AttrCompletion] = &[ AttrCompletion { label: "macro_export", snippet: None, should_be_inner: false }, AttrCompletion { label: "macro_use", snippet: None, should_be_inner: false }, AttrCompletion { - label: "must_use", + label: r#"must_use = "…""#, snippet: Some(r#"must_use = "${0:reason}""#), should_be_inner: false, }, @@ -96,35 +138,39 @@ const ATTRIBUTES: &[AttrCompletion] = &[ AttrCompletion { label: "no_std", snippet: None, should_be_inner: true }, AttrCompletion { label: "non_exhaustive", snippet: None, should_be_inner: false }, AttrCompletion { label: "panic_handler", snippet: None, should_be_inner: true }, - AttrCompletion { label: "path", snippet: Some("path =\"${0:path}\""), should_be_inner: false }, + AttrCompletion { + label: "path = \"…\"", + snippet: Some("path =\"${0:path}\""), + should_be_inner: false, + }, AttrCompletion { label: "proc_macro", snippet: None, should_be_inner: false }, AttrCompletion { label: "proc_macro_attribute", snippet: None, should_be_inner: false }, AttrCompletion { - label: "proc_macro_derive", + label: "proc_macro_derive(…)", snippet: Some("proc_macro_derive(${0:Trait})"), should_be_inner: false, }, AttrCompletion { - label: "recursion_limit", + label: "recursion_limit = …", snippet: Some("recursion_limit = ${0:128}"), should_be_inner: true, }, - AttrCompletion { label: "repr", snippet: Some("repr(${0:C})"), should_be_inner: false }, + AttrCompletion { label: "repr(…)", snippet: Some("repr(${0:C})"), should_be_inner: false }, AttrCompletion { - label: "should_panic", + label: "should_panic(…)", snippet: Some(r#"should_panic(expected = "${0:reason}")"#), should_be_inner: false, }, AttrCompletion { - label: "target_feature", + label: r#"target_feature = "…""#, snippet: Some("target_feature = \"${0:feature}\""), should_be_inner: false, }, AttrCompletion { label: "test", snippet: None, should_be_inner: false }, AttrCompletion { label: "used", snippet: None, should_be_inner: false }, - AttrCompletion { label: "warn", snippet: Some("warn(${0:lint})"), should_be_inner: false }, + AttrCompletion { label: "warn(…)", snippet: Some("warn(${0:lint})"), should_be_inner: false }, AttrCompletion { - label: "windows_subsystem", + label: r#"windows_subsystem = "…""#, snippet: Some(r#"windows_subsystem = "${0:subsystem}""#), should_be_inner: true, }, @@ -414,70 +460,70 @@ mod tests { @r###" [ CompletionItem { - label: "allow", + label: "allow(…)", source_range: 19..19, delete: 19..19, insert: "allow(${0:lint})", kind: Attribute, }, CompletionItem { - label: "cfg", + label: "cfg(…)", source_range: 19..19, delete: 19..19, insert: "cfg(${0:predicate})", kind: Attribute, }, CompletionItem { - label: "cfg_attr", + label: "cfg_attr(…)", source_range: 19..19, delete: 19..19, insert: "cfg_attr(${1:predicate}, ${0:attr})", kind: Attribute, }, CompletionItem { - label: "deny", + label: "deny(…)", source_range: 19..19, delete: 19..19, insert: "deny(${0:lint})", kind: Attribute, }, CompletionItem { - label: "deprecated", + label: "deprecated = \"…\"", source_range: 19..19, delete: 19..19, insert: "deprecated = \"${0:reason}\"", kind: Attribute, }, CompletionItem { - label: "derive", + label: "derive(…)", source_range: 19..19, delete: 19..19, insert: "derive(${0:Debug})", kind: Attribute, }, CompletionItem { - label: "doc", + label: "doc = \"…\"", source_range: 19..19, delete: 19..19, insert: "doc = \"${0:docs}\"", kind: Attribute, }, CompletionItem { - label: "forbid", + label: "forbid(…)", source_range: 19..19, delete: 19..19, insert: "forbid(${0:lint})", kind: Attribute, }, CompletionItem { - label: "ignore", + label: "ignore(…)", source_range: 19..19, delete: 19..19, insert: "ignore(${0:lint})", kind: Attribute, }, CompletionItem { - label: "inline", + label: "inline(…)", source_range: 19..19, delete: 19..19, insert: "inline(${0:lint})", @@ -491,7 +537,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "link_name", + label: "link_name = \"…\"", source_range: 19..19, delete: 19..19, insert: "link_name = \"${0:symbol_name}\"", @@ -512,7 +558,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "must_use", + label: "must_use = \"…\"", source_range: 19..19, delete: 19..19, insert: "must_use = \"${0:reason}\"", @@ -533,7 +579,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "path", + label: "path = \"…\"", source_range: 19..19, delete: 19..19, insert: "path =\"${0:path}\"", @@ -554,28 +600,28 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "proc_macro_derive", + label: "proc_macro_derive(…)", source_range: 19..19, delete: 19..19, insert: "proc_macro_derive(${0:Trait})", kind: Attribute, }, CompletionItem { - label: "repr", + label: "repr(…)", source_range: 19..19, delete: 19..19, insert: "repr(${0:C})", kind: Attribute, }, CompletionItem { - label: "should_panic", + label: "should_panic(…)", source_range: 19..19, delete: 19..19, insert: "should_panic(expected = \"${0:reason}\")", kind: Attribute, }, CompletionItem { - label: "target_feature", + label: "target_feature = \"…\"", source_range: 19..19, delete: 19..19, insert: "target_feature = \"${0:feature}\"", @@ -596,7 +642,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "warn", + label: "warn(…)", source_range: 19..19, delete: 19..19, insert: "warn(${0:lint})", @@ -607,6 +653,20 @@ mod tests { ); } + #[test] + fn test_attribute_completion_inside_nested_attr() { + assert_debug_snapshot!( + do_attr_completion( + r" + #[allow(<|>)] + ", + ), + @r###" + [] + "### + ); + } + #[test] fn test_inner_attribute_completion() { assert_debug_snapshot!( @@ -618,63 +678,63 @@ mod tests { @r###" [ CompletionItem { - label: "allow", + label: "allow(…)", source_range: 20..20, delete: 20..20, insert: "allow(${0:lint})", kind: Attribute, }, CompletionItem { - label: "cfg", + label: "cfg(…)", source_range: 20..20, delete: 20..20, insert: "cfg(${0:predicate})", kind: Attribute, }, CompletionItem { - label: "cfg_attr", + label: "cfg_attr(…)", source_range: 20..20, delete: 20..20, insert: "cfg_attr(${1:predicate}, ${0:attr})", kind: Attribute, }, CompletionItem { - label: "deny", + label: "deny(…)", source_range: 20..20, delete: 20..20, insert: "deny(${0:lint})", kind: Attribute, }, CompletionItem { - label: "deprecated", + label: "deprecated = \"…\"", source_range: 20..20, delete: 20..20, insert: "deprecated = \"${0:reason}\"", kind: Attribute, }, CompletionItem { - label: "derive", + label: "derive(…)", source_range: 20..20, delete: 20..20, insert: "derive(${0:Debug})", kind: Attribute, }, CompletionItem { - label: "doc", + label: "doc = \"…\"", source_range: 20..20, delete: 20..20, insert: "doc = \"${0:docs}\"", kind: Attribute, }, CompletionItem { - label: "feature", + label: "feature(…)", source_range: 20..20, delete: 20..20, insert: "feature(${0:flag})", kind: Attribute, }, CompletionItem { - label: "forbid", + label: "forbid(…)", source_range: 20..20, delete: 20..20, insert: "forbid(${0:lint})", @@ -688,14 +748,14 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "ignore", + label: "ignore(…)", source_range: 20..20, delete: 20..20, insert: "ignore(${0:lint})", kind: Attribute, }, CompletionItem { - label: "inline", + label: "inline(…)", source_range: 20..20, delete: 20..20, insert: "inline(${0:lint})", @@ -709,7 +769,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "link_name", + label: "link_name = \"…\"", source_range: 20..20, delete: 20..20, insert: "link_name = \"${0:symbol_name}\"", @@ -730,7 +790,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "must_use", + label: "must_use = \"…\"", source_range: 20..20, delete: 20..20, insert: "must_use = \"${0:reason}\"", @@ -765,7 +825,7 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "path", + label: "path = \"…\"", source_range: 20..20, delete: 20..20, insert: "path =\"${0:path}\"", @@ -786,35 +846,35 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "proc_macro_derive", + label: "proc_macro_derive(…)", source_range: 20..20, delete: 20..20, insert: "proc_macro_derive(${0:Trait})", kind: Attribute, }, CompletionItem { - label: "recursion_limit", + label: "recursion_limit = …", source_range: 20..20, delete: 20..20, insert: "recursion_limit = ${0:128}", kind: Attribute, }, CompletionItem { - label: "repr", + label: "repr(…)", source_range: 20..20, delete: 20..20, insert: "repr(${0:C})", kind: Attribute, }, CompletionItem { - label: "should_panic", + label: "should_panic(…)", source_range: 20..20, delete: 20..20, insert: "should_panic(expected = \"${0:reason}\")", kind: Attribute, }, CompletionItem { - label: "target_feature", + label: "target_feature = \"…\"", source_range: 20..20, delete: 20..20, insert: "target_feature = \"${0:feature}\"", @@ -835,14 +895,14 @@ mod tests { kind: Attribute, }, CompletionItem { - label: "warn", + label: "warn(…)", source_range: 20..20, delete: 20..20, insert: "warn(${0:lint})", kind: Attribute, }, CompletionItem { - label: "windows_subsystem", + label: "windows_subsystem = \"…\"", source_range: 20..20, delete: 20..20, insert: "windows_subsystem = \"${0:subsystem}\"", -- cgit v1.2.3 From 3f26c5758d7beb1207ed187b71fe9fa6fcaa03ec Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Thu, 18 Jun 2020 21:31:49 +0200 Subject: don't complete top level attrs inside nested attrs and add better labels #4890 Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- crates/ra_ide/src/completion/complete_attribute.rs | 24 ++++++++-------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs index 814d7109d..9c7ccc950 100644 --- a/crates/ra_ide/src/completion/complete_attribute.rs +++ b/crates/ra_ide/src/completion/complete_attribute.rs @@ -22,24 +22,18 @@ pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) } (_, Some(ast::AttrInput::TokenTree(token_tree))) => { let token_tree_str = token_tree.to_string(); - complete_attribute_start( - acc, - ctx, - attribute, - token_tree_str.starts_with('(') && token_tree_str.ends_with(')'), - ) + let nested = token_tree_str.starts_with('(') && token_tree_str.ends_with(')'); + + if !nested { + complete_attribute_start(acc, ctx, attribute); + } } - _ => complete_attribute_start(acc, ctx, attribute, false), + _ => complete_attribute_start(acc, ctx, attribute), } Some(()) } -fn complete_attribute_start( - acc: &mut Completions, - ctx: &CompletionContext, - attribute: &ast::Attr, - nested: bool, -) { +fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attribute: &ast::Attr) { for attr_completion in ATTRIBUTES { let mut item = CompletionItem::new( CompletionKind::Attribute, @@ -56,9 +50,7 @@ fn complete_attribute_start( } if attribute.kind() == ast::AttrKind::Inner || !attr_completion.should_be_inner { - if (nested && attr_completion.should_be_inner) || !nested { - acc.add(item); - } + acc.add(item); } } } -- cgit v1.2.3 From 3df879f139b0a40f400c23cb495eaf776b325047 Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Sun, 21 Jun 2020 19:14:08 +0200 Subject: don't complete top level attrs inside nested attrs and add better labels #4899 Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- crates/ra_ide/src/completion/complete_attribute.rs | 121 ++++++++++++++++++--- 1 file changed, 105 insertions(+), 16 deletions(-) diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs index 9c7ccc950..443b3b87d 100644 --- a/crates/ra_ide/src/completion/complete_attribute.rs +++ b/crates/ra_ide/src/completion/complete_attribute.rs @@ -42,6 +42,10 @@ fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attr ) .kind(CompletionItemKind::Attribute); + if let Some(lookup) = attr_completion.lookup { + item = item.lookup_by(lookup); + } + match (attr_completion.snippet, ctx.config.snippet_cap) { (Some(snippet), Some(cap)) => { item = item.insert_snippet(cap, snippet); @@ -57,114 +61,160 @@ fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attr struct AttrCompletion { label: &'static str, + lookup: Option<&'static str>, snippet: Option<&'static str>, should_be_inner: bool, } const ATTRIBUTES: &[AttrCompletion] = &[ AttrCompletion { - label: "allow(…)", snippet: Some("allow(${0:lint})"), should_be_inner: false + label: "allow(…)", + snippet: Some("allow(${0:lint})"), + should_be_inner: false, + lookup: Some("allow"), }, AttrCompletion { label: "cfg_attr(…)", snippet: Some("cfg_attr(${1:predicate}, ${0:attr})"), should_be_inner: false, + lookup: Some("cfg_attr"), }, AttrCompletion { label: "cfg(…)", snippet: Some("cfg(${0:predicate})"), should_be_inner: false, + lookup: Some("cfg"), + }, + AttrCompletion { + label: "deny(…)", + snippet: Some("deny(${0:lint})"), + should_be_inner: false, + lookup: Some("deny"), }, - AttrCompletion { label: "deny(…)", snippet: Some("deny(${0:lint})"), should_be_inner: false }, AttrCompletion { label: r#"deprecated = "…""#, snippet: Some(r#"deprecated = "${0:reason}""#), should_be_inner: false, + lookup: Some("deprecated"), }, AttrCompletion { label: "derive(…)", snippet: Some(r#"derive(${0:Debug})"#), should_be_inner: false, + lookup: Some("derive"), }, AttrCompletion { label: r#"doc = "…""#, snippet: Some(r#"doc = "${0:docs}""#), should_be_inner: false, + lookup: Some("doc"), }, AttrCompletion { label: "feature(…)", snippet: Some("feature(${0:flag})"), should_be_inner: true, + lookup: Some("feature"), }, AttrCompletion { label: "forbid(…)", snippet: Some("forbid(${0:lint})"), should_be_inner: false, + lookup: Some("forbid"), }, // FIXME: resolve through macro resolution? - AttrCompletion { label: "global_allocator", snippet: None, should_be_inner: true }, + AttrCompletion { + label: "global_allocator", + snippet: None, + should_be_inner: true, + lookup: None, + }, AttrCompletion { label: "ignore(…)", snippet: Some("ignore(${0:lint})"), should_be_inner: false, + lookup: Some("ignore"), }, AttrCompletion { label: "inline(…)", snippet: Some("inline(${0:lint})"), should_be_inner: false, + lookup: Some("inline"), }, AttrCompletion { label: r#"link_name = "…""#, snippet: Some(r#"link_name = "${0:symbol_name}""#), should_be_inner: false, + lookup: Some("link_name"), }, - AttrCompletion { label: "link", snippet: None, should_be_inner: false }, - AttrCompletion { label: "macro_export", snippet: None, should_be_inner: false }, - AttrCompletion { label: "macro_use", snippet: None, should_be_inner: false }, + AttrCompletion { label: "link", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { label: "macro_export", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { label: "macro_use", snippet: None, should_be_inner: false, lookup: None }, AttrCompletion { label: r#"must_use = "…""#, snippet: Some(r#"must_use = "${0:reason}""#), should_be_inner: false, + lookup: Some("must_use"), }, - AttrCompletion { label: "no_mangle", snippet: None, should_be_inner: false }, - AttrCompletion { label: "no_std", snippet: None, should_be_inner: true }, - AttrCompletion { label: "non_exhaustive", snippet: None, should_be_inner: false }, - AttrCompletion { label: "panic_handler", snippet: None, should_be_inner: true }, + AttrCompletion { label: "no_mangle", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { label: "no_std", snippet: None, should_be_inner: true, lookup: None }, + AttrCompletion { label: "non_exhaustive", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { label: "panic_handler", snippet: None, should_be_inner: true, lookup: None }, AttrCompletion { label: "path = \"…\"", snippet: Some("path =\"${0:path}\""), should_be_inner: false, + lookup: Some("path"), + }, + AttrCompletion { label: "proc_macro", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { + label: "proc_macro_attribute", + snippet: None, + should_be_inner: false, + lookup: None, }, - AttrCompletion { label: "proc_macro", snippet: None, should_be_inner: false }, - AttrCompletion { label: "proc_macro_attribute", snippet: None, should_be_inner: false }, AttrCompletion { label: "proc_macro_derive(…)", snippet: Some("proc_macro_derive(${0:Trait})"), should_be_inner: false, + lookup: Some("proc_macro_derive"), }, AttrCompletion { label: "recursion_limit = …", snippet: Some("recursion_limit = ${0:128}"), should_be_inner: true, + lookup: Some("recursion_limit"), + }, + AttrCompletion { + label: "repr(…)", + snippet: Some("repr(${0:C})"), + should_be_inner: false, + lookup: Some("repr"), }, - AttrCompletion { label: "repr(…)", snippet: Some("repr(${0:C})"), should_be_inner: false }, AttrCompletion { label: "should_panic(…)", snippet: Some(r#"should_panic(expected = "${0:reason}")"#), should_be_inner: false, + lookup: Some("should_panic"), }, AttrCompletion { label: r#"target_feature = "…""#, snippet: Some("target_feature = \"${0:feature}\""), should_be_inner: false, + lookup: Some("target_feature"), + }, + AttrCompletion { label: "test", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { label: "used", snippet: None, should_be_inner: false, lookup: None }, + AttrCompletion { + label: "warn(…)", + snippet: Some("warn(${0:lint})"), + should_be_inner: false, + lookup: Some("warn"), }, - AttrCompletion { label: "test", snippet: None, should_be_inner: false }, - AttrCompletion { label: "used", snippet: None, should_be_inner: false }, - AttrCompletion { label: "warn(…)", snippet: Some("warn(${0:lint})"), should_be_inner: false }, AttrCompletion { label: r#"windows_subsystem = "…""#, snippet: Some(r#"windows_subsystem = "${0:subsystem}""#), should_be_inner: true, + lookup: Some("windows_subsystem"), }, ]; @@ -457,6 +507,7 @@ mod tests { delete: 19..19, insert: "allow(${0:lint})", kind: Attribute, + lookup: "allow", }, CompletionItem { label: "cfg(…)", @@ -464,6 +515,7 @@ mod tests { delete: 19..19, insert: "cfg(${0:predicate})", kind: Attribute, + lookup: "cfg", }, CompletionItem { label: "cfg_attr(…)", @@ -471,6 +523,7 @@ mod tests { delete: 19..19, insert: "cfg_attr(${1:predicate}, ${0:attr})", kind: Attribute, + lookup: "cfg_attr", }, CompletionItem { label: "deny(…)", @@ -478,6 +531,7 @@ mod tests { delete: 19..19, insert: "deny(${0:lint})", kind: Attribute, + lookup: "deny", }, CompletionItem { label: "deprecated = \"…\"", @@ -485,6 +539,7 @@ mod tests { delete: 19..19, insert: "deprecated = \"${0:reason}\"", kind: Attribute, + lookup: "deprecated", }, CompletionItem { label: "derive(…)", @@ -492,6 +547,7 @@ mod tests { delete: 19..19, insert: "derive(${0:Debug})", kind: Attribute, + lookup: "derive", }, CompletionItem { label: "doc = \"…\"", @@ -499,6 +555,7 @@ mod tests { delete: 19..19, insert: "doc = \"${0:docs}\"", kind: Attribute, + lookup: "doc", }, CompletionItem { label: "forbid(…)", @@ -506,6 +563,7 @@ mod tests { delete: 19..19, insert: "forbid(${0:lint})", kind: Attribute, + lookup: "forbid", }, CompletionItem { label: "ignore(…)", @@ -513,6 +571,7 @@ mod tests { delete: 19..19, insert: "ignore(${0:lint})", kind: Attribute, + lookup: "ignore", }, CompletionItem { label: "inline(…)", @@ -520,6 +579,7 @@ mod tests { delete: 19..19, insert: "inline(${0:lint})", kind: Attribute, + lookup: "inline", }, CompletionItem { label: "link", @@ -534,6 +594,7 @@ mod tests { delete: 19..19, insert: "link_name = \"${0:symbol_name}\"", kind: Attribute, + lookup: "link_name", }, CompletionItem { label: "macro_export", @@ -555,6 +616,7 @@ mod tests { delete: 19..19, insert: "must_use = \"${0:reason}\"", kind: Attribute, + lookup: "must_use", }, CompletionItem { label: "no_mangle", @@ -576,6 +638,7 @@ mod tests { delete: 19..19, insert: "path =\"${0:path}\"", kind: Attribute, + lookup: "path", }, CompletionItem { label: "proc_macro", @@ -597,6 +660,7 @@ mod tests { delete: 19..19, insert: "proc_macro_derive(${0:Trait})", kind: Attribute, + lookup: "proc_macro_derive", }, CompletionItem { label: "repr(…)", @@ -604,6 +668,7 @@ mod tests { delete: 19..19, insert: "repr(${0:C})", kind: Attribute, + lookup: "repr", }, CompletionItem { label: "should_panic(…)", @@ -611,6 +676,7 @@ mod tests { delete: 19..19, insert: "should_panic(expected = \"${0:reason}\")", kind: Attribute, + lookup: "should_panic", }, CompletionItem { label: "target_feature = \"…\"", @@ -618,6 +684,7 @@ mod tests { delete: 19..19, insert: "target_feature = \"${0:feature}\"", kind: Attribute, + lookup: "target_feature", }, CompletionItem { label: "test", @@ -639,6 +706,7 @@ mod tests { delete: 19..19, insert: "warn(${0:lint})", kind: Attribute, + lookup: "warn", }, ] "### @@ -675,6 +743,7 @@ mod tests { delete: 20..20, insert: "allow(${0:lint})", kind: Attribute, + lookup: "allow", }, CompletionItem { label: "cfg(…)", @@ -682,6 +751,7 @@ mod tests { delete: 20..20, insert: "cfg(${0:predicate})", kind: Attribute, + lookup: "cfg", }, CompletionItem { label: "cfg_attr(…)", @@ -689,6 +759,7 @@ mod tests { delete: 20..20, insert: "cfg_attr(${1:predicate}, ${0:attr})", kind: Attribute, + lookup: "cfg_attr", }, CompletionItem { label: "deny(…)", @@ -696,6 +767,7 @@ mod tests { delete: 20..20, insert: "deny(${0:lint})", kind: Attribute, + lookup: "deny", }, CompletionItem { label: "deprecated = \"…\"", @@ -703,6 +775,7 @@ mod tests { delete: 20..20, insert: "deprecated = \"${0:reason}\"", kind: Attribute, + lookup: "deprecated", }, CompletionItem { label: "derive(…)", @@ -710,6 +783,7 @@ mod tests { delete: 20..20, insert: "derive(${0:Debug})", kind: Attribute, + lookup: "derive", }, CompletionItem { label: "doc = \"…\"", @@ -717,6 +791,7 @@ mod tests { delete: 20..20, insert: "doc = \"${0:docs}\"", kind: Attribute, + lookup: "doc", }, CompletionItem { label: "feature(…)", @@ -724,6 +799,7 @@ mod tests { delete: 20..20, insert: "feature(${0:flag})", kind: Attribute, + lookup: "feature", }, CompletionItem { label: "forbid(…)", @@ -731,6 +807,7 @@ mod tests { delete: 20..20, insert: "forbid(${0:lint})", kind: Attribute, + lookup: "forbid", }, CompletionItem { label: "global_allocator", @@ -745,6 +822,7 @@ mod tests { delete: 20..20, insert: "ignore(${0:lint})", kind: Attribute, + lookup: "ignore", }, CompletionItem { label: "inline(…)", @@ -752,6 +830,7 @@ mod tests { delete: 20..20, insert: "inline(${0:lint})", kind: Attribute, + lookup: "inline", }, CompletionItem { label: "link", @@ -766,6 +845,7 @@ mod tests { delete: 20..20, insert: "link_name = \"${0:symbol_name}\"", kind: Attribute, + lookup: "link_name", }, CompletionItem { label: "macro_export", @@ -787,6 +867,7 @@ mod tests { delete: 20..20, insert: "must_use = \"${0:reason}\"", kind: Attribute, + lookup: "must_use", }, CompletionItem { label: "no_mangle", @@ -822,6 +903,7 @@ mod tests { delete: 20..20, insert: "path =\"${0:path}\"", kind: Attribute, + lookup: "path", }, CompletionItem { label: "proc_macro", @@ -843,6 +925,7 @@ mod tests { delete: 20..20, insert: "proc_macro_derive(${0:Trait})", kind: Attribute, + lookup: "proc_macro_derive", }, CompletionItem { label: "recursion_limit = …", @@ -850,6 +933,7 @@ mod tests { delete: 20..20, insert: "recursion_limit = ${0:128}", kind: Attribute, + lookup: "recursion_limit", }, CompletionItem { label: "repr(…)", @@ -857,6 +941,7 @@ mod tests { delete: 20..20, insert: "repr(${0:C})", kind: Attribute, + lookup: "repr", }, CompletionItem { label: "should_panic(…)", @@ -864,6 +949,7 @@ mod tests { delete: 20..20, insert: "should_panic(expected = \"${0:reason}\")", kind: Attribute, + lookup: "should_panic", }, CompletionItem { label: "target_feature = \"…\"", @@ -871,6 +957,7 @@ mod tests { delete: 20..20, insert: "target_feature = \"${0:feature}\"", kind: Attribute, + lookup: "target_feature", }, CompletionItem { label: "test", @@ -892,6 +979,7 @@ mod tests { delete: 20..20, insert: "warn(${0:lint})", kind: Attribute, + lookup: "warn", }, CompletionItem { label: "windows_subsystem = \"…\"", @@ -899,6 +987,7 @@ mod tests { delete: 20..20, insert: "windows_subsystem = \"${0:subsystem}\"", kind: Attribute, + lookup: "windows_subsystem", }, ] "### -- cgit v1.2.3 From 5aad6c9fa69915c4810a8e93d793d76de211f2ca Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Mon, 22 Jun 2020 13:39:05 +0200 Subject: don't complete top level attrs inside nested attrs and add better labels #4899 Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- crates/ra_ide/src/completion/complete_attribute.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs index 443b3b87d..ade17a1ff 100644 --- a/crates/ra_ide/src/completion/complete_attribute.rs +++ b/crates/ra_ide/src/completion/complete_attribute.rs @@ -20,14 +20,7 @@ pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) { complete_derive(acc, ctx, token_tree) } - (_, Some(ast::AttrInput::TokenTree(token_tree))) => { - let token_tree_str = token_tree.to_string(); - let nested = token_tree_str.starts_with('(') && token_tree_str.ends_with(')'); - - if !nested { - complete_attribute_start(acc, ctx, attribute); - } - } + (_, Some(ast::AttrInput::TokenTree(_token_tree))) => {} _ => complete_attribute_start(acc, ctx, attribute), } Some(()) -- cgit v1.2.3