Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-lsp/src/file_operations.rs')
-rw-r--r--helix-lsp/src/file_operations.rs105
1 files changed, 0 insertions, 105 deletions
diff --git a/helix-lsp/src/file_operations.rs b/helix-lsp/src/file_operations.rs
deleted file mode 100644
index 98ac32a4..00000000
--- a/helix-lsp/src/file_operations.rs
+++ /dev/null
@@ -1,105 +0,0 @@
-use std::path::Path;
-
-use globset::{GlobBuilder, GlobSet};
-
-use crate::lsp;
-
-#[derive(Default, Debug)]
-pub(crate) struct FileOperationFilter {
- dir_globs: GlobSet,
- file_globs: GlobSet,
-}
-
-impl FileOperationFilter {
- fn new(capability: Option<&lsp::FileOperationRegistrationOptions>) -> FileOperationFilter {
- let Some(cap) = capability else {
- return FileOperationFilter::default();
- };
- let mut dir_globs = GlobSet::builder();
- let mut file_globs = GlobSet::builder();
- for filter in &cap.filters {
- // TODO: support other url schemes
- let is_non_file_schema = filter
- .scheme
- .as_ref()
- .is_some_and(|schema| schema != "file");
- if is_non_file_schema {
- continue;
- }
- let ignore_case = filter
- .pattern
- .options
- .as_ref()
- .and_then(|opts| opts.ignore_case)
- .unwrap_or(false);
- let mut glob_builder = GlobBuilder::new(&filter.pattern.glob);
- glob_builder.case_insensitive(!ignore_case);
- let glob = match glob_builder.build() {
- Ok(glob) => glob,
- Err(err) => {
- log::error!("invalid glob send by LS: {err}");
- continue;
- }
- };
- match filter.pattern.matches {
- Some(lsp::FileOperationPatternKind::File) => {
- file_globs.add(glob);
- }
- Some(lsp::FileOperationPatternKind::Folder) => {
- dir_globs.add(glob);
- }
- None => {
- file_globs.add(glob.clone());
- dir_globs.add(glob);
- }
- };
- }
- let file_globs = file_globs.build().unwrap_or_else(|err| {
- log::error!("invalid globs send by LS: {err}");
- GlobSet::empty()
- });
- let dir_globs = dir_globs.build().unwrap_or_else(|err| {
- log::error!("invalid globs send by LS: {err}");
- GlobSet::empty()
- });
- FileOperationFilter {
- dir_globs,
- file_globs,
- }
- }
-
- pub(crate) fn has_interest(&self, path: &Path, is_dir: bool) -> bool {
- if is_dir {
- self.dir_globs.is_match(path)
- } else {
- self.file_globs.is_match(path)
- }
- }
-}
-
-#[derive(Default, Debug)]
-pub(crate) struct FileOperationsInterest {
- // TODO: support other notifications
- // did_create: FileOperationFilter,
- // will_create: FileOperationFilter,
- pub did_rename: FileOperationFilter,
- pub will_rename: FileOperationFilter,
- // did_delete: FileOperationFilter,
- // will_delete: FileOperationFilter,
-}
-
-impl FileOperationsInterest {
- pub fn new(capabilities: &lsp::ServerCapabilities) -> FileOperationsInterest {
- let capabilities = capabilities
- .workspace
- .as_ref()
- .and_then(|capabilities| capabilities.file_operations.as_ref());
- let Some(capabilities) = capabilities else {
- return FileOperationsInterest::default();
- };
- FileOperationsInterest {
- did_rename: FileOperationFilter::new(capabilities.did_rename.as_ref()),
- will_rename: FileOperationFilter::new(capabilities.will_rename.as_ref()),
- }
- }
-}