Skip to content

Commit 85bd2a4

Browse files
refactor(Mountain): Standardize Tauri event channel naming to kebab-case
Consolidate all `sky://` event channel names to a consistent kebab-case format and emit TreeView registration events to the canonical path. Changes: - `sky://treeView/register` → `SkyEvent::TreeViewCreate` (canonical path) - `sky://webview/setHtml` → `sky://webview/set-html` - `sky://webview/postMessage` → `sky://webview/post-message` - `sky://status-bar/*` → `sky://statusbar/*` (remove hyphen to match family) - `sky://status-bar/message` → `sky://statusbar/set-message` Also emit `SkyEvent::TreeViewCreate` after a TreeDataProvider is registered so the renderer can wire up the data provider to the matching ITreeView instance. Without this, VS Code's treeView.ts keeps `_dataProvider === undefined` and all extension tree views (GitLens, debug, SCM, tasks) render empty. The previous diverged channel names were parallel forks that no downstream listener ever subscribed to. Impact: Extension tree views now render correctly with data from providers.
1 parent 4531024 commit 85bd2a4

5 files changed

Lines changed: 51 additions & 14 deletions

File tree

Source/RPC/CocoonService/TreeView.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use serde_json::json;
77
use tauri::Emitter;
88
use tonic::{Response, Status};
9-
use CommonLibrary::LanguageFeature::DTO::ProviderType::ProviderType;
9+
use CommonLibrary::{IPC::SkyEvent::SkyEvent, LanguageFeature::DTO::ProviderType::ProviderType};
1010

1111
use super::CocoonServiceImpl;
1212
use crate::{
@@ -41,8 +41,13 @@ pub async fn RegisterTreeViewProvider(
4141
.ProviderRegistration
4242
.RegisterProvider(Handle, dto);
4343

44+
// Emit on the canonical `SkyEvent::TreeViewCreate` channel so the
45+
// renderer's SkyBridge listener (and every downstream `cel:tree-view`
46+
// consumer) picks it up via the same path used by the generic
47+
// `tree.register` effect. The previous `sky://treeView/register`
48+
// channel was a parallel fork that no listener ever subscribed to.
4449
let _ = Service.environment.ApplicationHandle.emit(
45-
"sky://treeView/register",
50+
SkyEvent::TreeViewCreate.AsStr(),
4651
json!({ "viewId": req.view_id, "extensionId": req.extension_id }),
4752
);
4853

Source/RPC/CocoonService/Window.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,11 @@ pub async fn SetWebviewHtml(Service:&CocoonServiceImpl, req:SetWebviewHtmlReques
189189
req.html.len()
190190
);
191191

192+
// Canonical kebab-case channel; `sky://webview/setHtml` has been retired.
192193
let _ = Service
193194
.environment
194195
.ApplicationHandle
195-
.emit("sky://webview/setHtml", json!({ "handle": req.handle, "html": req.html }));
196+
.emit("sky://webview/set-html", json!({ "handle": req.handle, "html": req.html }));
196197

197198
Ok(Response::new(Empty {}))
198199
}
@@ -229,8 +230,9 @@ pub async fn PostWebviewMessage(
229230
None => serde_json::Value::Null,
230231
};
231232

233+
// Canonical kebab-case channel; `sky://webview/postMessage` has been retired.
232234
let _ = Service.environment.ApplicationHandle.emit(
233-
"sky://webview/postMessage",
235+
"sky://webview/post-message",
234236
json!({
235237
"handle": req.handle,
236238
"message": MessagePayload,

Source/RPC/CocoonService/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,10 +750,11 @@ impl CocoonService for CocoonServiceImpl {
750750
use tauri::Emitter;
751751
let Handle = Params.get("handle").and_then(|V| V.as_u64()).unwrap_or(0);
752752
let Html = Params.get("html").and_then(|V| V.as_str()).unwrap_or("").to_string();
753+
// Canonical kebab-case channel; `sky://webview/setHtml` retired.
753754
let _ = self
754755
.environment
755756
.ApplicationHandle
756-
.emit("sky://webview/setHtml", json!({ "handle": Handle, "html": Html }));
757+
.emit("sky://webview/set-html", json!({ "handle": Handle, "html": Html }));
757758
Ok(OkResponse(RequestId, &json!({ "success": true })))
758759
},
759760
// ---- Workspace (Cocoon MountainGRPCClient format) ----

Source/Track/Effect/CreateEffectForRequest/TreeView.rs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
use std::{future::Future, pin::Pin, sync::Arc};
44

5-
use CommonLibrary::{Environment::Requires::Requires, TreeView::TreeViewProvider::TreeViewProvider};
5+
use CommonLibrary::{Environment::Requires::Requires, IPC::SkyEvent::SkyEvent, TreeView::TreeViewProvider::TreeViewProvider};
66
use serde_json::{Value, json};
7-
use tauri::Runtime;
7+
use tauri::{Emitter, Runtime};
88

99
use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect, dev_log};
1010

@@ -52,7 +52,7 @@ pub fn CreateEffect<R:Runtime>(
5252
ViewIdForLog,
5353
BodyStartNs
5454
);
55-
let Result = provider.RegisterTreeDataProvider(view_id, options).await;
55+
let Result = provider.RegisterTreeDataProvider(view_id.clone(), options.clone()).await;
5656
let RegisteredNs = std::time::SystemTime::now()
5757
.duration_since(std::time::UNIX_EPOCH)
5858
.map(|D| D.as_nanos())
@@ -64,6 +64,32 @@ pub fn CreateEffect<R:Runtime>(
6464
DispatchAt.elapsed().as_millis(),
6565
RegisteredNs
6666
);
67+
68+
// Notify Wind/Sky that a data provider now exists for this
69+
// view, so the renderer can set `treeView.dataProvider` on
70+
// the matching ITreeView instance and replace the default
71+
// "no data provider registered" message. Without this
72+
// emit, `vs/workbench/browser/parts/views/treeView.ts`
73+
// keeps `_dataProvider === undefined` and every extension
74+
// tree view stays empty (GitLens, debug, SCM, tasks, etc.).
75+
if Result.is_ok() {
76+
if let Err(Error) = run_time.Environment.ApplicationHandle.emit(
77+
SkyEvent::TreeViewCreate.AsStr(),
78+
json!({
79+
"viewId": view_id,
80+
"options": options,
81+
}),
82+
) {
83+
dev_log!(
84+
"grpc",
85+
"warn: [LandFix:Tree] failed to emit {} for view={}: {}",
86+
SkyEvent::TreeViewCreate.AsStr(),
87+
ViewIdForLog,
88+
Error
89+
);
90+
}
91+
}
92+
6793
Result.map(|_| json!(null)).map_err(|e| e.to_string())
6894
})
6995
};

