@mmnto/totem 1.21.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ast-classifier.d.ts +72 -4
- package/dist/ast-classifier.d.ts.map +1 -1
- package/dist/ast-classifier.js +155 -30
- package/dist/ast-classifier.js.map +1 -1
- package/dist/ast-classifier.test.js +80 -2
- package/dist/ast-classifier.test.js.map +1 -1
- package/dist/ast-grep-query.d.ts +31 -0
- package/dist/ast-grep-query.d.ts.map +1 -1
- package/dist/ast-grep-query.js +75 -11
- package/dist/ast-grep-query.js.map +1 -1
- package/dist/chunkers/chunker-registry.d.ts +77 -0
- package/dist/chunkers/chunker-registry.d.ts.map +1 -0
- package/dist/chunkers/chunker-registry.js +134 -0
- package/dist/chunkers/chunker-registry.js.map +1 -0
- package/dist/chunkers/chunker-registry.test.d.ts +14 -0
- package/dist/chunkers/chunker-registry.test.d.ts.map +1 -0
- package/dist/chunkers/chunker-registry.test.js +95 -0
- package/dist/chunkers/chunker-registry.test.js.map +1 -0
- package/dist/chunkers/chunker.d.ts +18 -3
- package/dist/chunkers/chunker.d.ts.map +1 -1
- package/dist/chunkers/chunker.js +20 -13
- package/dist/chunkers/chunker.js.map +1 -1
- package/dist/compile-lesson.d.ts +24 -15
- package/dist/compile-lesson.d.ts.map +1 -1
- package/dist/compile-lesson.js +72 -34
- package/dist/compile-lesson.js.map +1 -1
- package/dist/compile-lesson.test.js +30 -0
- package/dist/compile-lesson.test.js.map +1 -1
- package/dist/compile-smoke-gate.d.ts.map +1 -1
- package/dist/compile-smoke-gate.js +25 -12
- package/dist/compile-smoke-gate.js.map +1 -1
- package/dist/compile-smoke-gate.test.js +39 -0
- package/dist/compile-smoke-gate.test.js.map +1 -1
- package/dist/config-schema.d.ts +61 -10
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +43 -2
- package/dist/config-schema.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/pack-discovery.d.ts +201 -0
- package/dist/pack-discovery.d.ts.map +1 -0
- package/dist/pack-discovery.js +298 -0
- package/dist/pack-discovery.js.map +1 -0
- package/dist/pack-discovery.test.d.ts +17 -0
- package/dist/pack-discovery.test.d.ts.map +1 -0
- package/dist/pack-discovery.test.js +343 -0
- package/dist/pack-discovery.test.js.map +1 -0
- package/dist/pack-manifest-writer.d.ts +88 -0
- package/dist/pack-manifest-writer.d.ts.map +1 -0
- package/dist/pack-manifest-writer.js +162 -0
- package/dist/pack-manifest-writer.js.map +1 -0
- package/dist/pack-manifest-writer.test.d.ts +15 -0
- package/dist/pack-manifest-writer.test.d.ts.map +1 -0
- package/dist/pack-manifest-writer.test.js +184 -0
- package/dist/pack-manifest-writer.test.js.map +1 -0
- package/dist/rule-engine.d.ts.map +1 -1
- package/dist/rule-engine.js +24 -2
- package/dist/rule-engine.js.map +1 -1
- package/dist/rule-engine.test.js +74 -0
- package/dist/rule-engine.test.js.map +1 -1
- package/dist/store/lance-schema.d.ts +3 -3
- package/package.json +3 -1
package/dist/ast-classifier.d.ts
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import type { AstContext } from './compiler.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Tree-sitter language label. The literal union covers built-in languages
|
|
4
|
+
* shipped by core; the `(string & {})` extension admits pack-contributed
|
|
5
|
+
* values (e.g., `'rust'`) registered via `PackRegistrationAPI.registerLanguage`
|
|
6
|
+
* (mmnto-ai/totem#1768). Per ADR-097 § 5 Q3 + § 10 the registry is the
|
|
7
|
+
* runtime source of truth; this type alias keeps IntelliSense on built-in
|
|
8
|
+
* names while admitting any registered string.
|
|
9
|
+
*/
|
|
10
|
+
export type SupportedLanguage = 'typescript' | 'tsx' | 'javascript' | (string & {});
|
|
3
11
|
/**
|
|
4
12
|
* Initialize web-tree-sitter WASM engine. Idempotent — safe to call multiple times.
|
|
5
13
|
*/
|
|
6
14
|
export declare function ensureInit(): Promise<void>;
|
|
7
15
|
/**
|
|
8
|
-
* Load a Tree-sitter grammar WASM
|
|
16
|
+
* Load a Tree-sitter grammar WASM for the given language. Resolves the
|
|
17
|
+
* language's WASM source via the registry (`LANG_TO_WASM_LOADER`) — built-in
|
|
18
|
+
* loaders use `require.resolve(...)` against tree-sitter-typescript /
|
|
19
|
+
* tree-sitter-javascript; pack-registered loaders return paths to the
|
|
20
|
+
* pack's bundled WASM (per ADR-097 Q2 — WASM bundling decision). The
|
|
21
|
+
* loader thunk is invoked lazily here on first dispatch and the resolved
|
|
22
|
+
* grammar is memoized in `grammarCache`.
|
|
23
|
+
*
|
|
24
|
+
* Throws when the language is not registered. ast-grep dispatch path
|
|
25
|
+
* (`rule-engine.ts`) is fail-loud per mmnto-ai/totem#1653 — silent skip on
|
|
26
|
+
* unmapped extensions was the bug.
|
|
9
27
|
*/
|
|
10
28
|
export declare function loadGrammar(lang: SupportedLanguage): Promise<import('web-tree-sitter').Language>;
|
|
11
29
|
/**
|
|
@@ -18,8 +36,58 @@ export declare function loadGrammar(lang: SupportedLanguage): Promise<import('we
|
|
|
18
36
|
*/
|
|
19
37
|
export declare function classifyLines(content: string, lineNumbers: number[], language: SupportedLanguage): Promise<Map<number, AstContext>>;
|
|
20
38
|
/**
|
|
21
|
-
* Map file extension to a
|
|
22
|
-
*
|
|
39
|
+
* Map file extension to a registered Tree-sitter language.
|
|
40
|
+
*
|
|
41
|
+
* Registry-backed per ADR-097 § 10 + mmnto-ai/totem#1653. Built-in entries
|
|
42
|
+
* (`.ts`/`.tsx`/`.jsx`/`.js`/`.mjs`/`.cjs`) self-register at module load
|
|
43
|
+
* (bottom of this file). Pack callbacks add entries during boot via
|
|
44
|
+
* `PackRegistrationAPI.registerLanguage`.
|
|
45
|
+
*
|
|
46
|
+
* Returns undefined when the extension isn't registered. The dispatch
|
|
47
|
+
* path in `rule-engine.ts` treats undefined as fail-loud per #1653 — the
|
|
48
|
+
* silent skip behavior pre-#1653 was a bug.
|
|
23
49
|
*/
|
|
24
50
|
export declare function extensionToLanguage(ext: string): SupportedLanguage | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Register a (extension, language, wasmLoader) triple. Called by built-ins
|
|
53
|
+
* at module load and by Pack registration callbacks during boot via
|
|
54
|
+
* `PackRegistrationAPI.registerLanguage` (mmnto-ai/totem#1768). Throws when:
|
|
55
|
+
*
|
|
56
|
+
* - The registry is sealed (boot-time-only mutation).
|
|
57
|
+
* - The extension is already registered to a different language (built-in
|
|
58
|
+
* entries are immutable; pack-vs-pack collisions also rejected).
|
|
59
|
+
* - The language is already registered to a different WASM loader.
|
|
60
|
+
*
|
|
61
|
+
* Both maps are updated together: an extension always points at a language
|
|
62
|
+
* that has a known WASM loader. Partial registration (extension without
|
|
63
|
+
* loader) is rejected.
|
|
64
|
+
*/
|
|
65
|
+
export declare function registerLang(extension: string, lang: SupportedLanguage, wasmLoader: () => string | Uint8Array | Promise<string | Uint8Array>): void;
|
|
66
|
+
/**
|
|
67
|
+
* Snapshot of currently-registered extensions. Used for fail-loud error
|
|
68
|
+
* messages on unmapped extensions and `totem describe` output.
|
|
69
|
+
*/
|
|
70
|
+
export declare function registeredExtensions(): readonly string[];
|
|
71
|
+
/**
|
|
72
|
+
* Snapshot of currently-registered languages. Stable order for deterministic
|
|
73
|
+
* output.
|
|
74
|
+
*/
|
|
75
|
+
export declare function registeredLanguages(): readonly SupportedLanguage[];
|
|
76
|
+
/** True iff the extension is built-in (vs pack-registered). */
|
|
77
|
+
export declare function isBuiltinExtension(ext: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Mark the language registry as sealed. After this, `registerLang()`
|
|
80
|
+
* calls throw. Called by `pack-discovery.ts` `loadInstalledPacks()` after
|
|
81
|
+
* every pack callback returns.
|
|
82
|
+
*/
|
|
83
|
+
export declare function sealLangRegistry(): void;
|
|
84
|
+
/** True iff the language registry has been sealed. */
|
|
85
|
+
export declare function isLangRegistrySealed(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Test-only: reset the language registry and re-register built-ins. Lets
|
|
88
|
+
* per-test fixtures register without leaking state across tests.
|
|
89
|
+
*/
|
|
90
|
+
export declare function __resetLangRegistryForTests(): void;
|
|
91
|
+
/** Test-only: clear the seal so subsequent registrations succeed. */
|
|
92
|
+
export declare function __unsealLangRegistryForTests(): void;
|
|
25
93
|
//# sourceMappingURL=ast-classifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-classifier.d.ts","sourceRoot":"","sources":["../src/ast-classifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-classifier.d.ts","sourceRoot":"","sources":["../src/ast-classifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAwCpF;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBhD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,CAmB7C;AAqCD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CA+ClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9E;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,GACnE,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAExD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,iBAAiB,EAAE,CAElE;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAID;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAQlD;AAED,qEAAqE;AACrE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|
package/dist/ast-classifier.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
+
// ─── Language registry (mmnto-ai/totem#1653 + ADR-097 § 10) ──
|
|
3
|
+
/**
|
|
4
|
+
* Extension → language registry. Replaces the `switch` previously in
|
|
5
|
+
* `extensionToLanguage`. Built-in entries register at module load (bottom
|
|
6
|
+
* of this file); pack callbacks register additional entries during boot
|
|
7
|
+
* via `PackRegistrationAPI.registerLanguage` → `registerLang()` here.
|
|
8
|
+
*/
|
|
9
|
+
const EXT_TO_LANG_REGISTRY = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Language → WASM grammar loader thunk. Replaces the `switch` previously
|
|
12
|
+
* in `loadGrammar`. Loader returns a path string (built-ins use
|
|
13
|
+
* `require.resolve`) or a Buffer (packs embed grammar bytes); web-tree-sitter
|
|
14
|
+
* accepts either. The thunk is invoked lazily on first `loadGrammar(lang)`
|
|
15
|
+
* call and the result is memoized in `grammarCache`.
|
|
16
|
+
*/
|
|
17
|
+
const LANG_TO_WASM_LOADER = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Built-in language extensions, immutable. A pack attempting to re-register
|
|
20
|
+
* one of these is rejected at the boundary in `registerLang()`.
|
|
21
|
+
*/
|
|
22
|
+
const BUILTIN_EXTENSIONS = new Set();
|
|
23
|
+
const BUILTIN_LANGUAGES = new Set();
|
|
24
|
+
let langRegistrySealed = false;
|
|
2
25
|
// ─── Lazy-loaded Tree-sitter state ──────────────────
|
|
3
26
|
let Parser = null;
|
|
4
27
|
let initPromise = null;
|
|
@@ -23,29 +46,31 @@ export async function ensureInit() {
|
|
|
23
46
|
return initPromise;
|
|
24
47
|
}
|
|
25
48
|
/**
|
|
26
|
-
* Load a Tree-sitter grammar WASM
|
|
49
|
+
* Load a Tree-sitter grammar WASM for the given language. Resolves the
|
|
50
|
+
* language's WASM source via the registry (`LANG_TO_WASM_LOADER`) — built-in
|
|
51
|
+
* loaders use `require.resolve(...)` against tree-sitter-typescript /
|
|
52
|
+
* tree-sitter-javascript; pack-registered loaders return paths to the
|
|
53
|
+
* pack's bundled WASM (per ADR-097 Q2 — WASM bundling decision). The
|
|
54
|
+
* loader thunk is invoked lazily here on first dispatch and the resolved
|
|
55
|
+
* grammar is memoized in `grammarCache`.
|
|
56
|
+
*
|
|
57
|
+
* Throws when the language is not registered. ast-grep dispatch path
|
|
58
|
+
* (`rule-engine.ts`) is fail-loud per mmnto-ai/totem#1653 — silent skip on
|
|
59
|
+
* unmapped extensions was the bug.
|
|
27
60
|
*/
|
|
28
61
|
export async function loadGrammar(lang) {
|
|
29
62
|
const cached = grammarCache.get(lang);
|
|
30
63
|
if (cached)
|
|
31
64
|
return cached;
|
|
65
|
+
const loader = LANG_TO_WASM_LOADER.get(lang);
|
|
66
|
+
if (!loader) {
|
|
67
|
+
throw new Error(`No WASM grammar loader registered for language '${lang}'. Either install the pack that provides it or correct the language reference.`);
|
|
68
|
+
}
|
|
32
69
|
await ensureInit();
|
|
33
70
|
const TreeSitter = await import('web-tree-sitter');
|
|
34
71
|
const LanguageClass = TreeSitter.default?.Language ?? TreeSitter.Language;
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
switch (lang) {
|
|
38
|
-
case 'typescript':
|
|
39
|
-
wasmFile = require.resolve('tree-sitter-typescript/tree-sitter-typescript.wasm');
|
|
40
|
-
break;
|
|
41
|
-
case 'tsx':
|
|
42
|
-
wasmFile = require.resolve('tree-sitter-typescript/tree-sitter-tsx.wasm');
|
|
43
|
-
break;
|
|
44
|
-
case 'javascript':
|
|
45
|
-
wasmFile = require.resolve('tree-sitter-javascript/tree-sitter-javascript.wasm');
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
const grammar = await LanguageClass.load(wasmFile);
|
|
72
|
+
const wasmSource = await loader();
|
|
73
|
+
const grammar = await LanguageClass.load(wasmSource);
|
|
49
74
|
grammarCache.set(lang, grammar);
|
|
50
75
|
return grammar;
|
|
51
76
|
}
|
|
@@ -133,23 +158,123 @@ export async function classifyLines(content, lineNumbers, language) {
|
|
|
133
158
|
return result;
|
|
134
159
|
}
|
|
135
160
|
/**
|
|
136
|
-
* Map file extension to a
|
|
137
|
-
*
|
|
161
|
+
* Map file extension to a registered Tree-sitter language.
|
|
162
|
+
*
|
|
163
|
+
* Registry-backed per ADR-097 § 10 + mmnto-ai/totem#1653. Built-in entries
|
|
164
|
+
* (`.ts`/`.tsx`/`.jsx`/`.js`/`.mjs`/`.cjs`) self-register at module load
|
|
165
|
+
* (bottom of this file). Pack callbacks add entries during boot via
|
|
166
|
+
* `PackRegistrationAPI.registerLanguage`.
|
|
167
|
+
*
|
|
168
|
+
* Returns undefined when the extension isn't registered. The dispatch
|
|
169
|
+
* path in `rule-engine.ts` treats undefined as fail-loud per #1653 — the
|
|
170
|
+
* silent skip behavior pre-#1653 was a bug.
|
|
138
171
|
*/
|
|
139
172
|
export function extensionToLanguage(ext) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
173
|
+
return EXT_TO_LANG_REGISTRY.get(ext.toLowerCase());
|
|
174
|
+
}
|
|
175
|
+
// ─── Language registry public surface (mmnto-ai/totem#1653 + #1768) ──
|
|
176
|
+
/**
|
|
177
|
+
* Register a (extension, language, wasmLoader) triple. Called by built-ins
|
|
178
|
+
* at module load and by Pack registration callbacks during boot via
|
|
179
|
+
* `PackRegistrationAPI.registerLanguage` (mmnto-ai/totem#1768). Throws when:
|
|
180
|
+
*
|
|
181
|
+
* - The registry is sealed (boot-time-only mutation).
|
|
182
|
+
* - The extension is already registered to a different language (built-in
|
|
183
|
+
* entries are immutable; pack-vs-pack collisions also rejected).
|
|
184
|
+
* - The language is already registered to a different WASM loader.
|
|
185
|
+
*
|
|
186
|
+
* Both maps are updated together: an extension always points at a language
|
|
187
|
+
* that has a known WASM loader. Partial registration (extension without
|
|
188
|
+
* loader) is rejected.
|
|
189
|
+
*/
|
|
190
|
+
export function registerLang(extension, lang, wasmLoader) {
|
|
191
|
+
if (langRegistrySealed) {
|
|
192
|
+
throw new Error(`Language registration after engine seal: tried to register '${extension}' → '${lang}' but engine has already started serving requests. Pack registration must complete during boot — see ADR-097 § 5 Q5.`);
|
|
193
|
+
}
|
|
194
|
+
const normalizedExt = extension.toLowerCase();
|
|
195
|
+
const existingLang = EXT_TO_LANG_REGISTRY.get(normalizedExt);
|
|
196
|
+
if (existingLang !== undefined && existingLang !== lang) {
|
|
197
|
+
const existingIsBuiltin = BUILTIN_EXTENSIONS.has(normalizedExt);
|
|
198
|
+
throw new Error(`Extension '${normalizedExt}' is already registered to language '${existingLang}'${existingIsBuiltin ? ' as a built-in (built-in entries are immutable)' : ' (pack-vs-pack collision)'}; refusing to re-register to '${lang}'.`);
|
|
199
|
+
}
|
|
200
|
+
const existingLoader = LANG_TO_WASM_LOADER.get(lang);
|
|
201
|
+
if (existingLoader !== undefined && existingLoader !== wasmLoader) {
|
|
202
|
+
const existingIsBuiltin = BUILTIN_LANGUAGES.has(lang);
|
|
203
|
+
throw new Error(`Language '${lang}' is already registered with a WASM loader${existingIsBuiltin ? ' as a built-in (built-in entries are immutable)' : ' (pack-vs-pack collision)'}; refusing to override.`);
|
|
153
204
|
}
|
|
205
|
+
EXT_TO_LANG_REGISTRY.set(normalizedExt, lang);
|
|
206
|
+
LANG_TO_WASM_LOADER.set(lang, wasmLoader);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Snapshot of currently-registered extensions. Used for fail-loud error
|
|
210
|
+
* messages on unmapped extensions and `totem describe` output.
|
|
211
|
+
*/
|
|
212
|
+
export function registeredExtensions() {
|
|
213
|
+
return [...EXT_TO_LANG_REGISTRY.keys()].sort();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Snapshot of currently-registered languages. Stable order for deterministic
|
|
217
|
+
* output.
|
|
218
|
+
*/
|
|
219
|
+
export function registeredLanguages() {
|
|
220
|
+
return [...LANG_TO_WASM_LOADER.keys()].sort();
|
|
221
|
+
}
|
|
222
|
+
/** True iff the extension is built-in (vs pack-registered). */
|
|
223
|
+
export function isBuiltinExtension(ext) {
|
|
224
|
+
return BUILTIN_EXTENSIONS.has(ext.toLowerCase());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Mark the language registry as sealed. After this, `registerLang()`
|
|
228
|
+
* calls throw. Called by `pack-discovery.ts` `loadInstalledPacks()` after
|
|
229
|
+
* every pack callback returns.
|
|
230
|
+
*/
|
|
231
|
+
export function sealLangRegistry() {
|
|
232
|
+
langRegistrySealed = true;
|
|
233
|
+
}
|
|
234
|
+
/** True iff the language registry has been sealed. */
|
|
235
|
+
export function isLangRegistrySealed() {
|
|
236
|
+
return langRegistrySealed;
|
|
237
|
+
}
|
|
238
|
+
// ─── Test-only helpers ──────────────────────────────
|
|
239
|
+
/**
|
|
240
|
+
* Test-only: reset the language registry and re-register built-ins. Lets
|
|
241
|
+
* per-test fixtures register without leaking state across tests.
|
|
242
|
+
*/
|
|
243
|
+
export function __resetLangRegistryForTests() {
|
|
244
|
+
EXT_TO_LANG_REGISTRY.clear();
|
|
245
|
+
LANG_TO_WASM_LOADER.clear();
|
|
246
|
+
BUILTIN_EXTENSIONS.clear();
|
|
247
|
+
BUILTIN_LANGUAGES.clear();
|
|
248
|
+
langRegistrySealed = false;
|
|
249
|
+
grammarCache.clear();
|
|
250
|
+
registerBuiltinLanguages();
|
|
251
|
+
}
|
|
252
|
+
/** Test-only: clear the seal so subsequent registrations succeed. */
|
|
253
|
+
export function __unsealLangRegistryForTests() {
|
|
254
|
+
langRegistrySealed = false;
|
|
255
|
+
}
|
|
256
|
+
// ─── Built-in language registration (runs at module load) ──
|
|
257
|
+
function registerBuiltinLang(extension, lang, wasmLoader) {
|
|
258
|
+
BUILTIN_EXTENSIONS.add(extension.toLowerCase());
|
|
259
|
+
BUILTIN_LANGUAGES.add(lang);
|
|
260
|
+
registerLang(extension, lang, wasmLoader);
|
|
261
|
+
}
|
|
262
|
+
function registerBuiltinLanguages() {
|
|
263
|
+
const require = createRequire(import.meta.url);
|
|
264
|
+
// Loaders are de-duplicated by reference: when multiple extensions map
|
|
265
|
+
// to the same language, they MUST share the same loader instance so the
|
|
266
|
+
// "language already registered with a different loader" guard in
|
|
267
|
+
// `registerLang()` doesn't trip on the second extension's registration.
|
|
268
|
+
const tsLoader = () => require.resolve('tree-sitter-typescript/tree-sitter-typescript.wasm');
|
|
269
|
+
const tsxLoader = () => require.resolve('tree-sitter-typescript/tree-sitter-tsx.wasm');
|
|
270
|
+
const jsLoader = () => require.resolve('tree-sitter-javascript/tree-sitter-javascript.wasm');
|
|
271
|
+
registerBuiltinLang('.ts', 'typescript', tsLoader);
|
|
272
|
+
registerBuiltinLang('.tsx', 'tsx', tsxLoader);
|
|
273
|
+
// TSX grammar handles JSX — same loader instance as '.tsx'.
|
|
274
|
+
registerBuiltinLang('.jsx', 'tsx', tsxLoader);
|
|
275
|
+
registerBuiltinLang('.js', 'javascript', jsLoader);
|
|
276
|
+
registerBuiltinLang('.mjs', 'javascript', jsLoader);
|
|
277
|
+
registerBuiltinLang('.cjs', 'javascript', jsLoader);
|
|
154
278
|
}
|
|
279
|
+
registerBuiltinLanguages();
|
|
155
280
|
//# sourceMappingURL=ast-classifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-classifier.js","sourceRoot":"","sources":["../src/ast-classifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-classifier.js","sourceRoot":"","sources":["../src/ast-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { classifyLines, extensionToLanguage } from './ast-classifier.js';
|
|
1
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { __resetLangRegistryForTests, __unsealLangRegistryForTests, classifyLines, extensionToLanguage, isBuiltinExtension, isLangRegistrySealed, registeredExtensions, registeredLanguages, registerLang, sealLangRegistry, } from './ast-classifier.js';
|
|
3
3
|
// ─── extensionToLanguage ────────────────────────────
|
|
4
4
|
describe('extensionToLanguage', () => {
|
|
5
5
|
it('maps .ts to typescript', () => {
|
|
@@ -21,6 +21,84 @@ describe('extensionToLanguage', () => {
|
|
|
21
21
|
expect(extensionToLanguage('.rs')).toBeUndefined();
|
|
22
22
|
expect(extensionToLanguage('.md')).toBeUndefined();
|
|
23
23
|
});
|
|
24
|
+
it('normalizes extension case before lookup', () => {
|
|
25
|
+
expect(extensionToLanguage('.TS')).toBe('typescript');
|
|
26
|
+
expect(extensionToLanguage('.Tsx')).toBe('tsx');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
// ─── Language registry surface (mmnto-ai/totem#1653 + #1768) ──
|
|
30
|
+
describe('language registry built-ins', () => {
|
|
31
|
+
it('exposes all six built-in extensions from registeredExtensions()', () => {
|
|
32
|
+
expect(registeredExtensions()).toEqual(['.cjs', '.js', '.jsx', '.mjs', '.ts', '.tsx']);
|
|
33
|
+
});
|
|
34
|
+
it('exposes all three built-in languages from registeredLanguages()', () => {
|
|
35
|
+
expect(registeredLanguages()).toEqual(['javascript', 'tsx', 'typescript']);
|
|
36
|
+
});
|
|
37
|
+
it('marks built-in extensions as built-in', () => {
|
|
38
|
+
expect(isBuiltinExtension('.ts')).toBe(true);
|
|
39
|
+
expect(isBuiltinExtension('.tsx')).toBe(true);
|
|
40
|
+
expect(isBuiltinExtension('.rs')).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('language registry pack-style registration', () => {
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
__resetLangRegistryForTests();
|
|
46
|
+
});
|
|
47
|
+
it('accepts new (extension, language, loader) registration before seal', () => {
|
|
48
|
+
const fakeLoader = () => '/fake/path/tree-sitter-fakelang.wasm';
|
|
49
|
+
registerLang('.fake', 'fakelang', fakeLoader);
|
|
50
|
+
expect(extensionToLanguage('.fake')).toBe('fakelang');
|
|
51
|
+
expect(registeredExtensions()).toContain('.fake');
|
|
52
|
+
expect(registeredLanguages()).toContain('fakelang');
|
|
53
|
+
});
|
|
54
|
+
it('does not mark pack-registered extensions as built-in', () => {
|
|
55
|
+
registerLang('.fake', 'fakelang', () => '/fake.wasm');
|
|
56
|
+
expect(isBuiltinExtension('.fake')).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('throws when re-registering an extension to a different language (pack-vs-pack)', () => {
|
|
59
|
+
registerLang('.fake', 'fakelang', () => '/fake.wasm');
|
|
60
|
+
expect(() => registerLang('.fake', 'differentlang', () => '/other.wasm')).toThrowError(/already registered to language 'fakelang'.*pack-vs-pack collision/);
|
|
61
|
+
});
|
|
62
|
+
it('throws when registering a built-in extension (immutable)', () => {
|
|
63
|
+
expect(() => registerLang('.ts', 'newlang', () => '/x.wasm')).toThrowError(/already registered to language 'typescript'.*as a built-in.*immutable/);
|
|
64
|
+
});
|
|
65
|
+
it('throws when registering an already-registered language with a different loader', () => {
|
|
66
|
+
const loader1 = () => '/path1.wasm';
|
|
67
|
+
const loader2 = () => '/path2.wasm';
|
|
68
|
+
registerLang('.fake', 'fakelang', loader1);
|
|
69
|
+
expect(() => registerLang('.also-fake', 'fakelang', loader2)).toThrowError(/Language 'fakelang' is already registered/);
|
|
70
|
+
});
|
|
71
|
+
it('allows multiple extensions to register to the same language with the same loader', () => {
|
|
72
|
+
const sharedLoader = () => '/shared.wasm';
|
|
73
|
+
registerLang('.fake1', 'fakelang', sharedLoader);
|
|
74
|
+
registerLang('.fake2', 'fakelang', sharedLoader);
|
|
75
|
+
expect(extensionToLanguage('.fake1')).toBe('fakelang');
|
|
76
|
+
expect(extensionToLanguage('.fake2')).toBe('fakelang');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('language registry seal contract', () => {
|
|
80
|
+
afterEach(() => {
|
|
81
|
+
__resetLangRegistryForTests();
|
|
82
|
+
});
|
|
83
|
+
it('starts unsealed', () => {
|
|
84
|
+
expect(isLangRegistrySealed()).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('sealLangRegistry() flips the flag', () => {
|
|
87
|
+
sealLangRegistry();
|
|
88
|
+
expect(isLangRegistrySealed()).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it('registerLang() after seal throws with ADR-097 § 5 Q5 reference', () => {
|
|
91
|
+
sealLangRegistry();
|
|
92
|
+
expect(() => registerLang('.fake', 'fakelang', () => '/f.wasm')).toThrowError(/after engine seal.*ADR-097 § 5 Q5/);
|
|
93
|
+
});
|
|
94
|
+
it('__unsealLangRegistryForTests reverts the seal so subsequent tests can register', () => {
|
|
95
|
+
sealLangRegistry();
|
|
96
|
+
expect(isLangRegistrySealed()).toBe(true);
|
|
97
|
+
__unsealLangRegistryForTests();
|
|
98
|
+
expect(isLangRegistrySealed()).toBe(false);
|
|
99
|
+
registerLang('.fake', 'fakelang', () => '/f.wasm');
|
|
100
|
+
expect(extensionToLanguage('.fake')).toBe('fakelang');
|
|
101
|
+
});
|
|
24
102
|
});
|
|
25
103
|
// ─── classifyLines ──────────────────────────────────
|
|
26
104
|
describe('classifyLines', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-classifier.test.js","sourceRoot":"","sources":["../src/ast-classifier.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ast-classifier.test.js","sourceRoot":"","sources":["../src/ast-classifier.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,uDAAuD;AAEvD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iEAAiE;AAEjE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,2BAA2B,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,sCAAsC,CAAC;QAChE,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CACpF,mEAAmE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CACxE,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QACpC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CACxE,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC;QAC1C,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACjD,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,2BAA2B,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAC3E,mCAAmC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,4BAA4B,EAAE,CAAC;QAC/B,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uDAAuD;AAEvD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,GAAG,iCAAiC,CAAC,CAAC,eAAe;QAClE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,sCAAsC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,OAAO,GAAG,2CAA2C,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,OAAO,GAAG,8BAA8B,CAAC;QAC/C,6EAA6E;QAC7E,yDAAyD;QACzD,iEAAiE;QACjE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,+CAA+C;QAC/C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,OAAO,GAAG;YACd,mBAAmB;YACnB,qCAAqC;YACrC,4BAA4B;YAC5B,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,OAAO,GAAG;YACd,4CAA4C;YAC5C,cAAc;YACd,cAAc;YACd,iBAAiB;YACjB,eAAe;YACf,eAAe;YACf,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC3E,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,OAAO,GAAG,+BAA+B,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,OAAO,GAAG,+CAA+C,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,8BAA8B;QAC9B,MAAM,OAAO,GAAG,gBAAgB,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,4DAA4D;QAC5D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,mDAAmD;QACnD,qEAAqE;QACrE,mEAAmE;QACnE,sCAAsC;QACtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,8CAA8C;QAC9C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,MAAM,aAAa,GAAG,GAAG,CAAC,CAAC,mCAAmC;QAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,0BAA0B;YAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEhC,mCAAmC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC,CAAC;YACxD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEvB,iFAAiF;YACjF,+EAA+E;YAC/E,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACpD,0DAA0D;YAC1D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1B,oCAAoC;YACpC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAE1D,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEnC,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG;YACxB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAClB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;SACvB,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG;YACrB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;SAC5B,CAAC;QACF,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;YAClC,OAAO,EAAE,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;YACxC,MAAM,EAAE,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;SACvC,CAAC;QAEF,MAAM,cAAc,GAAG;YACrB,iBAAiB,CAAC,IAAI;YACtB,iBAAiB,CAAC,OAAO;YACzB,iBAAiB,CAAC,MAAM;YACxB,cAAc,CAAC,IAAI;YACnB,cAAc,CAAC,OAAO;YACtB,cAAc,CAAC,MAAM;YACrB,WAAW,CAAC,IAAI;YAChB,WAAW,CAAC,OAAO;YACnB,WAAW,CAAC,MAAM;SACnB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAE1E,mFAAmF;QACnF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEhD,oBAAoB;QACpB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5D,0CAA0C;QAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzD,cAAc;QACd,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/ast-grep-query.d.ts
CHANGED
|
@@ -1,10 +1,41 @@
|
|
|
1
1
|
import type { NapiConfig } from '@ast-grep/napi';
|
|
2
|
+
import { Lang } from '@ast-grep/napi';
|
|
2
3
|
/** ast-grep pattern: either a simple string or a full NapiConfig rule object */
|
|
3
4
|
export type AstGrepRule = string | NapiConfig;
|
|
4
5
|
export interface AstGrepMatch {
|
|
5
6
|
lineNumber: number;
|
|
6
7
|
lineText: string;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Map a file extension to the ast-grep dispatch language label. Registry-
|
|
11
|
+
* backed via `extensionToLanguage` from ast-classifier.ts (mmnto-ai/totem#1653,
|
|
12
|
+
* #1654) — built-in extensions map to napi `Lang` enum values; pack-
|
|
13
|
+
* registered extensions map to their NapiLang custom string per
|
|
14
|
+
* ADR-097 § 10.
|
|
15
|
+
*/
|
|
16
|
+
export declare function extensionToLang(ext: string): Lang | string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Trailing-extension capture for glob/path strings (`/foo/bar.rs` → `rs`).
|
|
19
|
+
* Exported so compile-smoke-gate.ts shares the single source of truth for
|
|
20
|
+
* extracting target extensions out of `fileGlobs` (mmnto-ai/totem#1654).
|
|
21
|
+
*/
|
|
22
|
+
export declare const TRAILING_EXT_RE: RegExp;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the ast-grep Lang dispatch list for a rule's `fileGlobs`. Used by
|
|
25
|
+
* the compile-time pattern validator (`validateAstGrepPattern`) to parse
|
|
26
|
+
* the pattern under the rule's actual target grammar instead of always
|
|
27
|
+
* defaulting to TSX (mmnto-ai/totem#1654).
|
|
28
|
+
*
|
|
29
|
+
* Returns the deduplicated list of registered Lang values mapped from each
|
|
30
|
+
* positive glob's trailing extension. Negation globs are skipped (they
|
|
31
|
+
* describe files the rule should NOT match). When no positive glob carries
|
|
32
|
+
* a registered extension — including the unscoped-rule case where
|
|
33
|
+
* `fileGlobs` is undefined or empty — falls back to `[Lang.Tsx]` to
|
|
34
|
+
* preserve the legacy permissive-default behavior. Lang.Tsx remains the
|
|
35
|
+
* "unscoped" parser because it is the broadest TS/JS superset and many
|
|
36
|
+
* pre-1.16 rules ship without globs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveAstGrepLangs(fileGlobs?: readonly string[]): (Lang | string)[];
|
|
8
39
|
/**
|
|
9
40
|
* Per-rule failure sink. Invoked when `findAll` throws inside a batch. The
|
|
10
41
|
* index is the position of the failing query in the original input array so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-grep-query.d.ts","sourceRoot":"","sources":["../src/ast-grep-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-grep-query.d.ts","sourceRoot":"","sources":["../src/ast-grep-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAS,MAAM,gBAAgB,CAAC;AAO7C,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAItE;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAsB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,CAmBpF;AAID;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;AAwChE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,MAAM,EAAE,GACzB,YAAY,EAAE,CAUhB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACjE,aAAa,CAAC,EAAE,aAAa,GAC5B,YAAY,EAAE,EAAE,CAkClB"}
|
package/dist/ast-grep-query.js
CHANGED
|
@@ -1,24 +1,88 @@
|
|
|
1
1
|
import { Lang, parse } from '@ast-grep/napi';
|
|
2
|
+
import { extensionToLanguage } from './ast-classifier.js';
|
|
2
3
|
import { rethrowAsParseError } from './errors.js';
|
|
3
4
|
// ─── Constants ──────────────────────────────────────
|
|
4
5
|
const AST_GREP_HINT = 'Check the rule pattern syntax. If valid, the source file may contain syntax that crashes the parser.';
|
|
5
6
|
// ─── Language mapping ───────────────────────────────
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Map our `SupportedLanguage` string (e.g., `'typescript'`) to the
|
|
9
|
+
* ast-grep `Lang` enum value (e.g., `Lang.TypeScript`). Built-in mappings
|
|
10
|
+
* only — pack-contributed languages flow through as their SupportedLanguage
|
|
11
|
+
* string, which `@ast-grep/napi` accepts as a `CustomLang` string per
|
|
12
|
+
* its `NapiLang = Lang | (string & {})` type. Pack registration is
|
|
13
|
+
* expected to also register a dynamic language with `@ast-grep/napi`'s
|
|
14
|
+
* `registerDynamicLanguage()` API for the same string to flow end-to-end.
|
|
15
|
+
*/
|
|
16
|
+
function supportedLanguageToNapiLang(lang) {
|
|
17
|
+
switch (lang) {
|
|
18
|
+
case 'typescript':
|
|
10
19
|
return Lang.TypeScript;
|
|
11
|
-
case '
|
|
20
|
+
case 'tsx':
|
|
12
21
|
return Lang.Tsx;
|
|
13
|
-
case '
|
|
14
|
-
case '.mjs':
|
|
15
|
-
case '.cjs':
|
|
22
|
+
case 'javascript':
|
|
16
23
|
return Lang.JavaScript;
|
|
17
|
-
case '.jsx':
|
|
18
|
-
return Lang.Tsx;
|
|
19
24
|
default:
|
|
20
|
-
|
|
25
|
+
// Pack-contributed language — pass the string through. Caller passes
|
|
26
|
+
// it to `parse(napiLang, source)` which accepts CustomLang strings.
|
|
27
|
+
return lang;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Map a file extension to the ast-grep dispatch language label. Registry-
|
|
32
|
+
* backed via `extensionToLanguage` from ast-classifier.ts (mmnto-ai/totem#1653,
|
|
33
|
+
* #1654) — built-in extensions map to napi `Lang` enum values; pack-
|
|
34
|
+
* registered extensions map to their NapiLang custom string per
|
|
35
|
+
* ADR-097 § 10.
|
|
36
|
+
*/
|
|
37
|
+
export function extensionToLang(ext) {
|
|
38
|
+
const supported = extensionToLanguage(ext);
|
|
39
|
+
if (!supported)
|
|
40
|
+
return undefined;
|
|
41
|
+
return supportedLanguageToNapiLang(supported);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Trailing-extension capture for glob/path strings (`/foo/bar.rs` → `rs`).
|
|
45
|
+
* Exported so compile-smoke-gate.ts shares the single source of truth for
|
|
46
|
+
* extracting target extensions out of `fileGlobs` (mmnto-ai/totem#1654).
|
|
47
|
+
*/
|
|
48
|
+
export const TRAILING_EXT_RE = /\.([a-zA-Z0-9]+)$/;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the ast-grep Lang dispatch list for a rule's `fileGlobs`. Used by
|
|
51
|
+
* the compile-time pattern validator (`validateAstGrepPattern`) to parse
|
|
52
|
+
* the pattern under the rule's actual target grammar instead of always
|
|
53
|
+
* defaulting to TSX (mmnto-ai/totem#1654).
|
|
54
|
+
*
|
|
55
|
+
* Returns the deduplicated list of registered Lang values mapped from each
|
|
56
|
+
* positive glob's trailing extension. Negation globs are skipped (they
|
|
57
|
+
* describe files the rule should NOT match). When no positive glob carries
|
|
58
|
+
* a registered extension — including the unscoped-rule case where
|
|
59
|
+
* `fileGlobs` is undefined or empty — falls back to `[Lang.Tsx]` to
|
|
60
|
+
* preserve the legacy permissive-default behavior. Lang.Tsx remains the
|
|
61
|
+
* "unscoped" parser because it is the broadest TS/JS superset and many
|
|
62
|
+
* pre-1.16 rules ship without globs.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveAstGrepLangs(fileGlobs) {
|
|
65
|
+
if (!fileGlobs || fileGlobs.length === 0)
|
|
66
|
+
return [Lang.Tsx];
|
|
67
|
+
const seen = new Set();
|
|
68
|
+
const langs = [];
|
|
69
|
+
for (const glob of fileGlobs) {
|
|
70
|
+
if (glob.startsWith('!'))
|
|
71
|
+
continue;
|
|
72
|
+
const match = glob.match(TRAILING_EXT_RE);
|
|
73
|
+
if (!match)
|
|
74
|
+
continue;
|
|
75
|
+
const ext = `.${match[1].toLowerCase()}`;
|
|
76
|
+
const lang = extensionToLang(ext);
|
|
77
|
+
if (lang === undefined)
|
|
78
|
+
continue;
|
|
79
|
+
const key = String(lang);
|
|
80
|
+
if (seen.has(key))
|
|
81
|
+
continue;
|
|
82
|
+
seen.add(key);
|
|
83
|
+
langs.push(lang);
|
|
21
84
|
}
|
|
85
|
+
return langs.length > 0 ? langs : [Lang.Tsx];
|
|
22
86
|
}
|
|
23
87
|
function executeQuery(root, rule, addedLineNumbers, lines) {
|
|
24
88
|
if (addedLineNumbers.length === 0)
|