mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-09 11:48:48 +00:00
1834bae5b8
This wasn't a right decision in the first place, the feature flag was broken in the last rustfmt release, and syntax highlighting of imports is more important anyway
89 lines
2.5 KiB
Rust
89 lines
2.5 KiB
Rust
use crate::completion::{CompletionContext, Completions};
|
|
|
|
/// Completes constats and paths in patterns.
|
|
pub(super) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) {
|
|
if !ctx.is_pat_binding {
|
|
return;
|
|
}
|
|
// FIXME: ideally, we should look at the type we are matching against and
|
|
// suggest variants + auto-imports
|
|
let names = ctx.analyzer.all_names(ctx.db);
|
|
for (name, res) in names.into_iter() {
|
|
let r = res.as_ref();
|
|
let def = match r.take_types().or_else(|| r.take_values()) {
|
|
Some(hir::Resolution::Def(def)) => def,
|
|
_ => continue,
|
|
};
|
|
match def {
|
|
hir::ModuleDef::Enum(..)
|
|
| hir::ModuleDef::EnumVariant(..)
|
|
| hir::ModuleDef::Const(..)
|
|
| hir::ModuleDef::Module(..) => (),
|
|
_ => continue,
|
|
}
|
|
acc.add_resolution(ctx, name.to_string(), &res)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::completion::{do_completion, CompletionItem, CompletionKind};
|
|
use insta::assert_debug_snapshot_matches;
|
|
|
|
fn complete(code: &str) -> Vec<CompletionItem> {
|
|
do_completion(code, CompletionKind::Reference)
|
|
}
|
|
|
|
#[test]
|
|
fn completes_enum_variants_and_modules() {
|
|
let completions = complete(
|
|
r"
|
|
enum E { X }
|
|
use self::E::X;
|
|
const Z: E = E::X;
|
|
mod m {}
|
|
|
|
static FOO: E = E::X;
|
|
struct Bar { f: u32 }
|
|
|
|
fn foo() {
|
|
match E::X {
|
|
<|>
|
|
}
|
|
}
|
|
",
|
|
);
|
|
assert_debug_snapshot_matches!(completions, @r###"
|
|
⋮[
|
|
⋮ CompletionItem {
|
|
⋮ label: "E",
|
|
⋮ source_range: [246; 246),
|
|
⋮ delete: [246; 246),
|
|
⋮ insert: "E",
|
|
⋮ kind: Enum,
|
|
⋮ },
|
|
⋮ CompletionItem {
|
|
⋮ label: "X",
|
|
⋮ source_range: [246; 246),
|
|
⋮ delete: [246; 246),
|
|
⋮ insert: "X",
|
|
⋮ kind: EnumVariant,
|
|
⋮ },
|
|
⋮ CompletionItem {
|
|
⋮ label: "Z",
|
|
⋮ source_range: [246; 246),
|
|
⋮ delete: [246; 246),
|
|
⋮ insert: "Z",
|
|
⋮ kind: Const,
|
|
⋮ },
|
|
⋮ CompletionItem {
|
|
⋮ label: "m",
|
|
⋮ source_range: [246; 246),
|
|
⋮ delete: [246; 246),
|
|
⋮ insert: "m",
|
|
⋮ kind: Module,
|
|
⋮ },
|
|
⋮]
|
|
"###);
|
|
}
|
|
}
|