add helper for assembling long scope lists

This commit is contained in:
ewin 2025-03-10 00:59:26 -04:00
parent 2a78eb3f2d
commit a1a0750d6a
Signed by: erin
SSH key fingerprint: SHA256:swjoHhREbZPbWe+gyJNi24d4NAxJSyUIm3fpZj4z3wc
2 changed files with 18 additions and 8 deletions

View file

@ -1,5 +1,5 @@
import embeddedLanguages from '../embeddedLanguages.mjs'; import embeddedLanguages from '../embeddedLanguages.mjs';
import {merge} from '../util.mjs'; import {merge, scopes} from '../util.mjs';
const elements = merge(embeddedLanguages.map(embeddedLanguage => ({ const elements = merge(embeddedLanguages.map(embeddedLanguage => ({
[`tagged-template-literal-block-${embeddedLanguage.id}`]: { [`tagged-template-literal-block-${embeddedLanguage.id}`]: {
@ -7,18 +7,26 @@ const elements = merge(embeddedLanguages.map(embeddedLanguage => ({
end: '`', end: '`',
beginCaptures: { beginCaptures: {
1: { 1: {
name: name: scopes(
'entity.name.function.tagged-template.js entity.name.embedded-language', 'entity.name.function.tagged-template.js',
'entity.name.embedded-source',
),
}, },
2: { 2: {
name: name: scopes(
'string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin', 'string.template.js',
'punctuation.definition.string.template.begin.js',
'punctuation.definition.embedded-source.begin',
),
}, },
}, },
endCaptures: { endCaptures: {
0: { 0: {
name: name: scopes(
'string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end', 'string.template.js',
'punctuation.definition.string.template.end.js',
'punctuation.definition.embedded-source.end',
),
}, },
}, },
contentName: embeddedLanguage.embedScopeBlock, contentName: embeddedLanguage.embedScopeBlock,

View file

@ -4,7 +4,7 @@ export type Overwrite<T, U> = {
: never; : 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]> [infer T, infer U, ...infer Rest] ? AllMerged<[Overwrite<T, U>, ...Rest]>
: Objects extends [infer T, ...infer Rest] ? T : Objects extends [infer T, ...infer Rest] ? T
: Objects extends (infer Rest)[] ? Rest : 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> => export const merge = <T extends any[]>(objects: T): AllMerged<T> =>
Object.assign(Object.create(null), ...objects); Object.assign(Object.create(null), ...objects);
export const scopes = (...scopes: string[]) => scopes.join(' ');