; --- Keywords --- "return" @keyword.return [ "goto" "in" "local" ] @keyword (label_statement) @label (break_statement) @keyword (do_statement ["do" "end"] @keyword) (while_statement ["while" "do" "end"] @keyword.repeat) (shorthand_while_statement "while" @keyword.repeat) (repeat_statement ["repeat" "until"] @keyword.repeat) (if_statement ["if" "elseif" "else" "then" "end"] @keyword.conditional) (elseif_statement ["elseif" "then" "end"] @keyword.conditional) (else_statement ["else" "end"] @keyword.conditional) (shorthand_if_statement ["if" "else"] @keyword.conditional) (for_statement ["for" "do" "end"] @keyword.repeat) (function_declaration ["function" "end"] @keyword.function) (function_definition ["function" "end"] @keyword.function) ; --- PICO-8 dialect: print shorthand and #include --- (print_shorthand_statement directive: "?" @function.builtin) (include_statement directive: _ @keyword.directive) (include_statement path: (include_path) @string.special.path) ; --- Operators --- (binary_expression operator: _ @operator) (unary_expression operator: _ @operator) (compound_assignment_statement operator: _ @operator) "=" @operator [ "and" "not" "or" ] @keyword.operator ; --- Punctuation --- [ ";" ":" "," "." ] @punctuation.delimiter [ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket ; --- Variables and constants --- (identifier) @variable (variable_list (attribute "<" @punctuation.bracket (identifier) @attribute ">" @punctuation.bracket)) ((identifier) @constant (#match? @constant "^[A-Z][A-Z_0-9]*$")) (vararg_expression) @constant (nil) @constant.builtin [ (false) (true) ] @boolean ; PICO-8 callback hooks — recognized by name regardless of definition site. ((identifier) @function.builtin (#any-of? @function.builtin "_init" "_update" "_update60" "_draw")) ; --- Tables --- (field name: (identifier) @property) (dot_index_expression field: (identifier) @property) (table_constructor ["{" "}"] @constructor) ; --- Functions --- (parameters (identifier) @variable.parameter) (function_declaration name: [ (identifier) @function (dot_index_expression field: (identifier) @function) ]) (function_declaration name: (method_index_expression method: (identifier) @function.method)) (assignment_statement (variable_list . name: [ (identifier) @function (dot_index_expression field: (identifier) @function) ]) (expression_list . value: (function_definition))) (table_constructor (field name: (identifier) @function value: (function_definition))) (function_call name: [ (identifier) @function.call (dot_index_expression field: (identifier) @function.call) (method_index_expression method: (identifier) @function.method.call) ]) ; --- PICO-8 builtin globals --- (function_call (identifier) @function.builtin (#any-of? @function.builtin ; system "load" "save" "ls" "run" "stop" "assert" "reset" "info" "flip" "printh" "time" "t" "stat" "extcmd" "holdframe" "_set_fps" ; graphics "clip" "pset" "pget" "sget" "sset" "fget" "fset" "print" "cursor" "color" "cls" "camera" "circ" "circfill" "oval" "ovalfill" "line" "rect" "rectfill" "rrect" "rrectfill" "pal" "palt" "spr" "sspr" "fillp" ; tables "add" "del" "deli" "count" "all" "foreach" "pairs" "ipairs" "next" ; input "btn" "btnp" ; audio "sfx" "music" ; map "mget" "mset" "map" "tline" ; memory "peek" "poke" "peek2" "poke2" "peek4" "poke4" "memcpy" "reload" "cstore" "memset" ; math "max" "min" "mid" "flr" "ceil" "cos" "sin" "atan2" "sqrt" "abs" "rnd" "srand" ; bitwise (named forms — operator forms covered by @operator) "band" "bor" "bxor" "bnot" "shl" "shr" "lshr" "rotl" "rotr" ; custom menu "menuitem" ; strings / conversion "tostr" "tonum" "chr" "ord" "sub" "split" "type" ; cart data "cartdata" "dget" "dset" ; metatables "setmetatable" "getmetatable" "rawset" "rawget" "rawequal" "rawlen" ; coroutines "cocreate" "coresume" "costatus" "yield" ; error "error" "pcall" "xpcall")) ; --- Misc --- (comment) @comment (hash_bang_line) @comment.documentation (number) @number (string) @string (escape_sequence) @string.escape