mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Merge #6816
6816: Use natural trait ordering in derive completion r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
15a644d606
2 changed files with 18 additions and 136 deletions
|
@ -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
|
||||
"#]],
|
||||
)
|
||||
|
|
|
@ -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<u8, ()> {
|
||||
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.
|
Loading…
Reference in a new issue