Add `MovePath` event
Dependencies
- [2]
VKCHFDMCCreate simple `FileSystemWatcher` - [3]
57DXWD6GHandle file rename/move events in VS Code extension - [4]
2ZAM5V35Move event handling into modules - [5]
M5RW5PN4Add `OpenTextEditor` event - [6]
XRFRJHZMAdd `ChangedFilesystemContents` event - [7]
WFWTKCJNCreate initial Visual Studio Code extension - [*]
3YGYMEXVCreate `event_loop` module
Change contents
- replacement in editors/vscode/src/lib.rs at line 263
env: &napi::Env,_env: &napi::Env, - edit in editors/vscode/src/lib.rs at line 266
let mut extension_state = ExtensionState::get()?; - replacement in editors/vscode/src/lib.rs at line 267
let old_uri = renamed_file.get_old_uri()?;let new_uri = renamed_file.get_new_uri()?;let old_absolute_path = Utf8PathBuf::from(old_uri.get_fs_path()?);let new_absolute_path = Utf8PathBuf::from(new_uri.get_fs_path()?);let old_vscode_uri = renamed_file.get_old_uri()?;let new_vscode_uri = renamed_file.get_new_uri()?; - replacement in editors/vscode/src/lib.rs at line 270
// TODO: handle renaming/moves across workspacesif let Some((workspace_path, open_repository)) = extension_state.repositories.get_open_repository_mut(env, &old_uri)?{let old_relative_path =old_absolute_path.strip_prefix(&workspace_path).map_err(|error| {napi::Error::from_reason(format!("Path {old_absolute_path} not in {workspace_path}: {error}"))})?;let new_relative_path =new_absolute_path.strip_prefix(&workspace_path).map_err(|error| {napi::Error::from_reason(format!("Path {new_absolute_path} not in {workspace_path}: {error}"))})?;let old_uri = uri::from_vscode(&old_vscode_uri)?;let new_uri = uri::from_vscode(&new_vscode_uri)?; - replacement in editors/vscode/src/lib.rs at line 273
open_repository.repository.move_path(old_relative_path, new_relative_path.to_path_buf()).map_err(|error| {napi::Error::from_reason(format!("Unable to move {old_absolute_path} to {new_absolute_path}: {error:#?}"))})?;open_repository.update_resource_states(env, &workspace_path)?;} else {tracing::info!(message = "Ignoring move outside of workspace",?old_absolute_path,?new_absolute_path);}event_loop::send(Event::MovePath { old_uri, new_uri }); - edit in editors/vscode/src/event_loop/mod.rs at line 141
Event::MovePath { old_uri, new_uri } => {event::move_path::handle(old_uri, new_uri, &mut extension_state).await} - file addition: move_path.rs[4.332]
use camino::Utf8PathBuf;use iri_string::types::UriAbsoluteString;use crate::event_loop::ExtensionState;#[tracing::instrument(skip(extension_state))]pub async fn handle(old_uri: UriAbsoluteString,new_uri: UriAbsoluteString,extension_state: &mut ExtensionState,) {let Some((repository_path, old_path, repository)) =extension_state.get_repository_mut(&old_uri)else {tracing::info!(message = "Ignoring filesystem changes");return;};if new_uri.scheme_str() != "file" {tracing::info!(message = "Ignoring move to unsupported URI");return;}// TODO: handle moving between repositories, and in/out of themlet new_path = Utf8PathBuf::from(new_uri.path_str()).strip_prefix(repository_path).unwrap().to_path_buf();match repository.repository.move_path(old_path, new_path) {Ok(()) => {tracing::info!(message = "Moved paths");}Err(error) => {tracing::error!(message = "Failed to move paths", ?error);}}} - edit in editors/vscode/src/event_loop/event/mod.rs at line 8
pub mod move_path; - edit in editors/vscode/src/event_loop/event/mod.rs at line 35
MovePath {old_uri: UriAbsoluteString,new_uri: UriAbsoluteString,},