From a1a0750d6ac2697404444198f589798d68ab0410 Mon Sep 17 00:00:00 2001
From: ewin <git@ewin.moe>
Date: Mon, 10 Mar 2025 00:59:26 -0400
Subject: [PATCH] add helper for assembling long scope lists

---
 syntaxes/javascript.injection.json.mts | 22 +++++++++++++++-------
 util.mts                               |  4 +++-
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/syntaxes/javascript.injection.json.mts b/syntaxes/javascript.injection.json.mts
index 19ec2e8..0f24bb0 100644
--- a/syntaxes/javascript.injection.json.mts
+++ b/syntaxes/javascript.injection.json.mts
@@ -1,5 +1,5 @@
 import embeddedLanguages from '../embeddedLanguages.mjs';
-import {merge} from '../util.mjs';
+import {merge, scopes} from '../util.mjs';
 
 const elements = merge(embeddedLanguages.map(embeddedLanguage => ({
 	[`tagged-template-literal-block-${embeddedLanguage.id}`]: {
@@ -7,18 +7,26 @@ const elements = merge(embeddedLanguages.map(embeddedLanguage => ({
 		end: '`',
 		beginCaptures: {
 			1: {
-				name:
-					'entity.name.function.tagged-template.js entity.name.embedded-language',
+				name: scopes(
+					'entity.name.function.tagged-template.js',
+					'entity.name.embedded-source',
+				),
 			},
 			2: {
-				name:
-					'string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin',
+				name: scopes(
+					'string.template.js',
+					'punctuation.definition.string.template.begin.js',
+					'punctuation.definition.embedded-source.begin',
+				),
 			},
 		},
 		endCaptures: {
 			0: {
-				name:
-					'string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end',
+				name: scopes(
+					'string.template.js',
+					'punctuation.definition.string.template.end.js',
+					'punctuation.definition.embedded-source.end',
+				),
 			},
 		},
 		contentName: embeddedLanguage.embedScopeBlock,
diff --git a/util.mts b/util.mts
index e067173..6dc9277 100644
--- a/util.mts
+++ b/util.mts
@@ -4,7 +4,7 @@ export type Overwrite<T, U> = {
 		: never;
 };
 
-export type AllMerged<Objects extends any[]> = Objects extends
+type AllMerged<Objects extends any[]> = Objects extends
 	[infer T, infer U, ...infer Rest] ? AllMerged<[Overwrite<T, U>, ...Rest]>
 	: Objects extends [infer T, ...infer Rest] ? T
 	: Objects extends (infer Rest)[] ? Rest
@@ -12,3 +12,5 @@ export type AllMerged<Objects extends any[]> = Objects extends
 
 export const merge = <T extends any[]>(objects: T): AllMerged<T> =>
 	Object.assign(Object.create(null), ...objects);
+
+export const scopes = (...scopes: string[]) => scopes.join(' ');