~repos /plum
git clone https://pyrossh.dev/repos/plum.git
A statically typed, imperative programming language inspired by rust, python
tooling/vscode-plum/syntaxes/plum.tmLanguage.json
{ "name": "plum", "scopeName": "source.plum", "patterns": [ { "include": "#comments" }, { "include": "#keywords" }, { "include": "#constant" }, { "include": "#string" }, { "include": "raw_quoted_string" }, { "include": "#number" }, { "include": "#entity" }, { "include": "#discards" } ], "repository": { "comments": { "patterns": [ { "name": "comment.line.plum", "match": "#.*" } ] }, "keywords": { "patterns": [ { "match": "\\b(module|type|enum|trait|extern|include|self)\\b", "name": "keyword.const.plum" }, { "name": "keyword.control.plum", "match": "\\b(try|import|in|return|continue|break|match|if|else|while|for|as|is|assert|panic)\\b" }, { "name": "keyword.operator.range.plum", "match": "\\.\\." }, { "name": "keyword.operator.splat.plum", "match": "\\.\\.\\." }, { "name": "keyword.operator.comparison.plum", "match": "(==|!=|<=|>=|<|>)" }, { "name": "keyword.operator.logical.plum", "match": "(&&|\\|\\|)" }, { "name": "keyword.operator.arithmetic.plum", "match": "(\\+|\\-|/|\\*|%)" }, { "name": "keyword.operator.assignment.plum", "match": "=" } ] }, "constant": { "patterns": [ { "comment": "ALL CAPS constants", "name": "constant.other.caps.plum", "match": "\\b[A-Z]{2}[A-Z0-9_]*\\b" }, { "comment": "constant declarations", "match": "\\b\\s+([A-Z_]*)\\b", "captures": { "1": { "name": "storage.type.plum" }, "2": { "name": "constant.other.caps.plum" } } } ] }, "number": { "name": "constant.numeric.plum", "patterns": [ { "include": "#number-float" }, { "include": "#number-dec" }, { "include": "#number-hex" }, { "include": "#number-bin" }, { "name": "invalid.illegal.name.plum", "match": "\\b[0-9]+\\w+" } ] }, "number-float": { "name": "constant.numeric.float.plum", "match": "(?x)\n (?<! \\w)(?:\n (?:\n \\.[0-9](?: _?[0-9] )*\n |\n [0-9](?: _?[0-9] )* \\. [0-9](?: _?[0-9] )*\n |\n [0-9](?: _?[0-9] )* \\.\n ) (?: [eE][+-]?[0-9](?: _?[0-9] )* )?\n |\n [0-9](?: _?[0-9] )* (?: [eE][+-]?[0-9](?: _?[0-9] )* )\n )([jJ])?\\b\n", "captures": { "1": { "name": "storage.type.imaginary.number.plum" } } }, "number-dec": { "name": "constant.numeric.dec.plum", "match": "(?x)\n (?<![\\w\\.])(?:\n [1-9](?: _?[0-9] )*\n |\n 0+\n |\n [0-9](?: _?[0-9] )* ([jJ])\n |\n 0 ([0-9]+)(?![eE\\.])\n )\\b\n", "captures": { "1": { "name": "storage.type.imaginary.number.plum" }, "2": { "name": "invalid.illegal.dec.plum" } } }, "number-hex": { "name": "constant.numeric.hex.plum", "match": "(?x)\n (?<![\\w\\.])\n (0[xX]) (_?[0-9a-fA-F])+\n \\b\n", "captures": { "1": { "name": "storage.type.number.plum" } } }, "number-bin": { "name": "constant.numeric.bin.plum", "match": "(?x)\n (?<![\\w\\.])\n (0[bB]) (_?[01])+\n \\b\n", "captures": { "1": { "name": "storage.type.number.plum" } } }, "entity": { "patterns": [ { "name": "entity.name.type.plum", "match": "[[:upper:]][[:alnum:]]*" }, { "begin": "\\b([[:lower:]][[:word:]]*)\\b\\(", "end": "\\)", "patterns": [ { "include": "$self" } ], "captures": { "1": { "name": "entity.name.function.plum" } } }, { "begin": "([[:lower:]][[:word:]]*)<([[:upper:]][[:alnum:]]*)>()", "end": "\\)", "patterns": [ { "include": "$self" } ], "captures": { "1": { "name": "entity.name.function.plum" }, "2": { "name": "keyword.control.plum" } } }, { "name": "variable.parameter.plum", "match": "\\b([[:lower:]][[:word:]]*):\\s" }, { "name": "entity.name.namespace.plum", "match": "\\b([[:lower:]][[:word:]]*):" } ] }, "string": { "patterns": [ { "name": "string.quoted.double.plum", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.plum" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.plum" } }, "patterns": [ { "include": "#template-substitution-element" }, { "include": "#string-character-escape" } ] } ] }, "string-character-escape": { "name": "constant.character.escape.plum", "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" }, "template-substitution-element": { "name": "meta.template.expression.plum", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.plum" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.plum" } }, "patterns": [ { "include": "#expression" } ], "contentName": "meta.embedded.line.plum" }, "expression": { "patterns": [ { "match": "\\b(self)\\b", "name": "keyword.const.plum" }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.plum" }, "2": { "name": "punctuation.accessor.optional.plum" }, "3": { "name": "variable.other.constant.property.plum" } } }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.plum" }, "2": { "name": "punctuation.accessor.optional.plum" }, "3": { "name": "variable.other.property.plum" } } }, { "name": "variable.other.constant.plum", "match": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" }, { "name": "variable.other.readwrite.plum", "match": "[_$[:alpha:]][_$[:alnum:]]*" } ] }, "raw_quoted_string": { "comment": "Raw string literals", "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.go.mod" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.end.go.mod" } }, "name": "string.quoted.raw", "patterns": [ { "include": "#string_placeholder" } ] }, "string_placeholder": { "patterns": [ { "match": "%(\\[\\d+\\])?([\\+#\\-0\\x20]{,2}((\\d+|\\*)?(\\.?(\\d+|\\*|(\\[\\d+\\])\\*?)?(\\[\\d+\\])?)?))?[vT%tbcdoqxXUbeEfFgGsp]", "name": "constant.other.placeholder.go.mod" } ] }, "discards": { "name": "comment.unused.plum", "match": "\\b_(?:[[:word:]]+)?\\b" } }}