Source/Vine/Server/MountainVinegRPCService.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -722,29 +722,32 @@ impl MountainService for MountainVinegRPCService {
722722
// `vscode.window.createStatusBarItem(...)` instance fires
723723
// `statusBar.update` with its text/tooltip/alignment. Sky's
724724
// workbench status-bar renderer subscribes to the downstream
725-
// Tauri event.
725+
// Tauri event. Canonical channel prefix is `sky://statusbar/`
726+
// (no hyphen) to match the `sky://statusbar/*` family every
727+
// other emit site uses.
726728
"statusBar.update" | "statusBar.dispose" => {
727-
let EventName = format!("sky://status-bar/{}", &MethodName["statusBar.".len()..]);
729+
let EventName = format!("sky://statusbar/{}", &MethodName["statusBar.".len()..]);
728730
if let Err(Error) = self.ApplicationHandle.emit(&EventName, &Parameter) {
729731
dev_log!("grpc", "warn: [MountainVinegRPCService] {} emit failed: {}", EventName, Error);
730732
}
731733
},
732734
// Cocoon → Mountain → Sky: status-bar messages from extensions.
733-
// Fire as a `sky://status-bar/message` event so the workbench's
734-
// status-bar component can render the text.
735+
// Canonical channel is `sky://statusbar/set-message` (matching
736+
// the rest of the `sky://statusbar/*` family); the legacy
737+
// `sky://status-bar/message` fork has been retired.
735738
"statusBar.message" => {
736739
let Text = Parameter.get("text").and_then(|h| h.as_str()).unwrap_or("");
737740
let HideAfter = Parameter.get("hideAfter").and_then(|h| h.as_u64());
738741
if let Err(Error) = self.ApplicationHandle.emit(
739-
"sky://status-bar/message",
742+
"sky://statusbar/set-message",
740743
json!({
741744
"text": Text,
742745
"hideAfter": HideAfter,
743746
}),
744747
) {
745748
dev_log!(
746749
"grpc",
747-
"warn: [MountainVinegRPCService] sky://status-bar/message emit failed: {}",
750+
"warn: [MountainVinegRPCService] sky://statusbar/set-message emit failed: {}",
748751
Error
749752
);
750753
}

0 commit comments

Comments
 (0)