From fe70a2646ffeea3e182e21f6fd79118dbf394f38 Mon Sep 17 00:00:00 2001 From: Thorsten Ball Date: Mon, 11 Mar 2024 20:39:07 +0100 Subject: [PATCH] Fix relative glob patterns not working for language servers (#9179) If a language server would send us a glob pattern like `**/*.rb` or `**/{package.json}` we'd end up ignoring it and never sending the language server any notifications, because we try to `strip_prefix` the projects absolute path from the pattern, BUT if that path is not in the pattern, we'd return `None`. This change fixes that. Release Notes: - Fixed language server glob patterns for file watching being ignored if they were relative patterns. Co-authored-by: Bennet Co-authored-by: Remco --- crates/project/src/project.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index b3b13bd0ba8c832b792b6c26472544f1aff5aece..f4335ea51df9ce815bd91d222e71fa907410d6ed 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -3900,9 +3900,12 @@ impl Project { let glob_is_inside_worktree = worktree.update(cx, |tree, _| { if let Some(abs_path) = tree.abs_path().to_str() { let relative_glob_pattern = match &watcher.glob_pattern { - lsp::GlobPattern::String(s) => s - .strip_prefix(abs_path) - .and_then(|s| s.strip_prefix(std::path::MAIN_SEPARATOR)), + lsp::GlobPattern::String(s) => Some( + s.strip_prefix(abs_path) + .unwrap_or(s) + .strip_prefix(std::path::MAIN_SEPARATOR) + .unwrap_or(s), + ), lsp::GlobPattern::Relative(rp) => { let base_uri = match &rp.base_uri { lsp::OneOf::Left(workspace_folder) => &workspace_folder.uri,