languages: Fix symbol label for enum variants (#47210)

Lukas Wirth created

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Change summary

crates/languages/src/rust.rs | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)

Detailed changes

crates/languages/src/rust.rs 🔗

@@ -571,12 +571,22 @@ impl LspAdapter for RustLspAdapter {
             lsp::SymbolKind::METHOD | lsp::SymbolKind::FUNCTION => ("fn ", "();"),
             lsp::SymbolKind::STRUCT => ("struct ", ";"),
             lsp::SymbolKind::ENUM => ("enum ", "{}"),
-            lsp::SymbolKind::ENUM_MEMBER => ("enum E{", "}"),
             lsp::SymbolKind::INTERFACE => ("trait ", "{}"),
             lsp::SymbolKind::CONSTANT => ("const ", ":()=();"),
             lsp::SymbolKind::MODULE => ("mod ", ";"),
             lsp::SymbolKind::PACKAGE => ("extern crate ", ";"),
             lsp::SymbolKind::TYPE_PARAMETER => ("type ", "=();"),
+            lsp::SymbolKind::ENUM_MEMBER => {
+                let prefix = "enum E {";
+                return Some(CodeLabel::new(
+                    name.to_string(),
+                    0..name.len(),
+                    language.highlight_text(
+                        &Rope::from_iter([prefix, name, "}"]),
+                        prefix.len()..prefix.len() + name.len(),
+                    ),
+                ));
+            }
             _ => return None,
         };
 
@@ -1837,6 +1847,17 @@ mod tests {
                 vec![(0..6, highlight_keyword), (7..12, highlight_keyword),],
             ))
         );
+
+        assert_eq!(
+            adapter
+                .label_for_symbol("Variant", lsp::SymbolKind::ENUM_MEMBER, &language)
+                .await,
+            Some(CodeLabel::new(
+                "Variant".to_string(),
+                0..7,
+                vec![(0..7, highlight_type)],
+            ))
+        );
     }
 
     #[gpui::test]