Completions,
};
+mod cfg;
mod derive;
mod lint;
+mod repr;
pub(crate) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> {
let attribute = ctx.attribute_under_caret.as_ref()?;
match (attribute.path().and_then(|p| p.as_single_name_ref()), attribute.token_tree()) {
(Some(path), Some(token_tree)) => match path.text().as_str() {
"derive" => derive::complete_derive(acc, ctx, token_tree),
+ "repr" => repr::complete_repr(acc, ctx, token_tree),
"feature" => lint::complete_lint(acc, ctx, token_tree, FEATURES),
"allow" | "warn" | "deny" | "forbid" => {
lint::complete_lint(acc, ctx, token_tree.clone(), DEFAULT_LINTS);
lint::complete_lint(acc, ctx, token_tree, CLIPPY_LINTS);
}
+ "cfg" => {
+ cfg::complete_cfg(acc, ctx);
+ }
_ => (),
},
(None, Some(_)) => (),
});
const EXPR_ATTRIBUTES: &[&str] = attrs!();
-/// https://doc.rust-lang.org/reference/attributes.html#built-in-attributes-index
+/// <https://doc.rust-lang.org/reference/attributes.html#built-in-attributes-index>
// Keep these sorted for the binary search!
const ATTRIBUTES: &[AttrCompletion] = &[
attr("allow(…)", Some("allow"), Some("allow(${0:lint})")),
use expect_test::{expect, Expect};
- use crate::{test_utils::completion_list, CompletionKind};
+ use crate::tests::completion_list;
#[test]
fn attributes_are_sorted() {
}
fn check(ra_fixture: &str, expect: Expect) {
- let actual = completion_list(ra_fixture, CompletionKind::Attribute);
+ let actual = completion_list(ra_fixture);
expect.assert_eq(&actual);
}
#[test]
fn complete_attribute_on_expr() {
+ cov_mark::check!(no_keyword_completion_in_attr_of_expr);
check(
r#"fn main() { #[$0] foo() }"#,
expect![[r#"
"#]],
);
}
+
+ #[test]
+ fn test_cfg() {
+ check(
+ r#"#[cfg(target_endian = $0"#,
+ expect![[r#"
+ at little
+ at big
+"#]],
+ );
+ }
}