Create simple `FileSystemWatcher`

finchie
Dec 15, 2025, 1:30 PM
VKCHFDMCESSKL5AVZB3PNHAX2N2V4KOQ7OOZ6BHZE2AILFBJ2QMAC

Dependencies

  • [2] WFWTKCJN Create initial Visual Studio Code extension
  • [3] YKBMKWDP Refactor event handling to support both namespaces and objects

Change contents

  • replacement in extensions/vscode/src/vscode_sys/workspace.rs at line 8
    [2.54597][2.54597:54724]()
    TextDocument, TextDocumentChangeEvent, TextDocumentContentProvider, Uri, WorkspaceFolder,
    WorkspaceFoldersChangeEvent,
    [2.54597]
    [2.54724]
    FileSystemWatcher, TextDocument, TextDocumentChangeEvent, TextDocumentContentProvider, Uri,
    WorkspaceFolder, WorkspaceFoldersChangeEvent,
  • edit in extensions/vscode/src/vscode_sys/workspace.rs at line 28
    [2.55235]
    [2.55235]
    "createFileSystemWatcher":
    create_file_system_watcher(
    glob_pattern: &str,
    ) -> FileSystemWatcher<'env>;
  • replacement in extensions/vscode/src/vscode_sys/mod.rs at line 16
    [2.58883][2.58883:58944]()
    function_setter, interface_builder, static_class_method,
    [2.58883]
    [2.58944]
    function_setter, interface_builder, object_event_handler, static_class_method,
  • edit in extensions/vscode/src/vscode_sys/mod.rs at line 179
    [2.63318]
    [2.63318]
    }
    }
    interface_builder! {
    FileSystemWatcher {}
    }
    object_event_handler! {
    FileSystemWatcher {
    "onDidChange": on_did_change(Uri);
    "onDidCreate": on_did_create(Uri);
    "onDidDelete": on_did_delete(Uri);
  • edit in extensions/vscode/src/lib.rs at line 268
    [2.117875]
    [2.117875]
    #[tracing::instrument(skip_all)]
    pub fn handle_fs_watcher_event(env: &napi::Env, uri: vscode_sys::Uri) -> Result<(), napi::Error> {
    let mut extension_state = crate::ExtensionState::get()?;
    if let Some((repository_path, open_repository)) = extension_state
    .repositories
    .get_open_repository_mut(env, &uri)?
    {
    let absolute_file_path = Utf8PathBuf::from(uri.get_fs_path()?);
    let relative_file_path = absolute_file_path
    .strip_prefix(&repository_path)
    .map_err(|error| {
    napi::Error::from_reason(format!(
    "Failed to strip prefix {repository_path} from {absolute_file_path}: {error}"
    ))
    })?
    .to_path_buf();
  • edit in extensions/vscode/src/lib.rs at line 287
    [2.117876]
    [2.117876]
    open_repository
    .repository
    .update_path_state(relative_file_path)
    .map_err(|error| {
    napi::Error::from_reason(format!("Failed to update path state: {error:?}"))
    })?;
    open_repository.update_resource_states(env, &repository_path)?;
    }
    Ok(())
    }
  • edit in extensions/vscode/src/lib.rs at line 383
    [2.120996]
    [2.120996]
    let file_system_watcher = vscode_sys::workspace::create_file_system_watcher(env, "**")?;
    file_system_watcher.on_did_change(env, handle_fs_watcher_event)?;
    file_system_watcher.on_did_create(env, handle_fs_watcher_event)?;
    file_system_watcher.on_did_delete(env, handle_fs_watcher_event)?;