Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/attribute/repr.rs')
-rw-r--r--crates/ide-completion/src/completions/attribute/repr.rs56
1 files changed, 25 insertions, 31 deletions
diff --git a/crates/ide-completion/src/completions/attribute/repr.rs b/crates/ide-completion/src/completions/attribute/repr.rs
index cb7ccf7373..b04358963a 100644
--- a/crates/ide-completion/src/completions/attribute/repr.rs
+++ b/crates/ide-completion/src/completions/attribute/repr.rs
@@ -8,42 +8,36 @@ use crate::{Completions, context::CompletionContext, item::CompletionItem};
pub(super) fn complete_repr(
acc: &mut Completions,
ctx: &CompletionContext<'_>,
- input: ast::TokenTree,
+ existing_reprs: &[ast::Expr],
) {
- if let Some(existing_reprs) = super::parse_comma_sep_expr(input) {
- for &ReprCompletion { label, snippet, lookup, collides } in REPR_COMPLETIONS {
- let repr_already_annotated = existing_reprs
- .iter()
- .filter_map(|expr| match expr {
+ for &ReprCompletion { label, snippet, lookup, collides } in REPR_COMPLETIONS {
+ let repr_already_annotated = existing_reprs
+ .iter()
+ .filter_map(|expr| match expr {
+ ast::Expr::PathExpr(path) => path.path()?.as_single_name_ref(),
+ ast::Expr::CallExpr(call) => match call.expr()? {
ast::Expr::PathExpr(path) => path.path()?.as_single_name_ref(),
- ast::Expr::CallExpr(call) => match call.expr()? {
- ast::Expr::PathExpr(path) => path.path()?.as_single_name_ref(),
- _ => None,
- },
_ => None,
- })
- .any(|it| {
- let text = it.text();
- lookup.unwrap_or(label) == text || collides.contains(&text.as_str())
- });
- if repr_already_annotated {
- continue;
- }
+ },
+ _ => None,
+ })
+ .any(|it| {
+ let text = it.text();
+ lookup.unwrap_or(label) == text || collides.contains(&text.as_str())
+ });
+ if repr_already_annotated {
+ continue;
+ }
- let mut item = CompletionItem::new(
- SymbolKind::BuiltinAttr,
- ctx.source_range(),
- label,
- ctx.edition,
- );
- if let Some(lookup) = lookup {
- item.lookup_by(lookup);
- }
- if let Some((snippet, cap)) = snippet.zip(ctx.config.snippet_cap) {
- item.insert_snippet(cap, snippet);
- }
- item.add_to(acc, ctx.db);
+ let mut item =
+ CompletionItem::new(SymbolKind::BuiltinAttr, ctx.source_range(), label, ctx.edition);
+ if let Some(lookup) = lookup {
+ item.lookup_by(lookup);
+ }
+ if let Some((snippet, cap)) = snippet.zip(ctx.config.snippet_cap) {
+ item.insert_snippet(cap, snippet);
}
+ item.add_to(acc, ctx.db);
}
}