From e40e5d4781fc949732cf73a8d714fec3931cefe2 Mon Sep 17 00:00:00 2001 From: luisalias007-cmyk Date: Fri, 29 May 2026 20:32:23 -0600 Subject: [PATCH] Add workspace symbol alias regression test --- src/symbol.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/symbol.rs b/src/symbol.rs index aff90d27..68132f78 100644 --- a/src/symbol.rs +++ b/src/symbol.rs @@ -148,10 +148,65 @@ fn map_to_lsp_tree(tree: Vec) -> Vec { #[cfg(test)] mod test { + use std::{ + fs, + time::{SystemTime, UNIX_EPOCH}, + }; + use crate::{ + config::Settings, symbol, - vault::{HeadingLevel, MDHeading}, + vault::{HeadingLevel, MDHeading, Vault}, }; + use itertools::Itertools; + use tower_lsp::lsp_types::WorkspaceSymbolParams; + + fn workspace_symbol_params(query: &str) -> WorkspaceSymbolParams { + WorkspaceSymbolParams { + query: query.to_string(), + work_done_progress_params: Default::default(), + partial_result_params: Default::default(), + } + } + + #[test] + fn test_workspace_symbols_include_frontmatter_aliases() { + let unique = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_nanos(); + let root = std::env::temp_dir().join(format!("moxide-workspace-symbol-alias-{unique}")); + + fs::create_dir_all(&root).unwrap(); + fs::write( + root.join("Canonical Note.md"), + "---\naliases:\n - Moon Alias\n - Another Alias\n---\n\n# Heading\n", + ) + .unwrap(); + + let settings = Settings::new(&root, &Default::default()).unwrap(); + let vault = Vault::construct_vault(&settings, &root).unwrap(); + + let all_symbols = super::workspace_symbol(&vault, &workspace_symbol_params("")) + .unwrap() + .into_iter() + .map(|symbol| symbol.name) + .collect_vec(); + + assert!(all_symbols.contains(&"Canonical Note".to_string())); + assert!(all_symbols.contains(&"Moon Alias".to_string())); + assert!(all_symbols.contains(&"Another Alias".to_string())); + + let alias_matches = super::workspace_symbol(&vault, &workspace_symbol_params("moon")) + .unwrap() + .into_iter() + .map(|symbol| symbol.name) + .collect_vec(); + + assert!(alias_matches.contains(&"Moon Alias".to_string())); + + fs::remove_dir_all(root).ok(); + } #[test] fn test_simple_tree() {