From c6396a3d1d25ab3f79115eb7b28d3ef8d985a666 Mon Sep 17 00:00:00 2001 From: Mikhail Kornilovich Date: Sun, 5 Apr 2026 21:12:13 +0300 Subject: [PATCH] add plugin and fix example --- editor/.DS_Store | Bin 0 -> 6148 bytes editor/vscode-jdg/README.md | 29 ++++++ editor/vscode-jdg/jdg-language-0.1.0.vsix | Bin 0 -> 3615 bytes editor/vscode-jdg/language-configuration.json | 24 +++++ editor/vscode-jdg/package.json | 22 +++++ .../vscode-jdg/syntaxes/jdg.tmLanguage.json | 83 ++++++++++++++++++ example/c-sum/sum.jdg | 1 - 7 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 editor/.DS_Store create mode 100644 editor/vscode-jdg/README.md create mode 100644 editor/vscode-jdg/jdg-language-0.1.0.vsix create mode 100644 editor/vscode-jdg/language-configuration.json create mode 100644 editor/vscode-jdg/package.json create mode 100644 editor/vscode-jdg/syntaxes/jdg.tmLanguage.json diff --git a/editor/.DS_Store b/editor/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..05bb5d75e6e4bb489dccf391e4f364fed9f0b126 GIT binary patch literal 6148 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 UAo(x=fQEd1Abb2hhNHLt1LUPqb^rhX literal 0 HcmV?d00001 diff --git a/editor/vscode-jdg/language-configuration.json b/editor/vscode-jdg/language-configuration.json new file mode 100644 index 0000000..0cd0878 --- /dev/null +++ b/editor/vscode-jdg/language-configuration.json @@ -0,0 +1,24 @@ +{ + "comments": { + "lineComment": "//" + }, + "brackets": [ + ["{", "}"], + ["(", ")"] + ], + "autoClosingPairs": [ + { "open": "{", "close": "}" }, + { "open": "(", "close": ")" }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "\"\"\"", "close": "\"\"\"" } + ], + "surroundingPairs": [ + ["{", "}"], + ["(", ")"], + ["\"", "\""] + ], + "indentationRules": { + "increaseIndentPattern": "^.*\\{[^}]*$", + "decreaseIndentPattern": "^\\s*\\}" + } +} diff --git a/editor/vscode-jdg/package.json b/editor/vscode-jdg/package.json new file mode 100644 index 0000000..56e7b92 --- /dev/null +++ b/editor/vscode-jdg/package.json @@ -0,0 +1,22 @@ +{ + "name": "jdg-language", + "displayName": "Judge DSL (.jdg)", + "description": "Syntax highlighting for judge test-suite files", + "version": "0.1.0", + "publisher": "judge", + "engines": { "vscode": "^1.60.0" }, + "categories": ["Programming Languages"], + "contributes": { + "languages": [{ + "id": "jdg", + "aliases": ["Judge DSL", "jdg"], + "extensions": [".jdg"], + "configuration": "./language-configuration.json" + }], + "grammars": [{ + "language": "jdg", + "scopeName": "source.jdg", + "path": "./syntaxes/jdg.tmLanguage.json" + }] + } +} diff --git a/editor/vscode-jdg/syntaxes/jdg.tmLanguage.json b/editor/vscode-jdg/syntaxes/jdg.tmLanguage.json new file mode 100644 index 0000000..021df6c --- /dev/null +++ b/editor/vscode-jdg/syntaxes/jdg.tmLanguage.json @@ -0,0 +1,83 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Judge DSL", + "scopeName": "source.jdg", + "fileTypes": ["jdg"], + "patterns": [ + { "include": "#comments" }, + { "include": "#heredoc" }, + { "include": "#string" }, + { "include": "#duration" }, + { "include": "#number" }, + { "include": "#boolean" }, + { "include": "#top-keywords" }, + { "include": "#block-keywords" }, + { "include": "#matcher-keywords" }, + { "include": "#scoring-values" }, + { "include": "#operators" }, + { "include": "#braces" }, + { "include": "#identifier" } + ], + "repository": { + "comments": { + "name": "comment.line.double-slash.jdg", + "match": "//.*$" + }, + "heredoc": { + "name": "string.quoted.triple.jdg", + "begin": "\"\"\"", + "end": "\"\"\"", + "patterns": [ + { "name": "constant.character.escape.jdg", "match": "\\\\[nt\\\\\"]" } + ] + }, + "string": { + "name": "string.quoted.double.jdg", + "begin": "\"", + "end": "\"", + "patterns": [ + { "name": "constant.character.escape.jdg", "match": "\\\\[nt\\\\\"]" } + ] + }, + "duration": { + "name": "constant.numeric.duration.jdg", + "match": "\\b-?\\d+(?:\\.\\d+)?(?:ms|s|m|h)\\b" + }, + "number": { + "name": "constant.numeric.jdg", + "match": "\\b-?\\d+(?:\\.\\d+)?\\b" + }, + "boolean": { + "name": "constant.language.boolean.jdg", + "match": "\\b(?:true|false)\\b" + }, + "top-keywords": { + "name": "keyword.control.jdg", + "match": "\\b(?:build|build_linux|build_windows|build_darwin|binary|timeout|normalize_crlf|trim_trailing_ws|group|test|pattern|env|file|outFile)\\b" + }, + "block-keywords": { + "name": "variable.parameter.jdg", + "match": "\\b(?:weight|scoring|wrapper|stdin|stdout|stderr|args|exitCode|input|output|dirs)\\b" + }, + "matcher-keywords": { + "name": "support.function.jdg", + "match": "\\b(?:contains|matches|anyOrder|of)\\b" + }, + "scoring-values": { + "name": "constant.language.jdg", + "match": "\\b(?:partial|all_or_none)\\b" + }, + "operators": { + "name": "keyword.operator.jdg", + "match": "[=~]" + }, + "braces": { + "name": "punctuation.section.braces.jdg", + "match": "[{}()]" + }, + "identifier": { + "name": "variable.other.jdg", + "match": "\\b[A-Za-z_][A-Za-z0-9_]*\\b" + } + } +} diff --git a/example/c-sum/sum.jdg b/example/c-sum/sum.jdg index 375d639..95494e9 100644 --- a/example/c-sum/sum.jdg +++ b/example/c-sum/sum.jdg @@ -8,7 +8,6 @@ // Under MSVC on CI we use build_windows (cl's CLI is different). build "$CC -O2 -std=c11 -Wall -Wextra solution.c -o solution" -build_windows "cl /nologo /O2 /W3 solution.c /Fe:solution.exe" binary = "solution" timeout 5s