From f5b882c9a360a0bca1ff4e176f78060aa797690d Mon Sep 17 00:00:00 2001
From: Sainan <63328889+Sainan@users.noreply.github.com>
Date: Wed, 6 Aug 2025 17:23:41 +0200
Subject: [PATCH 1/4] Add support for $type named types
---
Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 183 +++++++++++++++++++++--
test.js | 76 ++++++++++
visual-check.pluto | 14 +-
3 files changed, 252 insertions(+), 21 deletions(-)
diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
index aa38e29..ad39a5e 100644
--- a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
+++ b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
@@ -212,17 +212,60 @@
punctuation.separator.comma.pluto
-
-
- match
- \b(function)($|\s+)(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*)?
- captures
-
- 1
-
- name
- storage.type.function.pluto
-
+
+
+ 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)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??
+ name
+ storage.type.primitive.pluto
+
+
+
+
+ match
+ \b(function)($|\s+)(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*)?
+ captures
+
+ 1
+
+ name
+ storage.type.function.pluto
+
2
name
@@ -1419,8 +1462,8 @@
- function_type_params
-
+ function_type_params
+
patterns
@@ -1469,9 +1512,117 @@
meta.typehint.pluto
-
- string_inner
-
+
+ function_type_no_colon
+
+ begin
+ (function)\s*(?=\()
+ beginCaptures
+
+ 1
+
+ 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
+
+
+
+ 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..f0af7d3 100644
--- a/test.js
+++ b/test.js
@@ -190,6 +190,82 @@ 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`
+ );
+
const langConfig = JSON.parse(
fs.readFileSync(path.join(__dirname, "language-config.json"), "utf8").replace(/\/\/.*$/gm, "")
);
diff --git a/visual-check.pluto b/visual-check.pluto
index 0cf329a..bffddaf 100644
--- a/visual-check.pluto
+++ b/visual-check.pluto
@@ -1,8 +1,12 @@
-
-class Human extends Entity
- static function sayHello()
- end
-end
+$type StringOrNumber = string|number
+$type Point = { x: number, y: number }
+$type Point = { x: number; y: number }
+$type Callback = function(a: string): int
+
+class Human extends Entity
+ static function sayHello()
+ end
+end
local h = new Human(1 + 2);
print(h.name .. "\n");
h:sayHello()
From 1227bd707e0c5093151c6592fe0b5a25b1cb352b Mon Sep 17 00:00:00 2001
From: Sainan <63328889+Sainan@users.noreply.github.com>
Date: Wed, 6 Aug 2025 17:52:19 +0200
Subject: [PATCH 2/4] Highlight named type references
---
Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 22 +++++++++++-----------
test.js | 7 ++++++-
visual-check.pluto | 1 +
3 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
index ad39a5e..2ae599c 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
@@ -250,7 +250,7 @@
match
- \??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??
+ \??(?:(?: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
@@ -620,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
@@ -778,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
@@ -1350,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
@@ -1399,7 +1399,7 @@
end
- (?=[,)=\}\]\|$])
+ (?=[,)=\}\]\|\s]|$)
name
meta.typehint.function.pluto
patterns
@@ -1443,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
@@ -1494,7 +1494,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
@@ -1526,7 +1526,7 @@
end
- (?=[,)=\}\]\|$])
+ (?=[,)=\}\]\|\s]|$)
name
meta.typehint.function.pluto
patterns
@@ -1570,7 +1570,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
diff --git a/test.js b/test.js
index f0af7d3..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`
);
@@ -265,6 +264,12 @@ async function main()
` - 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, "")
diff --git a/visual-check.pluto b/visual-check.pluto
index bffddaf..ab4e677 100644
--- a/visual-check.pluto
+++ b/visual-check.pluto
@@ -2,6 +2,7 @@ $type StringOrNumber = string|number
$type Point = { x: number, y: number }
$type Point = { x: number; y: number }
$type Callback = function(a: string): int
+local f: Callback
class Human extends Entity
static function sayHello()
From 6ffed72b2cc1c5b80a8e5e1bf91e09cb749353be Mon Sep 17 00:00:00 2001
From: Sainan <63328889+Sainan@users.noreply.github.com>
Date: Wed, 6 Aug 2025 17:54:08 +0200
Subject: [PATCH 3/4] Revert visual-check.pluto
---
visual-check.pluto | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/visual-check.pluto b/visual-check.pluto
index ab4e677..0cf329a 100644
--- a/visual-check.pluto
+++ b/visual-check.pluto
@@ -1,13 +1,8 @@
-$type StringOrNumber = string|number
-$type Point = { x: number, y: number }
-$type Point = { x: number; y: number }
-$type Callback = function(a: string): int
-local f: Callback
-
-class Human extends Entity
- static function sayHello()
- end
-end
+
+class Human extends Entity
+ static function sayHello()
+ end
+end
local h = new Human(1 + 2);
print(h.name .. "\n");
h:sayHello()
From 6f21b22baef91edafc90701e56080ca870332848 Mon Sep 17 00:00:00 2001
From: Sainan <63328889+Sainan@users.noreply.github.com>
Date: Wed, 6 Aug 2025 17:54:26 +0200
Subject: [PATCH 4/4] Reindent
---
Pluto.tmbundle/Syntaxes/Pluto.tmLanguage | 350 +++++++++++------------
1 file changed, 175 insertions(+), 175 deletions(-)
diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
index 2ae599c..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|[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
@@ -117,7 +117,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
@@ -212,60 +212,60 @@
punctuation.separator.comma.pluto
-
-
- 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_]*)?
- captures
-
- 1
-
- name
- storage.type.function.pluto
-
+
+
+ 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_]*)?
+ captures
+
+ 1
+
+ name
+ storage.type.function.pluto
+
2
name
@@ -620,7 +620,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
@@ -778,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|[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*->)
+ \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
@@ -1350,7 +1350,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
@@ -1399,7 +1399,7 @@
end
- (?=[,)=\}\]\|\s]|$)
+ (?=[,)=\}\]\|\s]|$)
name
meta.typehint.function.pluto
patterns
@@ -1443,7 +1443,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
@@ -1462,8 +1462,8 @@
- function_type_params
-
+ function_type_params
+
patterns
@@ -1494,7 +1494,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
@@ -1512,117 +1512,117 @@
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
-
- name
- punctuation.separator.colon.pluto
-
- 2
-
- name
- storage.type.primitive.pluto
-
-
- name
- meta.typehint.pluto
-
-
-
- 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
-
+
+ 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
+
+ name
+ punctuation.separator.colon.pluto
+
+ 2
+
+ name
+ storage.type.primitive.pluto
+
+
+ name
+ meta.typehint.pluto
+
+
+
+ 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