From 805dca1dc3d3640f753ea68474029cf7051ef962 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 18 Jun 2026 07:47:34 -0700 Subject: [PATCH] Use C++ formatting for C++ splits in testdata files. (#7385) Refactor the textmate grammar to use a different scope for testdata files. Move the existing handling for `CHECK:STDOUT:` there, and add handling for C++ file splits there too. Assisted-by: Gemini via Antigravity --- utils/vscode/BUILD | 2 +- .../vscode/carbon-check-test.tmLanguage.json | 21 ------- utils/vscode/carbon-testdata.tmLanguage.json | 56 +++++++++++++++++++ utils/vscode/package.json | 22 +++++--- utils/vscode/src/extension.ts | 7 ++- 5 files changed, 77 insertions(+), 31 deletions(-) delete mode 100644 utils/vscode/carbon-check-test.tmLanguage.json create mode 100644 utils/vscode/carbon-testdata.tmLanguage.json diff --git a/utils/vscode/BUILD b/utils/vscode/BUILD index ce2a439fed35..c9cb433f3c20 100644 --- a/utils/vscode/BUILD +++ b/utils/vscode/BUILD @@ -8,8 +8,8 @@ exports_files( [ "package.json", "carbon.tmLanguage.json", + "carbon-testdata.tmLanguage.json", "semir.tmLanguage.json", - "carbon-check-test.tmLanguage.json", "language-configuration.json", "images/icon.png", ], diff --git a/utils/vscode/carbon-check-test.tmLanguage.json b/utils/vscode/carbon-check-test.tmLanguage.json deleted file mode 100644 index ef630075533e..000000000000 --- a/utils/vscode/carbon-check-test.tmLanguage.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "scopeName": "source.carbon-check-test", - "injectionSelector": "L:source.carbon", - "patterns": [ - { - "begin": "^(\\s*//\\s*CHECK:STDOUT:)", - "beginCaptures": { - "1": { - "name": "comment.line.carbon" - } - }, - "end": "$", - "patterns": [ - { - "include": "source.carbon-semir" - } - ] - } - ] -} diff --git a/utils/vscode/carbon-testdata.tmLanguage.json b/utils/vscode/carbon-testdata.tmLanguage.json new file mode 100644 index 000000000000..41c3d5ec8bef --- /dev/null +++ b/utils/vscode/carbon-testdata.tmLanguage.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "carbon-testdata", + "scopeName": "source.carbon-testdata", + "fileTypes": [], + "patterns": [ + { + "include": "#cpp-file-splits" + }, + { + "include": "#check-stdout" + }, + { + "include": "source.carbon" + } + ], + "repository": { + "cpp-file-splits": { + "patterns": [ + { + "comment": "C++ file split in test files", + "begin": "^//\\s*---\\s*([^\\s]+\\.(h|hh|hpp|hxx|h\\+\\+|cpp|cc|cxx|c\\+\\+|c|H|HH|HPP|HXX|H\\+\\+|CPP|CC|CXX|C\\+\\+|C))\\s*$", + "beginCaptures": { + "0": { "name": "comment.line.carbon" } + }, + "end": "^(?=//\\s*---)", + "contentName": "meta.embedded.block.cpp", + "patterns": [ + { + "include": "source.cpp" + } + ] + } + ] + }, + "check-stdout": { + "patterns": [ + { + "comment": "Highlight compile output / SemIR in CHECK:STDOUT lines", + "begin": "^(\\s*//\\s*CHECK:STDOUT:)", + "beginCaptures": { + "1": { + "name": "comment.line.carbon" + } + }, + "end": "$", + "patterns": [ + { + "include": "source.carbon-semir" + } + ] + } + ] + } + } +} diff --git a/utils/vscode/package.json b/utils/vscode/package.json index 44b556c6a674..8c55adb65612 100644 --- a/utils/vscode/package.json +++ b/utils/vscode/package.json @@ -18,6 +18,16 @@ "main": "./dist/extension.js", "contributes": { "languages": [ + { + "id": "carbon-testdata", + "aliases": [ + "Carbon Testdata" + ], + "filenamePatterns": [ + "**/testdata/**/*.carbon" + ], + "configuration": "./language-configuration.json" + }, { "id": "carbon", "aliases": [ @@ -39,6 +49,11 @@ } ], "grammars": [ + { + "language": "carbon-testdata", + "scopeName": "source.carbon-testdata", + "path": "./carbon-testdata.tmLanguage.json" + }, { "language": "carbon", "scopeName": "source.carbon", @@ -48,13 +63,6 @@ "language": "semir", "scopeName": "source.carbon-semir", "path": "./semir.tmLanguage.json" - }, - { - "scopeName": "source.carbon-check-test", - "path": "./carbon-check-test.tmLanguage.json", - "injectTo": [ - "source.carbon" - ] } ], "configuration": { diff --git a/utils/vscode/src/extension.ts b/utils/vscode/src/extension.ts index fd178cd2a811..8b97121047b6 100644 --- a/utils/vscode/src/extension.ts +++ b/utils/vscode/src/extension.ts @@ -36,7 +36,7 @@ function updateSplitLineNumbers(editor: TextEditor | undefined) { return; } const document = editor.document; - if (!document.fileName.includes('/testdata/')) { + if (document.languageId !== 'carbon-testdata') { return; } @@ -189,7 +189,10 @@ export function activate(context: ExtensionContext) { }; const clientOptions: LanguageClientOptions = { - documentSelector: [{ language: 'carbon' }], + documentSelector: [ + { language: 'carbon' }, + { language: 'carbon-testdata' }, + ], }; // Create and start the client.