From 75c0e28e3d56878dbd492cb0c6d6bf341f9e6de7 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Wed, 21 Oct 2026 10:37:17 +0000 Subject: feat(plugin): highlight type names and template calls Co-Authored-By: Claude Opus 5.5 --- plugin/syntaxes/cie-pseudocode.tmLanguage.json | 673 ++++++++++++++++++++----- 1 file changed, 534 insertions(+), 139 deletions(-) (limited to 'plugin/syntaxes/cie-pseudocode.tmLanguage.json') diff --git a/plugin/syntaxes/cie-pseudocode.tmLanguage.json b/plugin/syntaxes/cie-pseudocode.tmLanguage.json index cdf175a..16a4ac4 100644 --- a/plugin/syntaxes/cie-pseudocode.tmLanguage.json +++ b/plugin/syntaxes/cie-pseudocode.tmLanguage.json @@ -3,145 +3,7 @@ "scopeName": "source.cie-pseudocode", "patterns": [ { - "include": "#line_comment" - }, - { - "include": "#strings" - }, - { - "match": "^\\s*(#)(LIB)\\s*$", - "captures": { - "1": { - "name": "punctuation.definition.directive.cpp" - }, - "2": { - "name": "keyword.control.directive.pragma.cpp" - } - } - }, - { - "match": "(?|<=|>=|[+*/=&^<>-]", - "name": "keyword.operator.cie-pseudocode" - }, - { - "match": "(?", + "name": "punctuation.section.angle-brackets.end.template.call.cpp" + }, + { + "match": "\\.\\.\\.", + "name": "punctuation.vararg-ellipses.cpp" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.comma.cie-pseudocode" + } + ] + }, + "type_annotation": { + "match": "(:)\\s*((?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "1": { + "name": "punctuation.separator.cie-pseudocode" + }, + "2": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + "element_type": { + "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "1": { + "name": "storage.modifier.cie-pseudocode" + }, + "2": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + "return_type": { + "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "1": { + "name": "storage.modifier.cie-pseudocode" + }, + "2": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + "array_bounds": { + "begin": "\\[", + "end": "\\]", + "beginCaptures": { + "0": { + "name": "punctuation.section.brackets.cie-pseudocode" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.section.brackets.cie-pseudocode" + } + }, + "patterns": [ + { + "include": "#array_bounds" + }, + { + "include": "#code" + } + ], + "comment": "Keep array bound expressions outside declaration type annotations, including nested indexing." + }, + "declaration": { + "begin": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "1": { + "name": "keyword.operator.cie-pseudocode" + }, + "2": { + "name": "keyword.operator.cie-pseudocode" + }, + "3": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + { + "include": "#code" + } + ] + }, + "template_declaration": { + "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?)(?:\\s*,\\s*\\g)*\\s*>)", + "captures": { + "1": { + "name": "storage.type.template.cpp" + }, + "2": { + "patterns": [ + { + "include": "#template_parameters" + } + ] + } + } + }, + "template_call": { + "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?)(?:\\s*,\\s*\\g)*\\s*>)(?=\\s*\\()", + "captures": { + "1": { + "name": "entity.name.function.cie-pseudocode" + }, + "2": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + }, + "comment": "Balanced type lookahead follows Parser::isTemplateCall; a following parenthesis distinguishes calls from comparisons." + }, + "new_type": { + "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "1": { + "name": "keyword.operator.new.cpp" + }, + "2": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + "parameters": { + "begin": "\\(", + "end": "\\)", + "beginCaptures": { + "0": { + "name": "punctuation.section.parens.cie-pseudocode" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.section.parens.cie-pseudocode" + } + }, + "patterns": [ + { + "include": "#array_bounds" + }, + { + "include": "#type_annotation" + }, + { + "include": "#element_type" + }, + { + "include": "#code" + } + ] + }, + "function_header": { + "begin": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", + "captures": { + "2": { + "name": "punctuation.separator.cie-pseudocode" + }, + "3": { + "patterns": [ + { + "include": "#type_tokens" + } + ] + } + } + }, + { + "include": "#code" + } + ] + }, + "code": { + "patterns": [ + { + "include": "#line_comment" + }, + { + "include": "#strings" + }, + { + "include": "#class" + }, + { + "include": "#type_declaration" + }, + { + "include": "#declaration" + }, + { + "include": "#template_declaration" + }, + { + "include": "#function_header" + }, + { + "include": "#extern_parameters" + }, + { + "include": "#new_type" + }, + { + "include": "#return_type" + }, + { + "match": "^\\s*(#)(LIB)\\s*$", + "captures": { + "1": { + "name": "punctuation.definition.directive.cpp" + }, + "2": { + "name": "keyword.control.directive.pragma.cpp" + } + } + }, + { + "match": "(?|<=|>=|[+*/=&^<>-]", + "name": "keyword.operator.cie-pseudocode" + }, + { + "match": "(?", + "name": "punctuation.section.angle-brackets.end.template.definition.cpp" + }, + { + "include": "#type_tokens" + } + ] + } + }, + "injections": { + "L:meta.method.cie-pseudocode -comment -string": { + "patterns": [ + { + "match": "(?