mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00

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,
|
|
⋮ },
|
|
⋮]
|
|
"###);
|
|
}
|
|
}
|