aboutsummaryrefslogtreecommitdiffstats
path: root/queries/scala/highlights.scm
diff options
context:
space:
mode:
Diffstat (limited to 'queries/scala/highlights.scm')
-rw-r--r--queries/scala/highlights.scm96
1 files changed, 96 insertions, 0 deletions
diff --git a/queries/scala/highlights.scm b/queries/scala/highlights.scm
new file mode 100644
index 000000000..aecbdf487
--- /dev/null
+++ b/queries/scala/highlights.scm
@@ -0,0 +1,96 @@
+; CREDITS @stumash (stuart.mashaal@gmail.com)
+
+;; variables
+
+(
+ (identifier) @variable.builtin
+ (#match? @variable.builtin "^this$")
+)
+
+;; method calls
+
+; method definition
+(class_definition
+ body: (template_body
+ (function_definition
+ name: (identifier) @method)))
+(object_definition
+ body: (template_body
+ (function_definition
+ name: (identifier) @method)))
+(trait_definition
+ body: (template_body
+ (function_definition
+ name: (identifier) @method)))
+
+; method invocation
+(call_expression
+ function: (field_expression
+ field: (identifier) @method))
+
+(
+ (identifier) @function.builtin
+ (#match? @function.builtin "^super$")
+)
+
+;; keywords
+
+[
+ "abstract"
+ "case"
+ "class"
+ "extends"
+ "final"
+ "finally"
+;; `forSome` existential types not implemented yet
+ "implicit"
+ "lazy"
+;; `macro` not implemented yet
+ "object"
+ "override"
+ "package"
+ "private"
+ "protected"
+ "sealed"
+ "trait"
+ "type"
+ "val"
+ "var"
+ "with"
+] @keyword
+
+(null_literal) @keyword
+
+;; special keywords
+
+"new" @keyword.operator
+
+[
+ "else"
+ "if"
+ "match"
+] @conditional
+
+[
+ "do"
+ "for"
+ "while"
+ "yield"
+] @repeat
+
+"def" @keyword.function
+
+"import" @include
+
+[
+ "try"
+ "catch"
+ "throw"
+] @exception
+
+"return" @keyword.return
+
+;; `case` is a conditional keyword in case_block
+
+(case_block
+ (case_clause ("case") @conditional))