mirror of https://github.com/Wilfred/difftastic/
233 lines
4.4 KiB
Scheme
233 lines
4.4 KiB
Scheme
;; https://github.com/WhatsApp/tree-sitter-erlang/blob/370cea629eb62a8686504b9fb3252a5e1ae55313/queries/highlights.scm
|
|
|
|
;; Copyright (c) Facebook, Inc. and its affiliates.
|
|
;;
|
|
;; Licensed under the Apache License, Version 2.0 (the "License");
|
|
;; you may not use this file except in compliance with the License.
|
|
;; You may obtain a copy of the License at
|
|
;;
|
|
;; http://www.apache.org/licenses/LICENSE-2.0
|
|
;;
|
|
;; Unless required by applicable law or agreed to in writing, software
|
|
;; distributed under the License is distributed on an "AS IS" BASIS,
|
|
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
;; See the License for the specific language governing permissions and
|
|
;; limitations under the License.
|
|
;; ---------------------------------------------------------------------
|
|
|
|
;; Based initially on the contents of https://github.com/WhatsApp/tree-sitter-erlang/issues/2 by @Wilfred
|
|
;; and https://github.com/the-mikedavis/tree-sitter-erlang/blob/main/queries/highlights.scm
|
|
;;
|
|
;; The tests are also based on those in
|
|
;; https://github.com/the-mikedavis/tree-sitter-erlang/tree/main/test/highlight
|
|
;;
|
|
|
|
;; Last match wins in this file.
|
|
;; As of https://github.com/tree-sitter/tree-sitter/blob/master/CHANGELOG.md#breaking-1
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Primitive types
|
|
(string) @string
|
|
(char) @constant
|
|
(integer) @number
|
|
(var) @variable
|
|
(atom) @string.special.symbol
|
|
|
|
;;; Comments
|
|
((var) @comment.discard
|
|
(#match? @comment.discard "^_"))
|
|
|
|
(dotdotdot) @comment.discard
|
|
(comment) @comment
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Functions
|
|
(fa fun: (atom) @function)
|
|
(type_name name: (atom) @function)
|
|
(call expr: (atom) @function)
|
|
(function_clause name: (atom) @function)
|
|
(internal_fun fun: (atom) @function)
|
|
|
|
;; This is a fudge, we should check that the operator is '/'
|
|
;; But our grammar does not (currently) provide it
|
|
(binary_op_expr lhs: (atom) @function rhs: (integer))
|
|
|
|
;; Others
|
|
(remote_module module: (atom) @module)
|
|
(remote fun: (atom) @function)
|
|
(macro_call_expr name: (var) @constant)
|
|
(macro_call_expr name: (var) @keyword.directive args: (_) )
|
|
(macro_call_expr name: (atom) @keyword.directive)
|
|
(record_field_name name: (atom) @property)
|
|
(record_name name: (atom) @type)
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Attributes
|
|
|
|
;; module attribute
|
|
(module_attribute
|
|
name: (atom) @module)
|
|
|
|
;; behaviour
|
|
(behaviour_attribute name: (atom) @module)
|
|
|
|
;; export
|
|
|
|
;; Import attribute
|
|
(import_attribute
|
|
module: (atom) @module)
|
|
|
|
;; export_type
|
|
|
|
;; optional_callbacks
|
|
|
|
;; compile
|
|
(compile_options_attribute
|
|
options: (tuple
|
|
expr: (atom)
|
|
expr: (list
|
|
exprs: (binary_op_expr
|
|
lhs: (atom)
|
|
rhs: (integer)))))
|
|
|
|
;; file attribute
|
|
|
|
;; record
|
|
(record_decl name: (atom) @type)
|
|
(record_decl name: (macro_call_expr name: (var) @constant))
|
|
(record_field name: (atom) @property)
|
|
|
|
;; type alias
|
|
|
|
;; opaque
|
|
|
|
;; Spec attribute
|
|
(spec fun: (atom) @function)
|
|
(spec
|
|
module: (module name: (atom) @module)
|
|
fun: (atom) @function)
|
|
|
|
;; callback
|
|
(callback fun: (atom) @function)
|
|
|
|
;; wild attribute
|
|
(wild_attribute name: (attr_name name: (atom) @keyword))
|
|
|
|
;; fun decl
|
|
|
|
;; include/include_lib
|
|
|
|
;; ifdef/ifndef
|
|
(pp_ifdef name: (_) @keyword.directive)
|
|
(pp_ifndef name: (_) @keyword.directive)
|
|
|
|
;; define
|
|
(pp_define
|
|
lhs: (macro_lhs
|
|
name: (var) @constant))
|
|
(pp_define
|
|
lhs: (macro_lhs
|
|
name: (_) @keyword.directive
|
|
args: (var_args args: (var))))
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Reserved words
|
|
[ "after"
|
|
"and"
|
|
"band"
|
|
"begin"
|
|
"behavior"
|
|
"behaviour"
|
|
"bnot"
|
|
"bor"
|
|
"bsl"
|
|
"bsr"
|
|
"bxor"
|
|
"callback"
|
|
"case"
|
|
"catch"
|
|
"compile"
|
|
"define"
|
|
"div"
|
|
"elif"
|
|
"else"
|
|
"end"
|
|
"endif"
|
|
"export"
|
|
"export_type"
|
|
"file"
|
|
"fun"
|
|
"if"
|
|
"ifdef"
|
|
"ifndef"
|
|
"import"
|
|
"include"
|
|
"include_lib"
|
|
"module"
|
|
"of"
|
|
"opaque"
|
|
"optional_callbacks"
|
|
"or"
|
|
"receive"
|
|
"record"
|
|
"spec"
|
|
"try"
|
|
"type"
|
|
"undef"
|
|
"unit"
|
|
"when"
|
|
"xor"] @keyword
|
|
|
|
["andalso" "orelse"] @keyword.operator
|
|
|
|
;; Punctuation
|
|
["," "." ";"] @punctuation.delimiter
|
|
["(" ")" "{" "}" "[" "]" "<<" ">>"] @punctuation.bracket
|
|
|
|
;; Operators
|
|
["!"
|
|
"->"
|
|
"<-"
|
|
"#"
|
|
"::"
|
|
"|"
|
|
":"
|
|
"="
|
|
"||"
|
|
|
|
"+"
|
|
"-"
|
|
"bnot"
|
|
"not"
|
|
|
|
"/"
|
|
"*"
|
|
"div"
|
|
"rem"
|
|
"band"
|
|
"and"
|
|
|
|
"+"
|
|
"-"
|
|
"bor"
|
|
"bxor"
|
|
"bsl"
|
|
"bsr"
|
|
"or"
|
|
"xor"
|
|
|
|
"++"
|
|
"--"
|
|
|
|
"=="
|
|
"/="
|
|
"=<"
|
|
"<"
|
|
">="
|
|
">"
|
|
"=:="
|
|
"=/="
|
|
] @operator
|
|
|