Skip to content

Commit 66fc1b9

Browse files
authored
fix(test): smoke-test erlang grammar compatibility to prevent false failures
* fix(test): smoke-test erlang grammar compatibility before running suite The erlangAvailable guard only checked whether the WASM loaded, not whether it produced the expected node types. A stale WASM from a different grammar vendor (e.g. enolib/tree-sitter-erlang) loads successfully but emits generic 'attribute' nodes instead of 'module_attribute'/'fun_decl'/etc., so all extractions return empty and every test fails rather than skips. Add a minimal probe in beforeAll: parse '-module(probe).' and check that extractErlangSymbols finds a 'module' definition. If it doesn't — whether because the grammar is absent or is the wrong vendor — erlangAvailable is set to false and all 14 tests skip cleanly. Closes #1502 Closes #1504 * test(erlang): eliminate redundant parsers.get call in beforeAll smoke-test
1 parent 4a1329f commit 66fc1b9

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

tests/parsers/erlang.test.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,23 @@ describe('Erlang parser', () => {
99

1010
beforeAll(async () => {
1111
parsers = await createParsers();
12-
erlangAvailable = !!parsers.get('erlang');
12+
const erlangParser = parsers.get('erlang');
13+
if (!erlangParser) {
14+
erlangAvailable = false;
15+
return;
16+
}
17+
// Smoke-test: verify the loaded grammar is the expected WhatsApp/tree-sitter-erlang
18+
// variant whose AST uses specific node types (module_attribute, fun_decl, etc.).
19+
// A stale WASM from a different vendor (e.g. enolib/tree-sitter-erlang) loads
20+
// successfully but produces generic `attribute` nodes, causing all extractions to
21+
// return empty. Treat that as "unavailable" so tests skip rather than fail.
22+
try {
23+
const tree = erlangParser.parse('-module(probe).');
24+
const result = extractErlangSymbols(tree, 'probe.erl');
25+
erlangAvailable = result.definitions.some((d) => d.name === 'probe' && d.kind === 'module');
26+
} catch {
27+
erlangAvailable = false;
28+
}
1329
});
1430

1531
function parseErlang(code) {

0 commit comments

Comments
 (0)