From ffaa1b93795fc02b556672350c0fb67ef6dc156b Mon Sep 17 00:00:00 2001 From: Sergey Borovikov <48716255+foretoo@users.noreply.github.com> Date: Fri, 10 Jul 2026 12:45:13 +0100 Subject: [PATCH] javascript, typescript: Inject GLSL and WGSL syntax in comment-labeled template literals (#55341) Extends the existing ECMAScript comment-label injection system to support GLSL and WGSL shader languages inside JS/TS strings and template literals. The pattern `/* language */` before a string is already used for `html`, `sql`, `graphql`, and `css`. This adds the same support for two shader languages commonly embedded as strings in WebGL/WebGPU code: before: Screenshot 2026-04-30 at 23 07 05 after: Screenshot 2026-04-30 at 23 07 39 Syntax highlighting activates when the corresponding extension is installed: - GLSL: the built-in `glsl` extension - WGSL: the community extension [`wgsl-wesl-zed`](https://github.com/lucascompython/wgsl-wesl-zed) (language name `WGSL/WESL`) Both `/*glsl*/` and `/* glsl */` forms are accepted (same behavior as the existing patterns). Release Notes: - Added `/*glsl*/` and `/*wgsl*/` comment-label syntax injection for JavaScript and TypeScript template literals --- crates/grammars/src/javascript/injections.scm | 22 +++++++++++++++++++ crates/grammars/src/typescript/injections.scm | 22 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/crates/grammars/src/javascript/injections.scm b/crates/grammars/src/javascript/injections.scm index 8ccfc5028d..9d07511f95 100644 --- a/crates/grammars/src/javascript/injections.scm +++ b/crates/grammars/src/javascript/injections.scm @@ -142,3 +142,25 @@ ]) (#match? @_ecma_comment "^\\/\\*\\s*(css)\\s*\\*\\/") (#set! injection.language "css")) + +; '/* glsl */' or '/*glsl*/' +(((comment) @_ecma_comment + [ + (string + (string_fragment) @injection.content) + (template_string + (string_fragment) @injection.content) + ]) + (#match? @_ecma_comment "^\\/\\*\\s*glsl\\s*\\*\\/") + (#set! injection.language "glsl")) + +; '/* wgsl */' or '/*wgsl*/' +(((comment) @_ecma_comment + [ + (string + (string_fragment) @injection.content) + (template_string + (string_fragment) @injection.content) + ]) + (#match? @_ecma_comment "^\\/\\*\\s*wgsl\\s*\\*\\/") + (#set! injection.language "WGSL/WESL")) diff --git a/crates/grammars/src/typescript/injections.scm b/crates/grammars/src/typescript/injections.scm index a8cf9a41b5..19ffe69791 100644 --- a/crates/grammars/src/typescript/injections.scm +++ b/crates/grammars/src/typescript/injections.scm @@ -197,3 +197,25 @@ ]) (#match? @_ecma_comment "^\\/\\*\\s*(css)\\s*\\*\\/") (#set! injection.language "css")) + +; '/* glsl */' or '/*glsl*/' +(((comment) @_ecma_comment + [ + (string + (string_fragment) @injection.content) + (template_string + (string_fragment) @injection.content) + ]) + (#match? @_ecma_comment "^\\/\\*\\s*glsl\\s*\\*\\/") + (#set! injection.language "glsl")) + +; '/* wgsl */' or '/*wgsl*/' +(((comment) @_ecma_comment + [ + (string + (string_fragment) @injection.content) + (template_string + (string_fragment) @injection.content) + ]) + (#match? @_ecma_comment "^\\/\\*\\s*wgsl\\s*\\*\\/") + (#set! injection.language "WGSL/WESL"))