//! 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_feature(
acc: &mut Completions,
ctx: &CompletionContext<'_, '_>,
existing_features: &[ast::Path],
) {
for &Lint { label, description, .. } in FEATURES {
let feature_already_annotated = existing_features
.iter()
.filter_map(|p| p.as_single_name_ref())
.any(|n| n.text() == label);
if feature_already_annotated {
continue;
}
let mut item =
CompletionItem::new(SymbolKind::Attribute, ctx.source_range(), label, ctx.edition);
item.documentation(Documentation::new_borrowed(description));
item.add_to(acc, ctx.db)
}
}