Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'runtime/queries/elixir/highlights.scm')
| -rw-r--r-- | runtime/queries/elixir/highlights.scm | 270 |
1 files changed, 124 insertions, 146 deletions
diff --git a/runtime/queries/elixir/highlights.scm b/runtime/queries/elixir/highlights.scm index c93accd0..6c0d1094 100644 --- a/runtime/queries/elixir/highlights.scm +++ b/runtime/queries/elixir/highlights.scm @@ -15,56 +15,80 @@ ; See the License for the specific language governing permissions and ; limitations under the License. -; Punctuation +; Reserved keywords -[ - "%" -] @punctuation +["when" "and" "or" "not" "in" "not in" "fn" "do" "end" "catch" "rescue" "after" "else"] @keyword -[ - "," - ";" -] @punctuation.delimiter +; Operators -[ - "(" - ")" - "[" - "]" - "{" - "}" - "<<" - ">>" -] @punctuation.bracket +; * doc string +(unary_operator + operator: "@" @comment.block.documentation + operand: (call + target: (identifier) @comment.block.documentation.__attribute__ + (arguments + [ + (string) @comment.block.documentation + (charlist) @comment.block.documentation + (sigil + quoted_start: _ @comment.block.documentation + quoted_end: _ @comment.block.documentation) @comment.block.documentation + (boolean) @comment.block.documentation + ])) + (#match? @comment.block.documentation.__attribute__ "^(moduledoc|typedoc|doc)$")) + +; * module attribute +(unary_operator + operator: "@" @variable.other.member + operand: [ + (identifier) @variable.other.member + (call + target: (identifier) @variable.other.member) + (boolean) @variable.other.member + (nil) @variable.other.member + ]) + +; * capture operator +(unary_operator + operator: "&" + operand: [ + (integer) @operator + (binary_operator + left: [ + (call target: (dot left: (_) right: (identifier) @function)) + (identifier) @function + ] operator: "/" right: (integer) @operator) + ]) + +(operator_identifier) @operator + +(unary_operator + operator: _ @operator) + +(binary_operator + operator: _ @operator) + +(dot + operator: _ @operator) + +(stab_clause + operator: _ @operator) ; Literals -(boolean) @constant.builtin.boolean (nil) @constant.builtin + +(boolean) @constant.builtin.boolean (integer) @constant.numeric.integer (float) @constant.numeric.float -(char) @constant.character - -; Identifiers - -; * regular -(identifier) @variable -; * unused -( - (identifier) @comment.unused - (#match? @comment.unused "^_") -) - -; * special -( - (identifier) @constant.builtin - (#any-of? @constant.builtin "__MODULE__" "__DIR__" "__ENV__" "__CALLER__" "__STACKTRACE__") -) +(alias) @namespace -; Comment +(call + target: (dot + left: (atom) @namespace)) -(comment) @comment +(char) @constant.character ; Quoted content @@ -73,23 +97,18 @@ (escape_sequence) @constant.character.escape [ - (string) - (charlist) -] @string - -[ (atom) (quoted_atom) (keyword) (quoted_keyword) ] @string.special.symbol -; Note that we explicitly target sigil quoted start/end, so they are not overridden by delimiters +[ + (string) + (charlist) +] @string -(sigil - (sigil_name) @__name__ - quoted_start: _ @string.special - quoted_end: _ @string.special) @string.special +; Note that we explicitly target sigil quoted start/end, so they are not overridden by delimiters (sigil (sigil_name) @__name__ @@ -99,46 +118,36 @@ (sigil (sigil_name) @__name__ - quoted_start: _ @string.regex - quoted_end: _ @string.regex - (#match? @__name__ "^[rR]$")) @string.regex + quoted_start: _ @string.regexp + quoted_end: _ @string.regexp + (#match? @__name__ "^[rR]$")) @string.regexp -; Calls - -; * local function call -(call - target: (identifier) @function) - -; * remote function call -(call - target: (dot - right: (identifier) @function)) - -; * field without parentheses or block -(call - target: (dot - right: (identifier) @variable.other.member) - .) +(sigil + (sigil_name) @__name__ + quoted_start: _ @string.special + quoted_end: _ @string.special) @string.special -; * remote call without parentheses or block (overrides above) -(call - target: (dot - left: [ - (alias) - (atom) - ] - right: (identifier) @function) - .) +; Calls ; * definition keyword (call target: (identifier) @keyword - (#any-of? @keyword "def" "defdelegate" "defexception" "defguard" "defguardp" "defimpl" "defmacro" "defmacrop" "defmodule" "defn" "defnp" "defoverridable" "defp" "defprotocol" "defstruct")) + (#match? @keyword "^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$")) ; * kernel or special forms keyword (call target: (identifier) @keyword - (#any-of? @keyword "alias" "case" "cond" "for" "if" "import" "quote" "raise" "receive" "require" "reraise" "super" "throw" "try" "unless" "unquote" "unquote_splicing" "use" "with")) + (#match? @keyword "^(alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) + +; * function call +(call + target: [ + ; local + (identifier) @function + ; remote + (dot + right: (identifier) @function) + ]) ; * just identifier in function definition (call @@ -150,12 +159,7 @@ left: (identifier) @function operator: "when") ]) - (#any-of? @keyword "def" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp" "defp")) - -; * pipe into identifier (function call) -(binary_operator - operator: "|>" - right: (identifier) @function) + (#match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) ; * pipe into identifier (definition) (call @@ -164,78 +168,52 @@ (binary_operator operator: "|>" right: (identifier) @variable)) - (#any-of? @keyword "def" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp" "defp")) + (#match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) -; * pipe into field without parentheses (function call) +; * pipe into identifier (function call) (binary_operator operator: "|>" - right: (call - target: (dot - right: (identifier) @function))) - -; Operators - -; * capture operand -(unary_operator - operator: "&" - operand: [ - (integer) @operator - (binary_operator - left: [ - (call target: (dot left: (_) right: (identifier) @function)) - (identifier) @function - ] operator: "/" right: (integer) @operator) - ]) - -(operator_identifier) @operator - -(unary_operator - operator: _ @operator) + right: (identifier) @function) -(binary_operator - operator: _ @operator) +; Identifiers -(dot - operator: _ @operator) +; * special +( + (identifier) @constant.builtin + (#match? @constant.builtin "^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$") +) -(stab_clause - operator: _ @operator) +; * unused +( + (identifier) @comment + (#match? @comment "^_") +) -; * module attribute -(unary_operator - operator: "@" @variable.other.member - operand: [ - (identifier) @variable.other.member - (call - target: (identifier) @variable.other.member) - (boolean) @variable.other.member - (nil) @variable.other.member - ]) +; * regular +(identifier) @variable -; * doc string -(unary_operator - operator: "@" @comment.block.documentation - operand: (call - target: (identifier) @comment.block.documentation.__attribute__ - (arguments - [ - (string) @comment.block.documentation - (charlist) @comment.block.documentation - (sigil - quoted_start: _ @comment.block.documentation - quoted_end: _ @comment.block.documentation) @comment.block.documentation - (boolean) @comment.block.documentation - ])) - (#any-of? @comment.block.documentation.__attribute__ "moduledoc" "typedoc" "doc")) +; Comment -; Module +(comment) @comment -(alias) @namespace +; Punctuation -(call - target: (dot - left: (atom) @namespace)) +[ + "%" +] @punctuation -; Reserved keywords +[ + "," + ";" +] @punctuation.delimiter -["when" "and" "or" "not" "in" "not in" "fn" "do" "end" "catch" "rescue" "after" "else"] @keyword +[ + "(" + ")" + "[" + "]" + "{" + "}" + "<<" + ">>" +] @punctuation.bracket |