From 345361cd38ddb2196f8a4bbfbe279b836a965c95 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Mon, 27 May 2024 11:50:45 +0200 Subject: [PATCH] json: Register tasks on Rust side and not via tasks.json (#12345) /cc @RemcoSmitsDev new task indicators weren't showing for me in JSON files. `tasks.json` of native grammars is not being read by anything by default, so we tend to register tasks as Rust structs, foregoing the deserialization step. This doesn't apply to tasks registered in extensions, which have to have tasks.json. Release Notes: - N/A --- crates/languages/src/json.rs | 21 +++++++++++++++++++++ crates/languages/src/json/tasks.json | 14 -------------- crates/languages/src/lib.rs | 4 +++- 3 files changed, 24 insertions(+), 15 deletions(-) delete mode 100644 crates/languages/src/json/tasks.json diff --git a/crates/languages/src/json.rs b/crates/languages/src/json.rs index 442f0afff1738338f52365252ae8d098fb685832..74a249f915e4f5872477efa59cc50340e0c23675 100644 --- a/crates/languages/src/json.rs +++ b/crates/languages/src/json.rs @@ -7,6 +7,7 @@ use gpui::{AppContext, AsyncAppContext}; use language::{LanguageRegistry, LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; +use project::ContextProviderWithTasks; use serde_json::{json, Value}; use settings::{KeymapFile, SettingsJsonSchemaParams, SettingsStore}; use smol::fs; @@ -16,10 +17,30 @@ use std::{ path::{Path, PathBuf}, sync::{Arc, OnceLock}, }; +use task::{TaskTemplate, TaskTemplates, VariableName}; use util::{maybe, paths, ResultExt}; const SERVER_PATH: &str = "node_modules/vscode-json-languageserver/bin/vscode-json-languageserver"; +pub(super) fn json_task_context() -> ContextProviderWithTasks { + ContextProviderWithTasks::new(TaskTemplates(vec![ + TaskTemplate { + label: "package script $ZED_CUSTOM_script".to_owned(), + command: "npm run".to_owned(), + args: vec![VariableName::Custom("script".into()).template_value()], + tags: vec!["package-script".into()], + ..TaskTemplate::default() + }, + TaskTemplate { + label: "composer script $ZED_CUSTOM_script".to_owned(), + command: "composer".to_owned(), + args: vec![VariableName::Custom("script".into()).template_value()], + tags: vec!["composer-script".into()], + ..TaskTemplate::default() + }, + ])) +} + fn server_binary_arguments(server_path: &Path) -> Vec { vec![server_path.into(), "--stdio".into()] } diff --git a/crates/languages/src/json/tasks.json b/crates/languages/src/json/tasks.json deleted file mode 100644 index 07bb0a9f0ada2bcc6b05ecedfa4f239b71e3aa61..0000000000000000000000000000000000000000 --- a/crates/languages/src/json/tasks.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "label": "package script $ZED_CUSTOM_script", - "command": "npm run", - "args": ["$ZED_CUSTOM_script"], - "tags": ["package-script"] - }, - { - "label": "composer script $ZED_CUSTOM_script", - "command": "composer", - "args": ["$ZED_CUSTOM_script"], - "tags": ["composer-script"] - } -] diff --git a/crates/languages/src/lib.rs b/crates/languages/src/lib.rs index ec7a0d38891bad2bb219f22760beb9483c104fa0..ae51e880ecc2cb4ccd4018c9cdce7d2394ada3ae 100644 --- a/crates/languages/src/lib.rs +++ b/crates/languages/src/lib.rs @@ -1,5 +1,6 @@ use anyhow::Context; use gpui::{AppContext, UpdateGlobal}; +use json::json_task_context; pub use language::*; use node_runtime::NodeRuntime; use rust_embed::RustEmbed; @@ -119,7 +120,8 @@ pub fn init( vec![Arc::new(json::JsonLspAdapter::new( node_runtime.clone(), languages.clone(), - ))] + ))], + json_task_context() ); language!("markdown"); language!(