From feb9a84048738520aa2743e114d522e4eeb605fa Mon Sep 17 00:00:00 2001 From: Smit Barmase Date: Fri, 5 Sep 2025 00:22:46 +0530 Subject: [PATCH] vtsls on vue --- assets/settings/default.json | 2 +- .../src/lsp_store/vue_language_server_ext.rs | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index 091231521470ebec50cf1351a76063e9205a3d24..067c54c81c50d036ca09b80ee332895d894f9932 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -1769,7 +1769,7 @@ "use_on_type_format": false }, "Vue.js": { - "language_servers": ["vue-language-server", "..."], + "language_servers": ["vue-language-server", "vtsls", "..."], "prettier": { "allowed": true } diff --git a/crates/project/src/lsp_store/vue_language_server_ext.rs b/crates/project/src/lsp_store/vue_language_server_ext.rs index 82ce59506c320bfe0c1e7307bc13edadcc97bb2b..3af65114ec70b9da334f5c4e56a007b805925cc0 100644 --- a/crates/project/src/lsp_store/vue_language_server_ext.rs +++ b/crates/project/src/lsp_store/vue_language_server_ext.rs @@ -15,12 +15,15 @@ struct ServerRequestParams { } #[derive(Serialize, Deserialize)] -struct ServerRequestArguments {} +#[serde(untagged)] +enum ServerRequestArguments { + Data(String, serde_json::Value, Option), +} impl lsp::request::Request for TypescriptServerRequest { type Params = ServerRequestParams; - type Result = (); + type Result = serde_json::Value; const METHOD: &'static str = "tsserver/request"; } @@ -28,7 +31,7 @@ impl lsp::request::Request for TypescriptServerRequest { impl lsp::request::Request for TypescriptServerResponse { type Params = serde_json::Value; - type Result = (); + type Result = serde_json::Value; const METHOD: &'static str = "tsserver/response"; } @@ -37,9 +40,23 @@ const VUE_SERVER_NAME: LanguageServerName = LanguageServerName::new_static("vue- const VTSLS: LanguageServerName = LanguageServerName::new_static("vtsls"); const TS_LS: LanguageServerName = LanguageServerName::new_static("typescript-language-server"); +// todo: +// +// 1. figure out req/res cycle +// +// What's the request and response name I should handle/send to vue language server? +// The request and response names are not configurable: +// Request(receive from vue lsp): tsserver/request +// Response(send to vue lsp): tsserver/response +// +// 2. why hvoer/diagnsotic not working currently in vue +// 3. when do we get tserver/reqest from vue lsp??? +// +// pub fn register_requests(lsp_store: WeakEntity, language_server: &LanguageServer) { let language_server_name = language_server.name(); if language_server_name == VUE_SERVER_NAME { + let vue_server_id = language_server.server_id(); language_server .on_request::({ let this = lsp_store.clone(); @@ -66,6 +83,7 @@ pub fn register_requests(lsp_store: WeakEntity, language_server: &Lang .request::(params) .await .into_response() + .map(|e| dbg!(e)) } } })