From ec4b412b64a41c49365171b058c7f3fc442a938d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 00:23:02 +0000 Subject: [PATCH 1/4] Initial plan From 16b23c7f981d680c259524769b414b20ce430f54 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 00:25:18 +0000 Subject: [PATCH 2/4] Initial exploration - understanding the issue Co-authored-by: ericelliott <364727+ericelliott@users.noreply.github.com> --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36afb72..29e9bf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sudolang-llm-support", - "version": "2.0.0-rc.1", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sudolang-llm-support", - "version": "2.0.0-rc.1", + "version": "2.0.0", "hasInstallScript": true, "devDependencies": { "@types/node": "14.x", From 5f732ced6009a33fcf50ae90185746f25870987b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 00:26:38 +0000 Subject: [PATCH 3/4] Add YAML frontmatter syntax highlighting support Co-authored-by: ericelliott <364727+ericelliott@users.noreply.github.com> --- .gitignore | 3 +++ syntaxes/sudolang.tmLanguage.json | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/.gitignore b/.gitignore index 275236c..2d95cd9 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,6 @@ dist .vscode/**/* !.vscode/launch.json .DS_Store + +# Test files +test-frontmatter.sudo.md diff --git a/syntaxes/sudolang.tmLanguage.json b/syntaxes/sudolang.tmLanguage.json index 02796f9..61d703d 100644 --- a/syntaxes/sudolang.tmLanguage.json +++ b/syntaxes/sudolang.tmLanguage.json @@ -3,6 +3,7 @@ "name": "SudoLang", "fileTypes": ["sudo", "sudo.md", "mdc"], "patterns": [ + { "include": "#frontmatter" }, { "include": "#comments" }, { "include": "#markdown-headers" }, { "include": "#keywords" }, @@ -15,6 +16,21 @@ { "include": "#expressions" } ], "repository": { + "frontmatter": { + "begin": "\\A(---)", + "beginCaptures": { + "1": { "name": "punctuation.definition.comment.yaml" } + }, + "end": "^(---|\\.\\.\\.)", + "endCaptures": { + "1": { "name": "punctuation.definition.comment.yaml" } + }, + "name": "meta.embedded.block.frontmatter", + "contentName": "source.yaml", + "patterns": [ + { "include": "source.yaml" } + ] + }, "markdown-headers": { "patterns": [ { From 1d4b4566feffa89daeab41092d0e4b8ba8f335d8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 00:28:21 +0000 Subject: [PATCH 4/4] Update CHANGELOG with frontmatter feature Co-authored-by: ericelliott <364727+ericelliott@users.noreply.github.com> --- CHANGELOG.md | 1 + sudolang-llm-support-2.0.0.vsix | Bin 1466769 -> 1467205 bytes 2 files changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7978bb8..493c692 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Added +- YAML frontmatter syntax highlighting for .sudo.md files - Keys, values, and quoted strings now have proper syntax highlighting matching standard .md files. - New [Autodux](examples/autodux.sudo) demonstrates how to use SudoLang to create a Redux state management system that automatically generates reducers, action creators, and selectors based on a brief description. - New [Whispers](examples/whispers.sudo) text adventure game demonstrates rich constraint-based programming and game `/save` and `/load` commands. diff --git a/sudolang-llm-support-2.0.0.vsix b/sudolang-llm-support-2.0.0.vsix index cbb2caf8fd2fdd9b14bd61775396a72f3134be92..5c8bca1cee0a41d1858df9c2b3e1afac40618525 100644 GIT binary patch delta 7056 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