Assign repository URI to source control in `OpenWorkspaceFolder` events
Dependencies
- [2]
WFWTKCJNCreate initial Visual Studio Code extension - [3]
72K45XKDRefactor inline credit to improve hover messages - [4]
3YGYMEXVCreate `event_loop` module - [5]
TDTLSDFGCreate macro for defining `ThreadsafeFunction`s - [6]
NB2MF3MYAdd `OpenWorkspaceFolder` event
Change contents
- replacement in extensions/vscode/src/vscode_sys/threadsafe_function.rs at line 4
"scm": scm {scm ("scm": napi::bindgen_prelude::Object) { - edit in extensions/vscode/src/vscode_sys/threadsafe_function.rs at line 13[6.289]
threadsafe_function! {uri ("Uri": napi::bindgen_prelude::Function<napi::Unknown, napi::Unknown>) {"file":file(String) -> crate::vscode_sys::reference::UriRef;}} - replacement in extensions/vscode/src/vscode_sys/macros/threadsafe_function.rs at line 3
$js_namespace_name:literal: $module_name:ident {$module_name:ident ($js_parent_name:literal: $js_parent_type:ty){ - replacement in extensions/vscode/src/vscode_sys/macros/threadsafe_function.rs at line 31
pub fn get(env: &napi::Env) -> Result<Prototype, napi::Error> {let vscode_object = crate::vscode_sys::VscodeContext::vscode(env)?;let namespace: napi::bindgen_prelude::Object = vscode_object.get_named_property($js_namespace_name)?;pub fn get(vscode_object: &napi::bindgen_prelude::Object) -> Result<Prototype, napi::Error> {let parent: $js_parent_type = vscode_object.get_named_property($js_parent_name)?; - replacement in extensions/vscode/src/vscode_sys/macros/threadsafe_function.rs at line 34
namespace.get_named_property($function_js_name)parent.get_named_property($function_js_name) - replacement in extensions/vscode/src/lib.rs at line 393
event_loop::start(env)?;event_loop::start(&vscode_object)?; - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 1
use napi::bindgen_prelude::FnArgs;use napi::bindgen_prelude::{FnArgs, Object}; - edit in extensions/vscode/src/event_loop/threadsafe_function.rs at line 7
uri_file: vscode_sys::threadsafe_function::uri::file::Prototype, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 11
pub fn get(env: &napi::Env) -> Result<Self, napi::Error> {pub fn get(vscode_object: &Object) -> Result<Self, napi::Error> { - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 14
vscode_sys::threadsafe_function::scm::create_source_control::get(env)?,vscode_sys::threadsafe_function::scm::create_source_control::get(vscode_object)?,uri_file: vscode_sys::threadsafe_function::uri::file::get(vscode_object)?, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 23
uri: &str,uri: crate::vscode_sys::reference::UriRef, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 25
let arguments = FnArgs::from((id, name, None));let arguments = FnArgs::from((id, name, Some(uri))); - edit in extensions/vscode/src/event_loop/threadsafe_function.rs at line 28
}pub async fn uri_file(&self,path: String,) -> Result<vscode_sys::reference::UriRef, napi::Error> {let arguments = FnArgs::from((path,));self.uri_file.call_async(arguments).await - edit in extensions/vscode/src/event_loop/mod.rs at line 3
use camino::Utf8PathBuf;use iri_string::types::UriAbsoluteStr; - replacement in extensions/vscode/src/event_loop/mod.rs at line 38
Event::OpenWorkspaceFolder { uri } => {// TODO: handle multiple repositories per workspace// TODO: properly handle URIsEvent::OpenWorkspaceFolder { uri: raw_uri } => {let uri = match UriAbsoluteStr::new(raw_uri) {Ok(valid_uri) => valid_uri,Err(error) => {tracing::error!(message = "Invalid URI", ?raw_uri, ?error);continue;}};// TODO: handle different schemes using `vscode.workspace.fs`if uri.scheme_str() != "file" {tracing::info!(message = "Skipping unhandled URI scheme", ?uri);continue;}let workspace_path = Utf8PathBuf::from(uri.path_str());// TODO: multiple repositories per workspacelet repository_path = workspace_path.clone();let repository_uri_ref = match threadsafe_functions.uri_file(repository_path.to_string()).await{Ok(repository_uri_ref) => repository_uri_ref,Err(error) => {tracing::error!(message = "Failed to parse URI",?repository_path,?error);continue;}}; - replacement in extensions/vscode/src/event_loop/mod.rs at line 74
.create_source_control(String::from("pijul"), String::from("Pijul"), uri).create_source_control(String::from("pijul"),String::from("Pijul"),repository_uri_ref,) - edit in extensions/vscode/src/event_loop/mod.rs at line 87
tracing::info!(message = "Opened workspace folder", ?workspace_path); - replacement in extensions/vscode/src/event_loop/mod.rs at line 100
pub fn start(env: &napi::Env) -> Result<(), napi::Error> {let threadsafe_functions = threadsafe_function::ThreadsafeFunctions::get(env)?;pub fn start(vscode_object: &napi::bindgen_prelude::Object) -> Result<(), napi::Error> {let threadsafe_functions = threadsafe_function::ThreadsafeFunctions::get(vscode_object)?; - edit in extensions/vscode/Cargo.toml at line 27
iri-string.workspace = true - edit in Cargo.toml at line 34
iri-string = "0.7" - edit in Cargo.lock at line 1754
name = "iri-string"version = "0.7.9"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"dependencies = ["memchr","serde",][[package]] - edit in Cargo.lock at line 2597
"iri-string",