diff --git a/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage b/Pluto.tmbundle/Syntaxes/Pluto.tmLanguage index be012ed..036ef1a 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 @@ -539,7 +544,7 @@ match - \+|-|%|#|\*|\/|\^|==|~=|!=|<=?|>=?|(?<!\.)\.{2}(?!\.)|\$|\||~|& + \+|-|%|#|\*|\/|\^|==|~=|!=|<=?|>=?|(?<!\.)\.{2}(?!\.)|\$(?![a-zA-Z_])|\||~|& name keyword.operator.logical.pluto @@ -772,6 +777,52 @@ + + 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 + + + include #function_type @@ -803,6 +854,33 @@ + + 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 \b(?<![.\:])(local|global|export|pluto_export)\b diff --git a/test.js b/test.js index e5f8f7d..0f8076f 100644 --- a/test.js +++ b/test.js @@ -270,6 +270,35 @@ 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` + ); const langConfig = JSON.parse( fs.readFileSync(path.join(__dirname, "language-config.json"), "utf8").replace(/\/\/.*$/gm, "")