diff --git a/crates/completion/src/completions/attribute.rs b/crates/completion/src/completions/attribute.rs index 5404145d55..acce2e7e7a 100644 --- a/crates/completion/src/completions/attribute.rs +++ b/crates/completion/src/completions/attribute.rs @@ -3,6 +3,7 @@ //! This module uses a bit of static metadata to provide completions //! for built-in attributes. +use itertools::Itertools; use rustc_hash::FxHashSet; use syntax::{ast, AstNode, SyntaxKind}; @@ -162,19 +163,20 @@ const ATTRIBUTES: &[AttrCompletion] = &[ fn complete_derive(acc: &mut Completions, ctx: &CompletionContext, derive_input: ast::TokenTree) { if let Ok(existing_derives) = parse_comma_sep_input(derive_input) { for derive_completion in DEFAULT_DERIVE_COMPLETIONS - .into_iter() + .iter() .filter(|completion| !existing_derives.contains(completion.label)) { - let mut label = derive_completion.label.to_owned(); - for dependency in derive_completion - .dependencies - .into_iter() - .filter(|&&dependency| !existing_derives.contains(dependency)) - { - label.push_str(", "); - label.push_str(dependency); - } + let mut components = vec![derive_completion.label]; + components.extend( + derive_completion + .dependencies + .iter() + .filter(|&&dependency| !existing_derives.contains(dependency)), + ); + let lookup = components.join(", "); + let label = components.iter().rev().join(", "); CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), label) + .lookup_by(lookup) .kind(CompletionItemKind::Attribute) .add_to(acc) } @@ -264,7 +266,6 @@ struct DeriveCompletion { /// Standard Rust derives and the information about their dependencies /// (the dependencies are needed so that the main derive don't break the compilation when added) -#[rustfmt::skip] const DEFAULT_DERIVE_COMPLETIONS: &[DeriveCompletion] = &[ DeriveCompletion { label: "Clone", dependencies: &[] }, DeriveCompletion { label: "Copy", dependencies: &["Clone"] }, @@ -421,14 +422,14 @@ struct Test {} "#, expect![[r#" at Clone - at Copy, Clone + at Clone, Copy at Debug at Default - at Eq, PartialEq at Hash - at Ord, PartialOrd, Eq, PartialEq at PartialEq - at PartialOrd, PartialEq + at PartialEq, Eq + at PartialEq, Eq, PartialOrd, Ord + at PartialEq, PartialOrd "#]], ); } @@ -453,12 +454,12 @@ struct Test {} "#, expect![[r#" at Clone - at Copy, Clone + at Clone, Copy at Debug at Default at Eq + at Eq, PartialOrd, Ord at Hash - at Ord, PartialOrd, Eq at PartialOrd "#]], ) diff --git a/docs/user/generated_diagnostic.adoc b/docs/user/generated_diagnostic.adoc deleted file mode 100644 index ec8581a03c..0000000000 --- a/docs/user/generated_diagnostic.adoc +++ /dev/null @@ -1,119 +0,0 @@ -//Generated file, do not edit by hand, see `xtask/src/codegen` -=== break-outside-of-loop -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L219[diagnostics.rs] - -This diagnostic is triggered if `break` keyword is used outside of a loop. - - -=== inactive-code -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L98[diagnostics.rs] - -This diagnostic is shown for code with inactive `#[cfg]` attributes. - - -=== incorrect-ident-case -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L319[diagnostics.rs] - -This diagnostic is triggered if item name doesn't follow https://doc.rust-lang.org/1.0.0/style/style/naming/README.html[Rust naming convention]. - - -=== macro-error -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L167[diagnostics.rs] - -This diagnostic is shown for macro expansion errors. - - -=== mismatched-arg-count -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L267[diagnostics.rs] - -This diagnostic is triggered if function is invoked with an incorrect amount of arguments. - - -=== missing-match-arm -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L162[diagnostics.rs] - -This diagnostic is triggered if `match` block is missing one or more match arms. - - -=== missing-ok-in-tail-expr -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L187[diagnostics.rs] - -This diagnostic is triggered if block that should return `Result` returns a value not wrapped in `Ok`. - -Example: - -```rust -fn foo() -> Result { - 10 -} -``` - - -=== missing-pat-fields -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L113[diagnostics.rs] - -This diagnostic is triggered if pattern lacks some fields that exist in the corresponding structure. - -Example: - -```rust -struct A { a: u8, b: u8 } - -let a = A { a: 10, b: 20 }; - -if let A { a } = a { - // ... -} -``` - - -=== missing-structure-fields -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L66[diagnostics.rs] - -This diagnostic is triggered if record lacks some fields that exist in the corresponding structure. - -Example: - -```rust -struct A { a: u8, b: u8 } - -let a = A { a: 10 }; -``` - - -=== missing-unsafe -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L243[diagnostics.rs] - -This diagnostic is triggered if operation marked as `unsafe` is used outside of `unsafe` function or block. - - -=== no-such-field -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_ty/src/diagnostics.rs#L39[diagnostics.rs] - -This diagnostic is triggered if created structure does not have field provided in record. - - -=== unresolved-extern-crate -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L43[diagnostics.rs] - -This diagnostic is triggered if rust-analyzer is unable to discover referred extern crate. - - -=== unresolved-import -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L67[diagnostics.rs] - -This diagnostic is triggered if rust-analyzer is unable to discover imported module. - - -=== unresolved-module -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L18[diagnostics.rs] - -This diagnostic is triggered if rust-analyzer is unable to discover referred module. - - -=== unresolved-proc-macro -**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/hir_def/src/diagnostics.rs#L131[diagnostics.rs] - -This diagnostic is shown when a procedural macro can not be found. This usually means that -procedural macro support is simply disabled (and hence is only a weak hint instead of an error), -but can also indicate project setup problems.