Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/attribute/feature.rs')
-rw-r--r--crates/ide-completion/src/completions/attribute/feature.rs52
1 files changed, 14 insertions, 38 deletions
diff --git a/crates/ide-completion/src/completions/attribute/feature.rs b/crates/ide-completion/src/completions/attribute/feature.rs
index d662f5d543..1e6baca864 100644
--- a/crates/ide-completion/src/completions/attribute/feature.rs
+++ b/crates/ide-completion/src/completions/attribute/feature.rs
@@ -1,51 +1,27 @@
-//! Completion for lints
-use ide_db::{SymbolKind, documentation::Documentation, generated::lints::Lint};
+//! Completion for features
+use ide_db::{
+ SymbolKind,
+ documentation::Documentation,
+ generated::lints::{FEATURES, Lint},
+};
use syntax::ast;
use crate::{Completions, context::CompletionContext, item::CompletionItem};
-pub(super) fn complete_lint(
+pub(super) fn complete_feature(
acc: &mut Completions,
ctx: &CompletionContext<'_>,
- is_qualified: bool,
- existing_lints: &[ast::Path],
- lints_completions: &[Lint],
+ existing_features: &[ast::Path],
) {
- for &Lint { label, description, .. } in lints_completions {
- // FIXME: change `Lint`'s label to not store a path in it but split the prefix off instead?
- let (qual, name) = match label.split_once("::") {
- Some((qual, name)) => (Some(qual), name),
- None => (None, label),
- };
- if qual.is_none() && is_qualified {
- // qualified completion requested, but this lint is unqualified
- continue;
- }
- let lint_already_annotated = existing_lints
+ for &Lint { label, description, .. } in FEATURES {
+ let feature_already_annotated = existing_features
.iter()
- .filter_map(|path| {
- let q = path.qualifier();
- if q.as_ref().and_then(|it| it.qualifier()).is_some() {
- return None;
- }
- Some((q.and_then(|it| it.as_single_name_ref()), path.segment()?.name_ref()?))
- })
- .any(|(q, name_ref)| {
- let qualifier_matches = match (q, qual) {
- (None, None) => true,
- (None, Some(_)) => false,
- (Some(_), None) => false,
- (Some(q), Some(ns)) => q.text() == ns,
- };
- qualifier_matches && name_ref.text() == name
- });
- if lint_already_annotated {
+ .filter_map(|p| p.as_single_name_ref())
+ .any(|n| n.text() == label);
+ if feature_already_annotated {
continue;
}
- let label = match qual {
- Some(qual) if !is_qualified => format!("{qual}::{name}"),
- _ => name.to_owned(),
- };
+
let mut item =
CompletionItem::new(SymbolKind::Attribute, ctx.source_range(), label, ctx.edition);
item.documentation(Documentation::new_borrowed(description));