From caf559bf0bd01a3ea3364260be055b8974e04e57 Mon Sep 17 00:00:00 2001 From: Michael Doyle Date: Mon, 2 Mar 2026 09:55:05 -0500 Subject: [PATCH] refactor: remove support for legacy internal markers across all editors The primary goal of this change is to strictly remove support for legacy <<>> internal markers from all authoring environments, as these are intended for internal runtime use and have been superseded by the Handlebars helper syntax. - Remove syntax highlighting and snippet support for internal <<>> markers in VS Code, JetBrains, Vim, Monaco, and Emacs extensions. - Clean up dead token types and highlighting attributes in the JetBrains and Monaco implementations. - Update the core Tree-sitter grammar tests to remove legacy marker validation. - Independently transition all role and section snippets from block-based ({{#role}}) to inline marker ({{role}}) Handlebars helpers to simplify template authoring. - Restore cursor positioning (bash) and proper newlines to role snippets in VS Code to ensure consistent usability. --- docs/design/promptly.md | 1 - packages/codemirror/README.md | 3 +- packages/codemirror/src/language.ts | 5 - packages/emacs/README.md | 2 +- packages/emacs/dotprompt-mode.el | 5 +- packages/jetbrains/README.md | 18 +- .../com/google/dotprompt/DotpromptLexer.kt | 24 +- .../dotprompt/DotpromptSyntaxHighlighter.kt | 18 - .../google/dotprompt/DotpromptTokenTypes.kt | 3 - .../resources/liveTemplates/Dotprompt.xml | 19 +- packages/monaco/README.md | 24 +- packages/monaco/src/completions.ts | 28 +- packages/monaco/src/hover.ts | 5 +- packages/monaco/src/language.ts | 9 +- packages/treesitter/README.md | 7 +- packages/treesitter/grammar.js | 9 +- packages/treesitter/queries/highlights.scm | 3 - packages/treesitter/src/grammar.json | 28 +- packages/treesitter/src/node-types.json | 37 +- packages/treesitter/src/parser.c | 2250 ++++++++--------- packages/treesitter/test/corpus/basic.txt | 45 +- packages/vim/README.md | 2 +- packages/vim/syntax/dotprompt.vim | 2 - packages/vscode/CHANGELOG.md | 2 +- packages/vscode/README.md | 3 +- packages/vscode/language-configuration.json | 14 +- .../vscode/snippets/dotprompt.snippets.json | 41 +- .../vscode/syntaxes/dotprompt.tmLanguage.json | 23 - rs/promptly/src/lsp.rs | 19 +- 29 files changed, 1130 insertions(+), 1519 deletions(-) diff --git a/docs/design/promptly.md b/docs/design/promptly.md index 87c663805..fc9f71c3f 100644 --- a/docs/design/promptly.md +++ b/docs/design/promptly.md @@ -6587,7 +6587,6 @@ packages/chrome/ | Handlebars braces | Orange | `{{`, `}}` | | Handlebars helper | Purple | `#if`, `#each`, `#role` | | Variable | Cyan | `{{ name }}` | -| Dotprompt marker | Magenta | `<<>>` | | Comment | Gray italic | `{{! comment }}` | | Component | Status | Location | diff --git a/packages/codemirror/README.md b/packages/codemirror/README.md index 5861cc115..dbd3c3cb8 100644 --- a/packages/codemirror/README.md +++ b/packages/codemirror/README.md @@ -4,8 +4,7 @@ CodeMirror 6 language support for Dotprompt (`.prompt`) files. ## Features -- **Syntax Highlighting**: YAML frontmatter, Handlebars templates, Dotprompt - markers +- **Syntax Highlighting**: YAML frontmatter, Handlebars templates - **Autocompletion**: Helpers, frontmatter fields, model names - **Theming**: Dark and light theme support diff --git a/packages/codemirror/src/language.ts b/packages/codemirror/src/language.ts index c58e8575d..5089eb172 100644 --- a/packages/codemirror/src/language.ts +++ b/packages/codemirror/src/language.ts @@ -155,11 +155,6 @@ export const dotpromptStreamParser = { return 'comment'; } - // Dotprompt markers - if (stream.match(/<<]+>>>/)) { - return 'keyword'; - } - // Handlebars block start {{#helper if (stream.match(/\{\{#/)) { state.context = 'handlebars'; diff --git a/packages/emacs/README.md b/packages/emacs/README.md index 06ec15b11..f00dd2caa 100644 --- a/packages/emacs/README.md +++ b/packages/emacs/README.md @@ -4,7 +4,7 @@ Provides a major mode for editing Dotprompt (`.prompt`) files with syntax highli ## Features -- **Syntax Highlighting**: Handlebars helpers, partials, Dotprompt markers +- **Syntax Highlighting**: Handlebars helpers, partials - **LSP Integration**: Diagnostics, formatting, hover via eglot or lsp-mode - **Format Buffer**: `C-c C-f` or `M-x dotprompt-format-buffer` - **Format on Save**: Optional automatic formatting diff --git a/packages/emacs/dotprompt-mode.el b/packages/emacs/dotprompt-mode.el index 1228e9e80..155893643 100644 --- a/packages/emacs/dotprompt-mode.el +++ b/packages/emacs/dotprompt-mode.el @@ -23,7 +23,7 @@ ;;; Commentary: ;; Major mode for editing Dotprompt files (.prompt). -;; Provides syntax highlighting for markers, helpers, and partials. +;; Provides syntax highlighting for helpers and partials. ;; Includes LSP integration via eglot or lsp-mode for diagnostics, ;; formatting, and hover documentation when `promptly` is installed. ;; @@ -69,9 +69,6 @@ ;; YAML numeric values '(":\\s-+\\([0-9]+\\.?[0-9]*\\)$" 1 font-lock-constant-face) - ;; Dotprompt markers <<>> etc. - '("<<]+>>>" . font-lock-preprocessor-face) - ;; Handlebars block comments {{!-- ... --}} '("{{!--\\(.\\|\n\\)*?--}}" . font-lock-comment-face) diff --git a/packages/jetbrains/README.md b/packages/jetbrains/README.md index 92264d8d6..df21d7a92 100644 --- a/packages/jetbrains/README.md +++ b/packages/jetbrains/README.md @@ -4,7 +4,7 @@ Language support for Dotprompt (`.prompt`) files in JetBrains IDEs (IntelliJ IDE ## Features -- **Syntax Highlighting**: YAML frontmatter, Handlebars templates, Dotprompt markers +- **Syntax Highlighting**: YAML frontmatter, Handlebars templates - **LSP Integration**: Real-time diagnostics, formatting, and hover documentation (via LSP4IJ) - **Live Templates**: Type `role`, `if`, `each`, `json` + Tab for quick insertions - **Code Comments**: Block comment support using `{{! ... }}` @@ -30,6 +30,7 @@ Language support for Dotprompt (`.prompt`) files in JetBrains IDEs (IntelliJ IDE 1. **Prerequisites**: Ensure you have Gradle and JDK 17+ installed 2. **Build the plugin**: + ```bash cd packages/jetbrains gradle buildPlugin @@ -49,8 +50,8 @@ bazel build //packages/jetbrains:dotprompt-intellij This produces `bazel-bin/packages/jetbrains/dotprompt-intellij.jar`. -> **Note**: For full plugin packaging (with plugin.xml, icons, LSP4IJ integration), -> use the Gradle build. The Bazel target is useful for incremental compilation +> **Note**: For full plugin packaging (with plugin.xml, icons, LSP4IJ integration), +> use the Gradle build. The Bazel target is useful for incremental compilation > during development and IDE integration. ### Install promptly for LSP Features @@ -80,10 +81,10 @@ Type these abbreviations and press Tab to expand: | Abbreviation | Expands To | |--------------|------------| -| `role` | Role block with customizable role name | -| `system` | System role block | -| `user` | User role block | -| `model` | Model role block | +| `role` | Role marker with customizable role name | +| `system` | System role marker | +| `user` | User role marker | +| `model` | Model role marker | | `if` | Handlebars if block | | `ifelse` | Handlebars if-else block | | `unless` | Handlebars unless block | @@ -92,7 +93,7 @@ Type these abbreviations and press Tab to expand: | `json` | JSON serialization helper | | `media` | Media embedding helper | | `history` | History insertion | -| `section` | Named section block | +| `section` | Named section marker | | `partial` | Partial template inclusion | | `comment` | Handlebars comment | | `prompt` | Complete prompt template | @@ -121,6 +122,7 @@ Go to **Settings/Preferences** → **Languages & Frameworks** → **Dotprompt**: ### Auto-Detection The plugin automatically finds `promptly` in: + 1. User-configured path (Settings) 2. System PATH 3. `~/.cargo/bin/promptly` diff --git a/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptLexer.kt b/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptLexer.kt index b648a8557..a4e4678c8 100644 --- a/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptLexer.kt +++ b/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptLexer.kt @@ -25,7 +25,6 @@ import com.intellij.psi.tree.IElementType * This lexer recognizes: * - YAML frontmatter delimiters (---) * - Handlebars expressions ({{ ... }}) - * - Dotprompt markers (<<>>) * - Comments ({{! ... }}) */ class DotpromptLexer : LexerBase() { @@ -85,14 +84,6 @@ class DotpromptLexer : LexerBase() { return } - // Check for Dotprompt marker - if (lookingAt("<<' && buffer[pos + 1] == '>' && buffer[pos + 2] == '>') { - return pos + 3 - } - pos++ - } - return bufferEnd - } - private fun findEndOfHandlebars(): Int { var pos = tokenStart while (pos < bufferEnd - 1) { @@ -175,8 +155,8 @@ class DotpromptLexer : LexerBase() { var pos = tokenStart + 1 while (pos < bufferEnd) { if (lookingAtPos(pos, "---") || - lookingAtPos(pos, "{{") || - lookingAtPos(pos, "<< YAML_VALUE_KEYS DotpromptTokenTypes.HANDLEBARS_OPEN -> HANDLEBARS_BRACE_KEYS DotpromptTokenTypes.HANDLEBARS_CLOSE -> HANDLEBARS_BRACE_KEYS - DotpromptTokenTypes.HANDLEBARS_HELPER -> HANDLEBARS_HELPER_KEYS - DotpromptTokenTypes.HANDLEBARS_VARIABLE -> HANDLEBARS_VARIABLE_KEYS - DotpromptTokenTypes.MARKER -> MARKER_KEYS DotpromptTokenTypes.COMMENT -> COMMENT_KEYS DotpromptTokenTypes.HEADER_COMMENT -> COMMENT_KEYS else -> EMPTY_KEYS @@ -81,18 +78,6 @@ class DotpromptSyntaxHighlighter : SyntaxHighlighterBase() { "DOTPROMPT_HANDLEBARS_BRACE", DefaultLanguageHighlighterColors.BRACES ) - private val HANDLEBARS_HELPER = TextAttributesKey.createTextAttributesKey( - "DOTPROMPT_HANDLEBARS_HELPER", - DefaultLanguageHighlighterColors.FUNCTION_CALL - ) - private val HANDLEBARS_VARIABLE = TextAttributesKey.createTextAttributesKey( - "DOTPROMPT_HANDLEBARS_VARIABLE", - DefaultLanguageHighlighterColors.IDENTIFIER - ) - private val MARKER = TextAttributesKey.createTextAttributesKey( - "DOTPROMPT_MARKER", - DefaultLanguageHighlighterColors.METADATA - ) private val COMMENT = TextAttributesKey.createTextAttributesKey( "DOTPROMPT_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT @@ -102,9 +87,6 @@ class DotpromptSyntaxHighlighter : SyntaxHighlighterBase() { private val YAML_KEY_KEYS = arrayOf(YAML_KEY) private val YAML_VALUE_KEYS = arrayOf(YAML_VALUE) private val HANDLEBARS_BRACE_KEYS = arrayOf(HANDLEBARS_BRACE) - private val HANDLEBARS_HELPER_KEYS = arrayOf(HANDLEBARS_HELPER) - private val HANDLEBARS_VARIABLE_KEYS = arrayOf(HANDLEBARS_VARIABLE) - private val MARKER_KEYS = arrayOf(MARKER) private val COMMENT_KEYS = arrayOf(COMMENT) } } diff --git a/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptTokenTypes.kt b/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptTokenTypes.kt index dfd3bf4af..42daf6b27 100644 --- a/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptTokenTypes.kt +++ b/packages/jetbrains/src/main/kotlin/com/google/dotprompt/DotpromptTokenTypes.kt @@ -27,9 +27,6 @@ object DotpromptTokenTypes { @JvmField val YAML_VALUE = IElementType("YAML_VALUE", DotpromptLanguage.INSTANCE) @JvmField val HANDLEBARS_OPEN = IElementType("HANDLEBARS_OPEN", DotpromptLanguage.INSTANCE) @JvmField val HANDLEBARS_CLOSE = IElementType("HANDLEBARS_CLOSE", DotpromptLanguage.INSTANCE) - @JvmField val HANDLEBARS_HELPER = IElementType("HANDLEBARS_HELPER", DotpromptLanguage.INSTANCE) - @JvmField val HANDLEBARS_VARIABLE = IElementType("HANDLEBARS_VARIABLE", DotpromptLanguage.INSTANCE) - @JvmField val MARKER = IElementType("MARKER", DotpromptLanguage.INSTANCE) @JvmField val COMMENT = IElementType("COMMENT", DotpromptLanguage.INSTANCE) @JvmField val HEADER_COMMENT = IElementType("HEADER_COMMENT", DotpromptLanguage.INSTANCE) @JvmField val TEXT = IElementType("TEXT", DotpromptLanguage.INSTANCE) diff --git a/packages/jetbrains/src/main/resources/liveTemplates/Dotprompt.xml b/packages/jetbrains/src/main/resources/liveTemplates/Dotprompt.xml index e3973900b..0c80668aa 100644 --- a/packages/jetbrains/src/main/resources/liveTemplates/Dotprompt.xml +++ b/packages/jetbrains/src/main/resources/liveTemplates/Dotprompt.xml @@ -17,31 +17,27 @@ SPDX-License-Identifier: Apache-2.0 --> - -