From 5d37ebcc02f6ca2ce1ced93f803dd1daf634d866 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 27 Oct 2026 14:00:49 +0000 Subject: feat(editor): support PP directives in VS Code and Bundle Share preprocessor highlighting through the existing grammar, keep conditional blocks at the ordinary indentation depth, and exercise switches in Bundle's native runner test. Co-Authored-By: Claude Opus 5.5 --- plugin/test/highlighting.test.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'plugin/test/highlighting.test.js') diff --git a/plugin/test/highlighting.test.js b/plugin/test/highlighting.test.js index c8ee3f7..1edac7b 100644 --- a/plugin/test/highlighting.test.js +++ b/plugin/test/highlighting.test.js @@ -155,13 +155,27 @@ test('supported keywords reuse C++ scopes without matching identifiers or quoted } }); -test('library directives require their own line and ellipses use the C++ variadic scope', () => { - assert.ok(scopesAt('\t#LIB ', '#').includes('punctuation.definition.directive.cpp')); - assert.ok(scopesAt('\t#LIB ', 'LIB').includes('keyword.control.directive.pragma.cpp')); - for (const text of ['#lib', '#LIBRARY', '#LIB // comment', 'X #LIB', '// #LIB', 'OUTPUT "#LIB"']) { - assert.ok(!scopesAt(text, '#') - .includes('punctuation.definition.directive.cpp'), text); +test('preprocessor directives reuse C++ scopes and shield switch names from ordinary keywords', () => { + for (const [word, scope] of [ + ['PP_DEFINE', 'keyword.control.directive.define.cpp'], + ['PP_UNDEF', 'keyword.control.directive.undef.cpp'], + ['PP_IFDEF', 'keyword.control.directive.conditional.cpp'], + ['PP_IFNDEF', 'keyword.control.directive.conditional.cpp'], + ['PP_ENDIF', 'keyword.control.directive.conditional.cpp'] + ]) { + assert.ok(scopesAt(`\t${word} __LIB // comment`, word).includes(scope)); + for (const text of [word.toLowerCase(), `${word}Value`, `_${word}`, `X ${word}`, `// ${word}`, `OUTPUT "${word}"`]) { + assert.ok(!scopesAt(text, word.toLowerCase() === text ? text : word).includes(scope), text); + } } + for (const word of ['__LIB', 'FUNCTION', 'INTEGER']) { + assert.ok(scopesAt(`PP_DEFINE ${word}`, word).includes('entity.name.function.preprocessor.cpp')); + } + assert.ok(scopesAt('PP_IFDEF Flag // PP_ENDIF', 'PP_ENDIF').some(s => s.startsWith('comment.'))); + assert.ok(!scopesAt('#LIB', 'LIB').some(s => s.startsWith('keyword.control.directive.'))); +}); + +test('ellipses use the C++ variadic scope', () => { for (const text of ['TEMPLATE ', 'EXTERN "C" EXTERN_PROCEDURE print(C_INT, ...)', 'CALL print(Values...)']) { assert.ok(scopesAt(text, '...').includes('punctuation.vararg-ellipses.cpp'), text); } -- cgit v1.3.1-4-g156e