pub const HIGHLIGHTS_QUERY: &'static str = "; Punctuation\n\n[\n \"%\"\n] @punctuation\n\n[\n \",\"\n \";\"\n] @punctuation.delimiter\n\n[\n \"(\"\n \")\"\n \"[\"\n \"]\"\n \"{\"\n \"}\"\n \"<<\"\n \">>\"\n] @punctuation.bracket\n\n; Literals\n\n[\n (boolean)\n (nil)\n] @constant\n\n[\n (integer)\n (float)\n] @number\n\n(char) @constant\n\n; Identifiers\n\n; * regular\n(identifier) @variable\n\n; * unused\n(\n (identifier) @comment.unused\n (#match? @comment.unused \"^_\")\n)\n\n; * special\n(\n (identifier) @constant.builtin\n (#match? @constant.builtin \"^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$\")\n)\n\n; Comment\n\n(comment) @comment\n\n; Quoted content\n\n(interpolation \"#{\" @punctuation.special \"}\" @punctuation.special) @embedded\n\n(escape_sequence) @string.escape\n\n[\n (string)\n (charlist)\n] @string\n\n[\n (atom)\n (quoted_atom)\n (keyword)\n (quoted_keyword)\n] @string.special.symbol\n\n; Note that we explicitly target sigil quoted start/end, so they are not overridden by delimiters\n\n(sigil\n (sigil_name) @__name__\n quoted_start: _ @string.special\n quoted_end: _ @string.special) @string.special\n\n(sigil\n (sigil_name) @__name__\n quoted_start: _ @string\n quoted_end: _ @string\n (#match? @__name__ \"^[sS]$\")) @string\n\n(sigil\n (sigil_name) @__name__\n quoted_start: _ @string.regex\n quoted_end: _ @string.regex\n (#match? @__name__ \"^[rR]$\")) @string.regex\n\n; Calls\n\n; * function call\n(call\n target: [\n ; local\n (identifier) @function\n ; remote\n (dot\n right: (identifier) @function)\n ])\n\n; * definition keyword\n(call\n target: (identifier) @keyword\n (#match? @keyword \"^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$\"))\n\n; * kernel or special forms keyword\n(call\n target: (identifier) @keyword\n (#match? @keyword \"^(alias|case|cond|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$\"))\n\n; * just identifier in function definition\n(call\n target: (identifier) @keyword\n (arguments\n [\n (identifier) @function\n (binary_operator\n left: (identifier) @function\n operator: \"when\")\n ])\n (#match? @keyword \"^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$\"))\n\n; * pipe into identifier (function call)\n(binary_operator\n operator: \"|>\"\n right: (identifier) @function)\n\n; * pipe into identifier (definition)\n(call\n target: (identifier) @keyword\n (arguments\n (binary_operator\n operator: \"|>\"\n right: (identifier) @variable))\n (#match? @keyword \"^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$\"))\n\n; Operators\n\n; * capture operand\n(unary_operator\n operator: \"&\"\n operand: (integer) @operator)\n\n(operator_identifier) @operator\n\n(unary_operator\n operator: _ @operator)\n\n(binary_operator\n operator: _ @operator)\n\n(dot\n operator: _ @operator)\n\n(stab_clause\n operator: _ @operator)\n\n; * module attribute\n(unary_operator\n operator: \"@\" @attribute\n operand: [\n (identifier) @attribute\n (call\n target: (identifier) @attribute)\n (boolean) @attribute\n (nil) @attribute\n ])\n\n; * doc string\n(unary_operator\n operator: \"@\" @comment.doc\n operand: (call\n target: (identifier) @comment.doc.__attribute__\n (arguments\n [\n (string) @comment.doc\n (charlist) @comment.doc\n (sigil\n quoted_start: _ @comment.doc\n quoted_end: _ @comment.doc) @comment.doc\n (boolean) @comment.doc\n ]))\n (#match? @comment.doc.__attribute__ \"^(moduledoc|typedoc|doc)$\"))\n\n; Module\n\n(alias) @module\n\n(call\n target: (dot\n left: (atom) @module))\n\n; Reserved keywords\n\n[\"when\" \"and\" \"or\" \"not\" \"in\" \"not in\" \"fn\" \"do\" \"end\" \"catch\" \"rescue\" \"after\" \"else\"] @keyword\n";