{ "bundleUUID": "E3BADC20-6B0E-11D9-9DC9-000D93589AF6", "comment": "\n\ttodo:\n\t\tlist comprehension / generator comprehension scope.\n\n\t", "fileTypes": [ "spin" ], "firstLineMatch": "^#!/.*\\bspin[0-9.-]*\\b", "foldingStartMarker": "^(PUB|Pub|pub|PRI|Pri|pri|DAT|Dat|dat|CON|Con|con|OBJ|Obj|obj|VAR|Var|var)\\s+([.a-zA-Z0-9_ <]+)\\s*(\\((.*)\\))?\\s*:|\\{\\s*$|\\(\\s*$|\\[\\s*$|^\\s*\"\"\"(?=.)(?!.*\"\"\")", "foldingStopMarker": "^\\s*$|^\\s*\\}|^\\s*\\]|^\\s*\\)|^\\s*\"\"\"\\s*$", "keyEquivalent": "^~P", "name": "Spin", "patterns": [ { "begin": "{", "captures": { "0": { "name": "punctuation.definition.comment.php" } }, "end": "}(?!.*})", "name": "comment.block.spin" }, { "captures": { "1": { "name": "punctuation.definition.comment.spin" } }, "match": "(').*$\\n?", "name": "comment.line.single-quote.spin" }, { "match": "(?i:(%\\h*)L)", "name": "constant.numeric.integer.long.hexadecimal.spin" }, { "match": "(?i:(\\$[\\h_]*)|(%[01_]*))", "name": "constant.numeric.integer.hexadecimal.spin" }, { "match": "\\b(?i:(((\\d+(\\.(?=[^a-zA-Z])\\d*)?|(?<=[^0-9a-zA-Z])\\.\\d+)(e[\\-\\+]?\\d+)?))J)", "name": "constant.numeric.complex.spin" }, { "match": "\\b(?i:(\\d+\\.\\d*(e[\\-\\+]?\\d+)?))(?=[^a-zA-Z])", "name": "constant.numeric.float.spin" }, { "match": "(?<=[^0-9a-zA-Z])(?i:(\\.\\d+(e[\\-\\+]?\\d+)?))", "name": "constant.numeric.float.spin" }, { "match": "\\b(?i:(\\d+e[\\-\\+]?\\d+))", "name": "constant.numeric.float.spin" }, { "match": "\\b(?i:([0-9]+[0-9_]*)L)", "name": "constant.numeric.integer.long.decimal.spin" }, { "match": "\\b([0-9]+[0-9_]*)", "name": "constant.numeric.integer.decimal.spin" }, { "captures": { "1": { "name": "storage.modifier.global.spin" } }, "match": "\\b(global)\\b" }, { "captures": { "1": { "name": "keyword.control.import.spin" }, "2": { "name": "keyword.control.import.from.spin" } }, "match": "\\b(?:(import)|(from))\\b" }, { "comment": "keywords that delimit flow blocks or alter flow from within a block", "match": "\\b((?i:if)|(?i:repeat)|(?i:else)|(?i:elseif))\\b", "name": "keyword.control.flow.spin" }, { "comment": "keyword operators that evaluate to True or False", "match": "\\b(and|in|is|not|or)\\b", "name": "keyword.operator.logical.spin" }, { "captures": { "1": { "name": "keyword.other.spin" } }, "comment": "keywords that haven't fit into other groups (yet).", "match": "\\b(_CLKMODE|_clkmode|_clkMode|_Clkmode|_XINFREQ|_xinfreq|_xinFreq|_Xinfreq|ABORT|Abort|abort|QUIT|Quit|quit|NEXT|Next|next|WHILE|While|while|UNTIL|Until|until|FROM|From|from|TO|To|to|RETURN|Return|return|DIR[a-zA-Z](?=\\[)|Dir[a-zA-Z](?=\\[)|dir[a-zA-Z](?=\\[)|OUT[a-zA-Z](?=\\[)|Out[a-zA-Z](?=\\[)|out[a-zA-Z](?=\\[)|IN[a-zA-Z](?=\\[)|In[a-zA-Z](?=\\[)|in[a-zA-Z](?=\\[))\\b" }, { "match": "<>", "name": "invalid.deprecated.operator.spin" }, { "match": "<\\=|>\\=|\\=\\=|<|>|\\!\\=", "name": "keyword.operator.comparison.spin" }, { "match": "\\+\\=|-\\=|:\\=|:|\\*\\=|/\\=|//\\=|%\\=|&\\=|\\|\\=|\\^\\=|>>\\=|<<\\=|\\*\\*\\=", "name": "keyword.operator.assignment.augmented.spin" }, { "match": "\\+|\\-|\\*|\\*\\*|/|//|<<|>>|&|\\||\\^|~|\\!", "name": "keyword.operator.arithmetic.spin" }, { "match": "\\=", "name": "keyword.operator.assignment.spin" }, { "begin": "^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\\s*\\:)", "beginCaptures": { "1": { "name": "storage.type.class.spin" } }, "contentName": "entity.name.type.class.spin", "end": "\\s*(:)", "endCaptures": { "1": { "name": "punctuation.section.class.begin.spin" } }, "name": "meta.class.old-style.spin", "patterns": [ { "include": "#entity_name_class" } ] }, { "begin": "^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\\s*\\()", "beginCaptures": { "1": { "name": "storage.type.class.spin" } }, "end": "(\\))\\s*(?:(\\:)|(.*$\\n?))", "endCaptures": { "1": { "name": "punctuation.definition.inheritance.end.spin" }, "2": { "name": "punctuation.section.class.begin.spin" }, "3": { "name": "invalid.illegal.missing-section-begin.spin" } }, "name": "meta.class.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*)", "contentName": "entity.name.type.class.spin", "end": "(?![A-Za-z0-9_])", "patterns": [ { "include": "#entity_name_class" } ] }, { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.inheritance.begin.spin" } }, "contentName": "meta.class.inheritance.spin", "end": "(?=\\)|:)", "patterns": [ { "begin": "(?<=\\(|,)\\s*", "contentName": "entity.other.inherited-class.spin", "end": "\\s*(?:(,)|(?=\\)))", "endCaptures": { "1": { "name": "punctuation.separator.inheritance.spin" } }, "patterns": [ { "include": "$self" } ] } ] } ] }, { "begin": "^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9])", "beginCaptures": { "1": { "name": "storage.type.class.spin" } }, "end": "(\\()|\\s*($\\n?|#.*$\\n?)", "endCaptures": { "1": { "name": "punctuation.definition.inheritance.begin.spin" }, "2": { "name": "invalid.illegal.missing-inheritance.spin" } }, "name": "meta.class.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*)", "contentName": "entity.name.type.class.spin", "end": "(?![A-Za-z0-9_])", "patterns": [ { "include": "#entity_name_function" } ] } ] }, { "begin": "^(PUB|Pub|pub|PRI|Pri|pri)\\s+(?=[A-Za-z_][A-Za-z0-9_]*\\s*\\()", "beginCaptures": { "1": { "name": "storage.type.function.spin" } }, "end": "(\\)|\\n)\\s*(?:(\\:|(?=\\||'))|(.*$\\n?))", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.spin" }, "2": { "name": "punctuation.section.function.begin.spin" }, "3": { "name": "invalid.illegal.missing-section-begin.spin" } }, "name": "meta.function.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*)", "contentName": "entity.name.function.spin", "end": "(?![A-Za-z0-9_])", "patterns": [ { "include": "#entity_name_function" } ] }, { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.spin" } }, "contentName": "meta.function.parameters.spin", "end": "(?![a-zA-Z0-9_])", "patterns": [ { "include": "#keyword_arguments" }, { "captures": { "1": { "name": "variable.parameter.function.spin" }, "2": { "name": "punctuation.separator.parameters.spin" } }, "match": "\\b([a-zA-Z_][a-zA-Z_0-9]*)\\s*(?:(,\\s*)|(?=[\\n\\)]))" } ] } ] }, { "begin": "^(PUB|Pub|pub|PRI|Pri|pri)\\s+(?=[A-Za-z_][A-Za-z0-9_]*)", "beginCaptures": { "1": { "name": "storage.type.function.spin" } }, "end": "(?![A-Za-z0-9_,])", "endCaptures": { "1": { "name": "punctuation.definition.parameters.begin.spin" }, "2": { "name": "invalid.illegal.missing-parameters.spin" } }, "name": "meta.function.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*)", "contentName": "entity.name.function.spin", "end": "(?![A-Za-z0-9_])", "patterns": [ { "include": "#entity_name_function" } ] } ] }, { }, { "begin": "^\\s*(?=@\\s*[A-Za-z_][A-Za-z0-9_]*(?:[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\()", "comment": "a decorator may be a function call which returns a decorator.", "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.spin" } }, "name": "meta.function.decorator.spin", "patterns": [ { "begin": "(?=(@)\\s*[A-Za-z_][A-Za-z0-9_]*(?:[A-Za-z_][A-Za-z0-9_]*)*\\s*\\()", "beginCaptures": { "1": { "name": "punctuation.definition.decorator.spin" } }, "contentName": "entity.name.function.decorator.spin", "end": "(?=\\s*\\()", "patterns": [ { "include": "#dotted_name" } ] }, { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.spin" } }, "contentName": "meta.function.decorator.arguments.spin", "end": "(?=\\))", "patterns": [ { "include": "#keyword_arguments" }, { "include": "$self" } ] } ] }, { "begin": "[(,]\\s*(?=@[A-Za-z_][A-Za-z0-9_]*(?:[a-zA-Z_][a-zA-Z_0-9]*)*)", "contentName": "entity.name.function.decorator.spin", "end": "(?![@A-Za-z0-9_])", "name": "meta.function.decorator.spin", "patterns": [ { "begin": "(?=(@)\\s*[A-Za-z_][A-Za-z0-9_]*([A-Za-z_][A-Za-z0-9_]*)*)", "beginCaptures": { "1": { "name": "punctuation.definition.decorator.spin" } }, "end": "(?![@A-Za-z0-9_])", "patterns": [ { "include": "#dotted_name" } ] } ] }, { "begin": "(?<=\\)|\\])\\s*(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.spin" } }, "contentName": "meta.function-call.arguments.spin", "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.spin" } }, "name": "meta.function-call.spin", "patterns": [ { "include": "#keyword_arguments" }, { "include": "$self" } ] }, { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\()", "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.spin" } }, "name": "meta.function-call.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*\\s*\\()", "end": "(?=\\s*\\()", "patterns": [ { "include": "#dotted_name" } ] }, { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.spin" } }, "contentName": "meta.function-call.arguments.spin", "end": "(?=\\))", "patterns": [ { "include": "#keyword_arguments" }, { "include": "$self" } ] } ] }, { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\[)", "end": "(\\])", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.spin" } }, "name": "meta.item-access.spin", "patterns": [ { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*\\s*\\[)", "end": "(?=\\s*\\[)", "patterns": [ { "include": "#dotted_name" } ] }, { "begin": "(\\[)", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.spin" } }, "contentName": "meta.item-access.arguments.spin", "end": "(?=\\])", "patterns": [ { "include": "$self" } ] } ] }, { "begin": "(?<=\\)|\\])\\s*(\\[)", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.spin" } }, "contentName": "meta.item-access.arguments.spin", "end": "(\\])", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.spin" } }, "name": "meta.item-access.spin", "patterns": [ { "include": "$self" } ] }, { "captures": { "1": { "name": "storage.type.function.spin" } }, "match": "\\b(def|lambda)\\b" }, { "captures": { "1": { "name": "storage.type.class.spin" } }, "match": "^\\b(class|OBJ|Obj|obj|DAT|Dat|dat|CON|Con|con|VAR|Var|var)\\b" }, { "include": "#line_continuation" }, { "include": "#language_variables" }, { "match": "\\b(cnt|CNT|Cnt|CLKFREQ|ClkFreq|clkFreq|clkfreq|P8X32A|P8x32a|P8X32a|p8x32a|XTAL([0-9]+)|Xtal([0-9]+)|xtal([0-9]+)|PLL([0-9]+)X|PLL([0-9]+)x|Pll([0-9]+)x|pll([0-9]+)X|pll([0-9]+)x)\\b", "name": "constant.language.spin" }, { "include": "#string_quoted_double" }, { "include": "#dotted_name" }, { "begin": "(\\()", "end": "(\\))", "patterns": [ { "include": "$self" } ] }, { "captures": { "1": { "name": "punctuation.definition.list.begin.spin" }, "2": { "name": "meta.empty-list.spin" }, "3": { "name": "punctuation.definition.list.end.spin" } }, "match": "(\\[)(\\s*(\\]))\\b" }, { "begin": "(\\[)", "beginCaptures": { "1": { "name": "punctuation.definition.list.begin.spin" } }, "end": "(\\])", "endCaptures": { "1": { "name": "punctuation.definition.list.end.spin" } }, "name": "meta.structure.list.spin", "patterns": [ { "begin": "(?<=\\[|\\,)\\s*(?![\\],])", "contentName": "meta.structure.list.item.spin", "end": "\\s*(?:(,)|(?=\\]))", "endCaptures": { "1": { "name": "punctuation.separator.list.spin" } }, "patterns": [ { "include": "$self" } ] } ] }, { "captures": { "1": { "name": "punctuation.definition.tuple.begin.spin" }, "2": { "name": "meta.empty-tuple.spin" }, "3": { "name": "punctuation.definition.tuple.end.spin" } }, "match": "(\\()(\\s*(\\)))", "name": "meta.structure.tuple.spin" }, { "captures": { "1": { "name": "punctuation.definition.dictionary.begin.spin" }, "2": { "name": "meta.empty-dictionary.spin" }, "3": { "name": "punctuation.definition.dictionary.end.spin" } }, "match": "(\\{)(\\s*(\\}))", "name": "meta.structure.dictionary.spin" }, { "begin": "(\\{)", "beginCaptures": { "1": { "name": "punctuation.definition.dictionary.begin.spin" } }, "end": "(\\})", "endCaptures": { "1": { "name": "punctuation.definition.dictionary.end.spin" } } } ], "repository": { "builtin_exceptions": { "match": "(?x)\\b(\n (\n Arithmetic|Assertion|Attribute|Buffer|EOF|Environment|FloatingPoint|IO|\n Import|Indentation|Index|Key|Lookup|Memory|Name|NotImplemented|OS|Overflow|\n Reference|Runtime|Standard|Syntax|System|Tab|Type|UnboundLocal|\n Unicode(Encode|Decode|Translate)?|\n Value|VMS|Windows|ZeroDivision\n )Error|\n ((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes)?Warning|\n (Base)?Exception|\n SystemExit|StopIteration|NotImplemented|KeyboardInterrupt|GeneratorExit\n\t\t\t)\\b", "name": "support.type.exception.spin" }, "builtin_functions": { "match": "(?x)\\b(\n STRING|String|string|WAITCNT|Waitcnt|WaitCnt|waitcnt|waitCnt|COGNEW|CogNew|Cognew|cogNew|cognew|COGSTOP|CogStop|Cogstop|cogStop|cogstop|ABS|Abs|abs|MAX|Max|max|MIN|Min|min|NEG|Neg|neg|STRSIZE|StrSize|StrSIZE|strSIZE|strSize|Strsize|strsize|LONGFILL|LongFILL|longFILL|LongFill|longFill|Longfill|longfill|BYTEMOVE|ByteMove|ByteMOVE|byteMOVE|byteMove|Bytemove|bytemove|BYTEFILL|ByteFILL|ByteFill|Bytefill|byteFILL|ByteFILL|byteFill|bytefill|LOOKUPZ|LookUpz|lookUpz|LookUpZ|lookUpZ|LookUPZ|Lookupz|lookupz|CONSTANT|Constant|constant\n\t\t\t)\\b(?=\\s*\\()", "name": "support.function.builtin.spin" }, "builtin_types": { "match": "(?x)\\b(\n\t\t\t\tLONG|Long|long|BYTE|Byte|byte|WORD|Word|word|RES|Res|res\n\t\t\t)\\b", "name": "support.type.spin" }, "constant_placeholder": { "match": "(?i:(\\([a-z_]+\\))?#?0?\\-?[ ]?\\+?([0-9]*|\\*)(\\.([0-9]*|\\*))?[hL]?[a-z])", "name": "constant.other.placeholder.spin" }, "docstrings": { "patterns": [ { "begin": "^\\s*(?=[uU]?[rR]?\\{\\{)", "end": "(?<=\\}\\})", "name": "comment.block.spin", "patterns": [ { "include": "#string_quoted_double" } ] } ] }, "dotted_name": { "begin": "(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*)", "end": "(?![A-Za-z0-9_\\.])", "patterns": [ { "begin": "(\\.)(?=[A-Za-z_][A-Za-z0-9_]*)", "end": "(?![A-Za-z0-9_])", "patterns": [ { "include": "#magic_function_names" }, { "include": "#magic_variable_names" }, { "include": "#illegal_names" }, { "include": "#generic_names" } ] }, { "begin": "(?