; This file specifies how matched syntax patterns should be highlighted [ "export" "import" ] @keyword.control.import "mod" @keyword.directive [ "alias" "set" "shell" ] @keyword [ "if" "else" ] @keyword.control.conditional ; Variables (value (identifier) @variable) (alias name: (identifier) @variable) (assignment name: (identifier) @variable) (shell_variable_name) @variable ; Functions (recipe name: (identifier) @function) (recipe_dependency name: (identifier) @function.call) (function_call name: (identifier) @function.builtin) ; Parameters (recipe_parameter name: (identifier) @variable.parameter) ; Namespaces (mod name: (identifier) @namespace) ; Paths (mod (path) @string.special.path) (import (path) @string.special.path) ; Shebangs (shebang_line) @keyword.directive (shebang_line (shebang_shell) @string.special) (shell_expanded_string [ (expansion_short_start) (expansion_long_start) (expansion_long_middle) (expansion_long_end) ] @punctuation.special) ; Operators [ ":=" "?" "==" "!=" "=~" "@" "=" "$" "*" "+" "&&" "@-" "-@" "-" "/" ":" ] @operator ; Punctuation "," @punctuation.delimiter [ "{" "}" "[" "]" "(" ")" "{{" "}}" ] @punctuation.bracket [ "`" "```" ] @punctuation.special ; Literals ; Booleans are not allowed anywhere except in settings (setting (boolean) @constant.builtin.boolean) [ (string) (external_command) ] @string [ (escape_sequence) (escape_variable_end) ] @constant.character.escape ; Comments (comment) @comment.line ; highlight known settings (setting name: (_) @keyword.function) ; highlight known attributes (attribute name: (identifier) @attribute) ; Numbers are part of the syntax tree, even if disallowed (numeric_error) @error