Fix relative glob patterns not working for language servers (#9179)

Thorsten Ball , Bennet , and Remco created

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 <bennetbo@gmx.de>
Co-authored-by: Remco <djsmits12@gmail.com>

Change summary

crates/project/src/project.rs | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

Detailed changes

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,