Include enum variants in world symbols
I opted to not include enum variant imports, only under the enum, and to not gate this behind a setting.
diff --git a/crates/hir/src/symbols.rs b/crates/hir/src/symbols.rs
index 7566508..dca1019 100644
--- a/crates/hir/src/symbols.rs
+++ b/crates/hir/src/symbols.rs
@@ -125,6 +125,13 @@
}
ModuleDefId::AdtId(AdtId::EnumId(id)) => {
this.push_decl(id, name, false, None);
+ let enum_name = this.db.enum_signature(id).name.as_str().to_smolstr();
+ this.with_container_name(Some(enum_name), |this| {
+ let variants = id.enum_variants(this.db);
+ for (variant_id, variant_name, _) in &variants.variants {
+ this.push_decl(*variant_id, variant_name, true, None);
+ }
+ });
}
ModuleDefId::AdtId(AdtId::UnionId(id)) => {
this.push_decl(id, name, false, None);
diff --git a/crates/ide-db/src/test_data/test_symbol_index_collection.txt b/crates/ide-db/src/test_data/test_symbol_index_collection.txt
index de046e7..973256c 100644
--- a/crates/ide-db/src/test_data/test_symbol_index_collection.txt
+++ b/crates/ide-db/src/test_data/test_symbol_index_collection.txt
@@ -11,6 +11,40 @@
},
[
FileSymbol {
+ name: "A",
+ def: Variant(
+ Variant {
+ id: EnumVariantId(
+ 7800,
+ ),
+ },
+ ),
+ loc: DeclarationLocation {
+ hir_file_id: FileId(
+ EditionedFileId(
+ Id(2000),
+ ),
+ ),
+ ptr: SyntaxNodePtr {
+ kind: VARIANT,
+ range: 201..202,
+ },
+ name_ptr: AstPtr(
+ SyntaxNodePtr {
+ kind: NAME,
+ range: 201..202,
+ },
+ ),
+ },
+ container_name: Some(
+ "Enum",
+ ),
+ is_alias: false,
+ is_assoc: true,
+ is_import: false,
+ do_not_complete: Yes,
+ },
+ FileSymbol {
name: "Alias",
def: TypeAlias(
TypeAlias {
@@ -43,6 +77,40 @@
do_not_complete: Yes,
},
FileSymbol {
+ name: "B",
+ def: Variant(
+ Variant {
+ id: EnumVariantId(
+ 7801,
+ ),
+ },
+ ),
+ loc: DeclarationLocation {
+ hir_file_id: FileId(
+ EditionedFileId(
+ Id(2000),
+ ),
+ ),
+ ptr: SyntaxNodePtr {
+ kind: VARIANT,
+ range: 204..205,
+ },
+ name_ptr: AstPtr(
+ SyntaxNodePtr {
+ kind: NAME,
+ range: 204..205,
+ },
+ ),
+ },
+ container_name: Some(
+ "Enum",
+ ),
+ is_alias: false,
+ is_assoc: true,
+ is_import: false,
+ do_not_complete: Yes,
+ },
+ FileSymbol {
name: "CONST",
def: Const(
Const {