From 71a00a6581d0e5ca61d5c01dcde71f3c92e1257a Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 23 Jun 2025 04:00:55 +0200 Subject: [PATCH 01/12] Add json.msgpack constant --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index bf3bc7a..db06e97 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -714,7 +714,7 @@ match - (?<![^.]\.|:)\b(_G|_VERSION|_PVERSION|math\.(pi|huge|mininteger|maxinteger)|os\.(platform|arch)|json\.(null|withnull|withorder))\b + (?<![^.]\.|:)\b(_G|_VERSION|_PVERSION|math\.(pi|huge|mininteger|maxinteger)|os\.(platform|arch)|json\.(null|withnull|withorder|msgpack))\b name constant.language.pluto support.constant.builtin.pluto From 841a873f6931a08a587e7d7a0e26be5734b4d6f5 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 21 Jul 2025 17:02:36 +0200 Subject: [PATCH 02/12] Add 'any' type hint --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index db06e97..1690f9d 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -51,7 +51,7 @@ end - (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\??))?(\s*<nodiscard>)? + (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??))?(\s*<nodiscard>)? endCaptures 1 @@ -109,7 +109,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??) captures 1 @@ -561,7 +561,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??) captures 1 @@ -669,7 +669,7 @@ match - \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) + \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) captures 1 From 8d8a6961c4806a8600ba873d38afd7847f388718 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 23 Jul 2025 11:12:58 +0200 Subject: [PATCH 03/12] Add 'nil' type hint --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index 1690f9d..f721d9a 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -51,7 +51,7 @@ end - (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??))?(\s*<nodiscard>)? + (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(\s*<nodiscard>)? endCaptures 1 @@ -109,7 +109,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) captures 1 @@ -561,7 +561,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) captures 1 @@ -669,7 +669,7 @@ match - \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) + \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) captures 1 From c7264418c3ca5fe38055115538f16d21b22a3d97 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:56:57 +0200 Subject: [PATCH 04/12] Support complex table & function hints --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 290 ++++++++++++++++++++++- test.js | 110 ++++++++- 2 files changed, 397 insertions(+), 3 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index f721d9a..aa38e29 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -51,7 +51,7 @@ end - (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(\s*<nodiscard>)? + (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|\{[^}]*\})\??))?(\s*<nodiscard>)? endCaptures 1 @@ -107,6 +107,14 @@ name constant.language.pluto + + include + #function_type + + + include + #table_type + match (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) @@ -559,6 +567,14 @@ end \w+ + + include + #function_type + + + include + #table_type + match (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) @@ -667,9 +683,59 @@ name keyword.control.pluto + + begin + \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)\s*(:)\s*(\{) + beginCaptures + + 1 + + name + storage.modifier.pluto + + 2 + + name + invalid.name.reserved.not-narrow.not-overridable.not-optional.not-special.pluto + + 3 + + name + punctuation.separator.colon.pluto + + 4 + + name + punctuation.section.table.begin.pluto + + + end + \} + endCaptures + + 0 + + name + punctuation.section.table.end.pluto + + + name + meta.typehint.table.pluto + patterns + + + include + #table_type_body + + + + + include + #function_type + match - \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) + \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(?!function\s*\()(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) captures 1 @@ -1184,6 +1250,226 @@ + table_type + + begin + (:)\s*(\{) + beginCaptures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + punctuation.section.table.begin.pluto + + + end + \} + endCaptures + + 0 + + name + punctuation.section.table.end.pluto + + + name + meta.typehint.table.pluto + patterns + + + include + #table_type_body + + + + table_type_body + + patterns + + + match + [a-zA-Z_][a-zA-Z0-9_]* + name + variable.other.field.pluto + + + include + #function_type + + + include + #table_type + + + match + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + captures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + storage.type.primitive.pluto + + + name + meta.typehint.pluto + + + match + ; + name + punctuation.terminator.semicolon.pluto + + + match + , + name + punctuation.separator.comma.pluto + + + + function_type + + begin + (:)\s*(function)\s*(?=\() + beginCaptures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + storage.type.function.pluto + + + end + (?=[,)=\}\]\|$]) + name + meta.typehint.function.pluto + patterns + + + begin + \( + beginCaptures + + 0 + + name + punctuation.section.group.begin.pluto + + + end + \) + endCaptures + + 0 + + name + punctuation.section.group.end.pluto + + + patterns + + + include + #function_type_params + + + + + include + #function_type + + + include + #table_type + + + match + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + captures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + storage.type.primitive.pluto + + + name + meta.typehint.pluto + + + + function_type_params + + patterns + + + match + [a-zA-Z_][a-zA-Z0-9_]* + name + variable.parameter.function.pluto + + + match + , + name + punctuation.separator.comma.pluto + + + match + \.\.\. + name + constant.language.pluto + + + include + #function_type + + + include + #table_type + + + match + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + captures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + storage.type.primitive.pluto + + + name + meta.typehint.pluto + + + string_inner patterns diff --git a/test.js b/test.js index 166bdc1..13db4d2 100644 --- a/test.js +++ b/test.js @@ -59,7 +59,8 @@ async function main() const actual = createClassificationString(code); if (actual != expected) { - console.log(`Mismatch for ${code}`); + console.log(code + " MISMATCH"); + console.log(actual); ok = false; } }; @@ -82,6 +83,113 @@ async function main() ` - constant.numeric.integer.pluto` ); + checkClassification( + `local p: { x: number; y: number }`, + `----- storage.modifier.pluto`, + ` -- meta.typehint.table.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.begin.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.terminator.semicolon.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.end.pluto` + ); + + checkClassification( + `local p: { x: number, y: number }`, + `----- storage.modifier.pluto`, + ` -- meta.typehint.table.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.begin.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.separator.comma.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.end.pluto` + ); + + checkClassification( + `local function f(cb: { a: string })`, + `----- storage.modifier.pluto`, + ` -------- storage.type.function.pluto`, + ` - meta.function.pluto`, + ` - entity.name.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` -- variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.begin.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.end.pluto`, + ` - punctuation.section.group.end.pluto` + ); + + checkClassification( + `local f: function(a: string): int = tonumber`, + `----- storage.modifier.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.function.pluto`, + ` -------- storage.type.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` - variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.section.group.end.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` --- storage.type.primitive.pluto`, + ` - meta.typehint.function.pluto`, + ` - keyword.operator.assignment.pluto` + ); + + checkClassification( + `local function f(cb: function(a: string): int)`, + `----- storage.modifier.pluto`, + ` -------- storage.type.function.pluto`, + ` - meta.function.pluto`, + ` - entity.name.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` -- variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.function.pluto`, + ` -------- storage.type.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` - variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.section.group.end.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` --- storage.type.primitive.pluto`, + ` - punctuation.section.group.end.pluto` + ); + const langConfig = JSON.parse( fs.readFileSync(path.join(__dirname, "language-config.json"), "utf8").replace(/\/\/.*$/gm, "") ); From 48a827ba1ef155f6fc9d30798a54bdaa16573654 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:55:26 +0200 Subject: [PATCH 05/12] Add support for $type named types --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 167 +++++++++++++++++++++-- test.js | 83 ++++++++++- 2 files changed, 241 insertions(+), 9 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index aa38e29..372f956 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -51,7 +51,7 @@ end - (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|\{[^}]*\})\??))?(\s*<nodiscard>)? + (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??))?(\s*<nodiscard>)? endCaptures 1 @@ -117,7 +117,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) captures 1 @@ -213,6 +213,49 @@ + + begin + (\$type)\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*(=) + beginCaptures + + 1 + + name + storage.type.named.pluto + + 2 + + name + entity.name.type.pluto + + 3 + + name + keyword.operator.assignment.pluto + + + end + (?=$) + name + meta.type.named.pluto + patterns + + + include + #function_type_no_colon + + + include + #table_type_no_colon + + + match + \??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\?? + name + storage.type.primitive.pluto + + + match \b(function)($|\s+)(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*)? @@ -577,7 +620,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) captures 1 @@ -735,7 +778,7 @@ match - \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(?!function\s*\()(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) + \b(?<!\.)(local|global)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(?!function\s*\()(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) captures 1 @@ -1307,7 +1350,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) captures 1 @@ -1356,7 +1399,7 @@ end - (?=[,)=\}\]\|$]) + (?=[,)=\}\]\|\s]|$) name meta.typehint.function.pluto patterns @@ -1400,7 +1443,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) captures 1 @@ -1451,7 +1494,83 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??) + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + captures + + 1 + + name + punctuation.separator.colon.pluto + + 2 + + name + storage.type.primitive.pluto + + + name + meta.typehint.pluto + + + + function_type_no_colon + + begin + (function)\s*(?=\() + beginCaptures + + 1 + + name + storage.type.function.pluto + + + end + (?=[,)=\}\]\|\s]|$) + name + meta.typehint.function.pluto + patterns + + + begin + \( + beginCaptures + + 0 + + name + punctuation.section.group.begin.pluto + + + end + \) + endCaptures + + 0 + + name + punctuation.section.group.end.pluto + + + patterns + + + include + #function_type_params + + + + + include + #function_type + + + include + #table_type + + + match + (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) captures 1 @@ -1470,6 +1589,38 @@ + table_type_no_colon + + begin + (\{) + beginCaptures + + 0 + + name + punctuation.section.table.begin.pluto + + + end + \} + endCaptures + + 0 + + name + punctuation.section.table.end.pluto + + + name + meta.typehint.table.pluto + patterns + + + include + #table_type_body + + + string_inner patterns diff --git a/test.js b/test.js index 13db4d2..e5f8f7d 100644 --- a/test.js +++ b/test.js @@ -163,7 +163,6 @@ async function main() ` - punctuation.separator.colon.pluto`, ` - meta.typehint.pluto`, ` --- storage.type.primitive.pluto`, - ` - meta.typehint.function.pluto`, ` - keyword.operator.assignment.pluto` ); @@ -190,6 +189,88 @@ async function main() ` - punctuation.section.group.end.pluto` ); + checkClassification( + `$type StringOrNumber = string|number`, + `----- storage.type.named.pluto`, + ` - meta.type.named.pluto`, + ` -------------- entity.name.type.pluto`, + ` - meta.type.named.pluto`, + ` - keyword.operator.assignment.pluto`, + ` - meta.type.named.pluto`, + ` ------------- storage.type.primitive.pluto` + ); + checkClassification( + `$type Point = { x: number, y: number }`, + `----- storage.type.named.pluto`, + ` - meta.type.named.pluto`, + ` ----- entity.name.type.pluto`, + ` - meta.type.named.pluto`, + ` - keyword.operator.assignment.pluto`, + ` - meta.type.named.pluto`, + ` - punctuation.section.table.begin.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.separator.comma.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.end.pluto` + ); + checkClassification( + `$type Point = { x: number; y: number }`, + `----- storage.type.named.pluto`, + ` - meta.type.named.pluto`, + ` ----- entity.name.type.pluto`, + ` - meta.type.named.pluto`, + ` - keyword.operator.assignment.pluto`, + ` - meta.type.named.pluto`, + ` - punctuation.section.table.begin.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.terminator.semicolon.pluto`, + ` - meta.typehint.table.pluto`, + ` - variable.other.field.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - meta.typehint.table.pluto`, + ` - punctuation.section.table.end.pluto` + ); + checkClassification( + `$type Callback = function(a: string): int`, + `----- storage.type.named.pluto`, + ` - meta.type.named.pluto`, + ` -------- entity.name.type.pluto`, + ` - meta.type.named.pluto`, + ` - keyword.operator.assignment.pluto`, + ` - meta.type.named.pluto`, + ` -------- storage.type.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` - variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.section.group.end.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` --- storage.type.primitive.pluto` + ); + checkClassification( + `local f: Callback`, + `----- storage.modifier.pluto`, + ` - punctuation.separator.colon.pluto`, + ` -------- storage.type.primitive.pluto` + ); + const langConfig = JSON.parse( fs.readFileSync(path.join(__dirname, "language-config.json"), "utf8").replace(/\/\/.*$/gm, "") ); From 52eb0b5575c15773af560dfc4a9458da17999967 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:56:27 +0200 Subject: [PATCH 06/12] Add type hint stuff to visual check --- visual-check.pluto | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/visual-check.pluto b/visual-check.pluto index 0cf329a..42efdaf 100644 --- a/visual-check.pluto +++ b/visual-check.pluto @@ -30,3 +30,16 @@ goto label; -- @param p1 first parameter -- @return something -- @see other function + + +$type StringOrNumber = string|number +$type Point = { x: number, y: number } +$type Point = { x: number; y: number } +$type Callback = function(a: string): int + +local f: function(a: string): int = tonumber +local function f(cb: function(a: string): int) end + +local p: { x: number, y: number } = { x = 1, y = 2 } +local p: { x: number; y: number } = { x = 1, y = 2 } +local function f(cb: { a: string }) end From df156cea8eaf8715f2bff016e295bf2419abdc01 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:59:20 +0200 Subject: [PATCH 07/12] Add highlighting for $haltcompiler --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index 372f956..be012ed 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -533,7 +533,7 @@ match - \$(define|alias)\b + \$(define|alias|haltcompiler)\b name storage.modifier.pluto From c980bf7ce6b0f29637934a2d04df603dbb1fa82e Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 18:46:25 +0200 Subject: [PATCH 08/12] Add highlighting for $declare --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 86 ++++++++++++++++++++++-- test.js | 47 +++++++++++++ 2 files changed, 129 insertions(+), 4 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index be012ed..9ef358a 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -26,25 +26,30 @@ begin - \b(function)(?:\s+(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*))?\s*(\() + (?:(\$declare)\s+)?\b(function)(?:\s+(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*))?\s*(\() beginCaptures 1 name - storage.type.function.pluto + storage.modifier.pluto 2 name - punctuation.separator.parameter.pluto + storage.type.function.pluto 3 name - entity.name.function.pluto + punctuation.separator.parameter.pluto 4 + + name + entity.name.function.pluto + + 5 name punctuation.section.group.begin.pluto @@ -537,6 +542,79 @@ name storage.modifier.pluto + + begin + (?<!\S)(\$declare)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)\s*(:)\s*(\{) + beginCaptures + + 1 + + name + storage.modifier.pluto + + 2 + + name + invalid.name.reserved.not-narrow.not-overridable.not-optional.not-special.pluto + + 3 + + name + punctuation.separator.colon.pluto + + 4 + + name + punctuation.section.table.begin.pluto + + + end + \} + endCaptures + + 0 + + name + punctuation.section.table.end.pluto + + + name + meta.typehint.table.pluto + patterns + + + include + #table_type_body + + + + + match + (?<!\S)(\$declare)\s+(?!class)(?!pluto_class)(?!function)(?:(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|pluto_use|pluto_switch|pluto_continue|pluto_enum|pluto_new|pluto_class|pluto_export|pluto_try|pluto_catch|switch|continue|enum|new|class|export|try|catch|return|then|true|until|while)\b|\w+)(?:\s*(:)\s+(?!function\s*\()(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??))?(?!\s*=\s*\|[a-zA-Z0-9_,\s]*\|\s*->) + captures + + 1 + + name + storage.modifier.pluto + + 2 + + name + invalid.name.reserved.not-narrow.not-overridable.not-optional.not-special.pluto + + 3 + + name + punctuation.separator.colon.pluto + + 4 + + name + storage.type.primitive.pluto + + + match \+|-|%|#|\*|\/|\^|==|~=|!=|<=?|>=?|(?<!\.)\.{2}(?!\.)|\$|\||~|& diff --git a/test.js b/test.js index e5f8f7d..14d2e51 100644 --- a/test.js +++ b/test.js @@ -270,6 +270,53 @@ async function main() ` - punctuation.separator.colon.pluto`, ` -------- storage.type.primitive.pluto` ); + checkClassification( + `$declare _PVERSION: string`, + `-------- storage.modifier.pluto`, + ` - punctuation.separator.colon.pluto`, + ` ------ storage.type.primitive.pluto` + ); + checkClassification( + `$declare function tonumber(str: string, base: ?number): number`, + `-------- storage.modifier.pluto`, + ` - meta.function.pluto`, + ` -------- storage.type.function.pluto`, + ` - meta.function.pluto`, + ` -------- entity.name.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` --- variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------ storage.type.primitive.pluto`, + ` - punctuation.separator.comma.pluto`, + ` - meta.function.pluto`, + ` ---- variable.parameter.function.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.typehint.pluto`, + ` ------- storage.type.primitive.pluto`, + ` - punctuation.section.group.end.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.function.pluto`, + ` ------ storage.type.primitive.pluto` + ); + + checkClassification( + `$if true then`, + `- keyword.operator.logical.pluto`, + ` -- keyword.control.pluto`, + ` ---- constant.language.pluto`, + ` ---- keyword.control.pluto` + ); + checkClassification( + `$else`, + `- keyword.operator.logical.pluto`, + ` ---- keyword.control.pluto` + ); + checkClassification( + `$end`, + `- keyword.operator.logical.pluto`, + ` --- keyword.control.pluto` + ); const langConfig = JSON.parse( fs.readFileSync(path.join(__dirname, "language-config.json"), "utf8").replace(/\/\/.*$/gm, "") From ed0d49461bdfb98b308db2dcb99aae3388730e5b Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Wed, 6 Aug 2025 18:48:37 +0200 Subject: [PATCH 09/12] Bump version --- package.json | 2 +- source.extension.vsixmanifest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8c74ce9..617cd7c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "keywords": [ "Pluto language" ], - "version": "0.7.1", + "version": "0.8.0", "publisher": "calamity-inc", "icon": "icon.png", "repository": "https://github.com/PlutoLang/Syntax-Highlighting", diff --git a/source.extension.vsixmanifest b/source.extension.vsixmanifest index 85c416b..b7233e0 100644 --- a/source.extension.vsixmanifest +++ b/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Pluto Syntax Highlighting Provides syntax highlighting and snippets for Pluto, a Lua dialect. icon.png From 089b9a44374c5790852e3302758d77d53acb4b66 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:03:29 +0200 Subject: [PATCH 10/12] Highlight type hints for multiple return values --- Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 14 +++++++------- test.js | 13 +++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index 9ef358a..9f031ba 100644 --- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage +++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage @@ -56,7 +56,7 @@ end - (\))(?:(:)\s+(void|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??))?(\s*<nodiscard>)? + (\))(?:(:)\s+(void|\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??))?(\s*<nodiscard>)? endCaptures 1 @@ -122,7 +122,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 @@ -698,7 +698,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 @@ -1428,7 +1428,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 @@ -1521,7 +1521,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 @@ -1572,7 +1572,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 @@ -1648,7 +1648,7 @@ match - (:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*)\??) + (:)\s+(\([^)]*\)|\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil|[a-zA-Z_][a-zA-Z0-9_]*|\{[^}]*\})\??) captures 1 diff --git a/test.js b/test.js index 14d2e51..c4ff56e 100644 --- a/test.js +++ b/test.js @@ -189,6 +189,19 @@ async function main() ` - punctuation.section.group.end.pluto` ); + checkClassification( + `local function f(): (bool, int)`, + `----- storage.modifier.pluto`, + ` -------- storage.type.function.pluto`, + ` - meta.function.pluto`, + ` - entity.name.function.pluto`, + ` - punctuation.section.group.begin.pluto`, + ` - punctuation.section.group.end.pluto`, + ` - punctuation.separator.colon.pluto`, + ` - meta.function.pluto`, + ` ----------- storage.type.primitive.pluto` + ); + checkClassification( `$type StringOrNumber = string|number`, `----- storage.type.named.pluto`, From cccf5edd3c9c49e82d49e7553a844dec31226117 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:25:00 +0200 Subject: [PATCH 11/12] Fix function in $type and $declare triggering indent pattern --- Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences | 2 +- language-config.json | 4 ++-- test.js | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences b/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences index f6f5089..e972573 100644 --- a/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences +++ b/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences @@ -7,7 +7,7 @@ increaseIndentPattern - (^\s*\$?\b((local)?[\s\w=]+)?(function|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\b((?!\bend\b).)*$|^.*\b(do|then)\b((?!\bend\b).)*$|^.*\{((?!\}).)*$) + (^\s*\$?(?!declare\s+function\b)\b((local)?[\s\w=]+)?(function(?!\s*\([^)]*\)\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\b((?!\bend\b).)*$|^.*\b(do|then)\b((?!\bend\b).)*$|^.*\{((?!\}).)*$) decreaseIndentPattern (^\s*\$?\b(elsei|elseif|else|catch|pluto_catch|end|until)\b.*$|^((?!\{).)*\}\;?.*$) diff --git a/language-config.json b/language-config.json index 6e7cf57..2947597 100644 --- a/language-config.json +++ b/language-config.json @@ -5,7 +5,7 @@ }, // Keep in sync with Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences "indentationRules": { - "increaseIndentPattern": "(^\\s*\\$?\\b((local)?[\\s\\w=]+)?(function|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\\b((?!\\bend\\b).)*$|^.*\\b(do|then)\\b((?!\\bend\\b).)*$|^.*\\{((?!\\}).)*$)", + "increaseIndentPattern": "(^\\s*\\$?(?!declare\\s+function\\b)\\b((local)?[\\s\\w=]+)?(function(?!\\s*\\([^)]*\\)\\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\\b((?!\\bend\\b).)*$|^.*\\b(do|then)\\b((?!\\bend\\b).)*$|^.*\\{((?!\\}).)*$)", "decreaseIndentPattern": "(^\\s*\\$?\\b(elsei|elseif|else|catch|pluto_catch|end|until)\\b.*$|^((?!\\{).)*\\}\\;?.*$)" } -} \ No newline at end of file +} diff --git a/test.js b/test.js index c4ff56e..1e2f4fb 100644 --- a/test.js +++ b/test.js @@ -360,6 +360,8 @@ async function main() checkIndentation("until finished", false, true); checkIndentation("values = {", true, false); checkIndentation("}", false, true); + checkIndentation("$type Func = function(_: string): void", false, false); + checkIndentation("$declare function tonumber(str: string, base: ?number): number", false, false); if (!ok) { From facfb553ce43053d8b48d7cf1eb96dd9b8f01956 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 25 Aug 2025 04:29:05 +0200 Subject: [PATCH 12/12] Fix regression with increaseIndentPattern --- Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences | 2 +- language-config.json | 2 +- test.js | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences b/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences index e972573..157eeac 100644 --- a/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences +++ b/Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences @@ -7,7 +7,7 @@ increaseIndentPattern - (^\s*\$?(?!declare\s+function\b)\b((local)?[\s\w=]+)?(function(?!\s*\([^)]*\)\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\b((?!\bend\b).)*$|^.*\b(do|then)\b((?!\bend\b).)*$|^.*\{((?!\}).)*$) + (^\s*\$?(?!declare\s+function\b)\b((local)?[\s\w=]+)?\b(function(?!\s*\([^)]*\)\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\b((?!\bend\b).)*$|^.*\b(do|then)\b((?!\bend\b).)*$|^.*\{((?!\}).)*$) decreaseIndentPattern (^\s*\$?\b(elsei|elseif|else|catch|pluto_catch|end|until)\b.*$|^((?!\{).)*\}\;?.*$) diff --git a/language-config.json b/language-config.json index 2947597..8f81179 100644 --- a/language-config.json +++ b/language-config.json @@ -5,7 +5,7 @@ }, // Keep in sync with Pluto.tmbundle/Preferences/Indentation Rules.tmPreferences "indentationRules": { - "increaseIndentPattern": "(^\\s*\\$?(?!declare\\s+function\\b)\\b((local)?[\\s\\w=]+)?(function(?!\\s*\\([^)]*\\)\\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\\b((?!\\bend\\b).)*$|^.*\\b(do|then)\\b((?!\\bend\\b).)*$|^.*\\{((?!\\}).)*$)", + "increaseIndentPattern": "(^\\s*\\$?(?!declare\\s+function\\b)\\b((local)?[\\s\\w=]+)?\\b(function(?!\\s*\\([^)]*\\)\\s*:)|repeat|else|elseif|if|while|class|pluto_class|enum|pluto_enum|try|pluto_try)\\b((?!\\bend\\b).)*$|^.*\\b(do|then)\\b((?!\\bend\\b).)*$|^.*\\{((?!\\}).)*$)", "decreaseIndentPattern": "(^\\s*\\$?\\b(elsei|elseif|else|catch|pluto_catch|end|until)\\b.*$|^((?!\\{).)*\\}\\;?.*$)" } } diff --git a/test.js b/test.js index 1e2f4fb..2d15767 100644 --- a/test.js +++ b/test.js @@ -362,6 +362,7 @@ async function main() checkIndentation("}", false, true); checkIndentation("$type Func = function(_: string): void", false, false); checkIndentation("$declare function tonumber(str: string, base: ?number): number", false, false); + checkIndentation("local entry", false, false); if (!ok) {