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";