From b3dd838da633c982a0a2ad1ac16ed49ab4677fc3 Mon Sep 17 00:00:00 2001 From: Brad Reynolds Date: Fri, 8 May 2026 20:29:34 -0600 Subject: [PATCH] feat: add jq syntax highlighting Wires up the existing arborium tree-sitter jq grammar by enabling the lang-jq feature, registering jq in SUPPORTED_LANGUAGES with a `.jq` extension mapping, and adding a config.yaml for indent and bracket metadata. Also keeps the parallel ProgrammingLanguage::to_extension and is_development_text_extension lists in sync. --- Cargo.lock | 12 ++++++++++++ Cargo.toml | 1 + app/src/ai/agent/mod.rs | 1 + crates/languages/grammars/jq/config.yaml | 13 +++++++++++++ crates/languages/src/lib.rs | 5 ++++- crates/warp_util/src/file_type.rs | 2 +- 6 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 crates/languages/grammars/jq/config.yaml diff --git a/Cargo.lock b/Cargo.lock index a086f84f33..5a415f5f77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -608,6 +608,7 @@ dependencies = [ "arborium-html", "arborium-java", "arborium-javascript", + "arborium-jq", "arborium-json", "arborium-kotlin", "arborium-lua", @@ -778,6 +779,17 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "arborium-jq" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efdce2ce4dabcff7626fb09fcb2a6915ce4714d2f6a190dc8c54dac1bd2072da" +dependencies = [ + "arborium-sysroot", + "cc", + "tree-sitter-language", +] + [[package]] name = "arborium-json" version = "2.13.0" diff --git a/Cargo.toml b/Cargo.toml index 772844eaf4..9c5c6f11d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -281,6 +281,7 @@ arborium = { version = "2", default-features = false, features = [ "lang-css", "lang-c", "lang-json", + "lang-jq", "lang-hcl", "lang-lua", "lang-ruby", diff --git a/app/src/ai/agent/mod.rs b/app/src/ai/agent/mod.rs index 1805b30fd9..3207b6fd79 100644 --- a/app/src/ai/agent/mod.rs +++ b/app/src/ai/agent/mod.rs @@ -738,6 +738,7 @@ impl ProgrammingLanguage { "css" => Some("css"), "c" => Some("c"), "json" => Some("json"), + "jq" => Some("jq"), "hcl" | "terraform" | "tf" => Some("hcl"), "lua" => Some("lua"), "ruby" | "rb" => Some("rb"), diff --git a/crates/languages/grammars/jq/config.yaml b/crates/languages/grammars/jq/config.yaml new file mode 100644 index 0000000000..ab4c2631b9 --- /dev/null +++ b/crates/languages/grammars/jq/config.yaml @@ -0,0 +1,13 @@ +display_name: "jq" +indent_unit: + space: 2 +comment_prefix: "#" +brackets: + - start: "{" + end: "}" + - start: "(" + end: ")" + - start: "[" + end: "]" + - start: "\"" + end: "\"" diff --git a/crates/languages/src/lib.rs b/crates/languages/src/lib.rs index 69d2020539..3be20bb780 100644 --- a/crates/languages/src/lib.rs +++ b/crates/languages/src/lib.rs @@ -19,7 +19,7 @@ lazy_static! { static ref LANGUAGE_REGISTRY: LanguageRegistry = LanguageRegistry::new(); } -pub const SUPPORTED_LANGUAGES: [&str; 32] = [ +pub const SUPPORTED_LANGUAGES: [&str; 33] = [ "rust", "golang", "yaml", @@ -36,6 +36,7 @@ pub const SUPPORTED_LANGUAGES: [&str; 32] = [ "css", "c", "json", + "jq", "hcl", "lua", "ruby", @@ -159,6 +160,7 @@ pub fn language_by_filename(path: &Path) -> Option> { "css" => language_by_name("css"), "c" => language_by_name("c"), "json" => language_by_name("json"), + "jq" => language_by_name("jq"), "tf" | "hcl" | "tfvars" => language_by_name("hcl"), "lua" => language_by_name("lua"), "rb" => language_by_name("ruby"), @@ -254,6 +256,7 @@ fn get_arborium_highlight_query(lang: &str) -> Option<&str> { "css" => Some(arborium::lang_css::HIGHLIGHTS_QUERY), "c" => Some(arborium::lang_c::HIGHLIGHTS_QUERY), "json" => Some(arborium::lang_json::HIGHLIGHTS_QUERY), + "jq" => Some(arborium::lang_jq::HIGHLIGHTS_QUERY), "hcl" => Some(arborium::lang_hcl::HIGHLIGHTS_QUERY), "lua" => Some(arborium::lang_lua::HIGHLIGHTS_QUERY), "ruby" => Some(arborium::lang_ruby::HIGHLIGHTS_QUERY), diff --git a/crates/warp_util/src/file_type.rs b/crates/warp_util/src/file_type.rs index 461a2f0101..2f5870a1b3 100644 --- a/crates/warp_util/src/file_type.rs +++ b/crates/warp_util/src/file_type.rs @@ -226,7 +226,7 @@ fn is_development_text_extension(extension: &str) -> bool { "svelte" | "astro" | "blade" | "twig" | "mustache" | "hbs" | "handlebars" | "ejs" | "pug" | "jade" | "erb" | "haml" | // Configuration and data formats - "toml" | "yaml" | "yml" | "json" | "jsonc" | "json5" | + "toml" | "yaml" | "yml" | "json" | "jsonc" | "json5" | "jq" | "xml" | "ini" | "cfg" | "conf" | "config" | "properties" | "env" | "dotenv" | "editorconfig" | "gitignore" | "gitattributes" | // Documentation