Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 159 additions & 8 deletions Pluto.tmbundle/Syntaxes/Pluto.tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
</dict>
</dict>
<key>end</key>
<string>(\))(?:(:)\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*&lt;nodiscard&gt;)?</string>
<string>(\))(?:(:)\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*&lt;nodiscard&gt;)?</string>
<key>endCaptures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -117,7 +117,7 @@
</dict>
<dict>
<key>match</key>
<string>(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??)</string>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -213,6 +213,49 @@
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(\$type)\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*(=)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.named.pluto</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.type.pluto</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.operator.assignment.pluto</string>
</dict>
</dict>
<key>end</key>
<string>(?=$)</string>
<key>name</key>
<string>meta.type.named.pluto</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#function_type_no_colon</string>
</dict>
<dict>
<key>include</key>
<string>#table_type_no_colon</string>
</dict>
<dict>
<key>match</key>
<string>\??(?:(?: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_]*)\??</string>
<key>name</key>
<string>storage.type.primitive.pluto</string>
</dict>
</array>
</dict>
<dict>
<key>match</key>
<string>\b(function)($|\s+)(?:[a-zA-Z_][a-zA-Z0-9_]*([.:]))?([a-zA-Z_][a-zA-Z0-9_]*)?</string>
Expand Down Expand Up @@ -577,7 +620,7 @@
</dict>
<dict>
<key>match</key>
<string>(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??)</string>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -735,7 +778,7 @@
</dict>
<dict>
<key>match</key>
<string>\b(?&lt;!\.)(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*-&gt;)</string>
<string>\b(?&lt;!\.)(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*-&gt;)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -1307,7 +1350,7 @@
</dict>
<dict>
<key>match</key>
<string>(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??)</string>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -1356,7 +1399,7 @@
</dict>
</dict>
<key>end</key>
<string>(?=[,)=\}\]\|$])</string>
<string>(?=[,)=\}\]\|\s]|$)</string>
<key>name</key>
<string>meta.typehint.function.pluto</string>
<key>patterns</key>
Expand Down Expand Up @@ -1400,7 +1443,7 @@
</dict>
<dict>
<key>match</key>
<string>(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??)</string>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand Down Expand Up @@ -1451,7 +1494,83 @@
</dict>
<dict>
<key>match</key>
<string>(:)\s+(\??(?:(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\|)*(?:string|number|int|float|bool(?:ean)?|function|table|userdata|any|nil)\??)</string>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.separator.colon.pluto</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.type.primitive.pluto</string>
</dict>
</dict>
<key>name</key>
<string>meta.typehint.pluto</string>
</dict>
</array>
</dict>
<key>function_type_no_colon</key>
<dict>
<key>begin</key>
<string>(function)\s*(?=\()</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.function.pluto</string>
</dict>
</dict>
<key>end</key>
<string>(?=[,)=\}\]\|\s]|$)</string>
<key>name</key>
<string>meta.typehint.function.pluto</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\(</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.group.begin.pluto</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.group.end.pluto</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#function_type_params</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#function_type</string>
</dict>
<dict>
<key>include</key>
<string>#table_type</string>
</dict>
<dict>
<key>match</key>
<string>(:)\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_]*)\??)</string>
<key>captures</key>
<dict>
<key>1</key>
Expand All @@ -1470,6 +1589,38 @@
</dict>
</array>
</dict>
<key>table_type_no_colon</key>
<dict>
<key>begin</key>
<string>(\{)</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.table.begin.pluto</string>
</dict>
</dict>
<key>end</key>
<string>\}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.table.end.pluto</string>
</dict>
</dict>
<key>name</key>
<string>meta.typehint.table.pluto</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#table_type_body</string>
</dict>
</array>
</dict>
<key>string_inner</key>
<dict>
<key>patterns</key>
Expand Down
83 changes: 82 additions & 1 deletion test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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`
);

Expand All @@ -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, "")
);
Expand Down