;; Forked from https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scala/highlights.scm ;; Licensed under the Apache License 2.0 ; CREDITS @stumash (stuart.mashaal@gmail.com) (class_definition name: (identifier) @type ) (enum_definition name: (identifier) @type ) (object_definition name: (identifier) @type ) (trait_definition name: (identifier) @type ) (full_enum_case name: (identifier) @type ) (simple_enum_case name: (identifier) @type ) ;; variables (class_parameter name: (identifier) @parameter ) (self_type (identifier) @parameter ) (interpolation (identifier) @none ) (interpolation (block) @none ) ;; types (type_definition name: (type_identifier) @type.definition ) (type_identifier) @type ;; val/var definitions/declarations (val_definition pattern: (identifier) @variable ) (var_definition pattern: (identifier) @variable ) (val_declaration name: (identifier) @variable ) (var_declaration name: (identifier) @variable ) ; method definition (function_declaration name: (identifier) @method ) (function_definition name: (identifier) @method ) ; imports/exports (import_declaration path: (identifier) @namespace ) ( (stable_identifier (identifier) @namespace ) ) ( (import_declaration path: (identifier) @type ) (#lua-match? @type "^[A-Z]") ) ( (stable_identifier (identifier) @type ) (#lua-match? @type "^[A-Z]") ) (export_declaration path: (identifier) @namespace ) ( (stable_identifier (identifier) @namespace ) ) ( (export_declaration path: (identifier) @type ) (#lua-match? @type "^[A-Z]") ) ( (stable_identifier (identifier) @type ) (#lua-match? @type "^[A-Z]") ) ( (namespace_selectors (identifier) @type ) (#lua-match? @type "^[A-Z]") ) ; method invocation (call_expression function: (identifier) @function.call ) (call_expression function: (operator_identifier) @function.call ) (call_expression function: (field_expression field: (identifier) @method.call ) ) ( (call_expression function: (identifier) @constructor ) (#lua-match? @constructor "^[A-Z]") ) (generic_function function: (identifier) @function.call ) (interpolated_string_expression interpolator: (identifier) @function.call ) ; function definitions (function_definition name: (identifier) @function ) (parameter name: (identifier) @parameter ) (binding name: (identifier) @parameter ) ; expressions (field_expression field: (identifier) @property ) (field_expression value: (identifier) @type (#lua-match? @type "^[A-Z]") ) (infix_expression operator: (identifier) @operator ) (infix_expression operator: (operator_identifier) @operator ) (infix_type operator: (operator_identifier) @operator ) (infix_type operator: (operator_identifier) @operator ) ; literals (boolean_literal) @boolean (integer_literal) @number (floating_point_literal) @float [ (symbol_literal) (string) (character_literal) (interpolated_string_expression) ] @string (interpolation "$" @punctuation.special ) ;; keywords (opaque_modifier) @type.qualifier (infix_modifier) @keyword (transparent_modifier) @type.qualifier (open_modifier) @type.qualifier [ "case" "class" "enum" "extends" "derives" "finally" ;; `forSome` existential types not implemented yet ;; `macro` not implemented yet "object" "override" "package" "trait" "type" "val" "var" "with" "given" "using" "end" "implicit" "extension" "with" ] @keyword [ "abstract" "final" "lazy" "sealed" "private" "protected" ] @type.qualifier (inline_modifier) @storageclass (null_literal) @constant.builtin (wildcard) @parameter (annotation) @attribute ;; special keywords "new" @keyword.operator [ "else" "if" "match" "then" ] @conditional [ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket [ "." "," ] @punctuation.delimiter [ "do" "for" "while" "yield" ] @repeat "def" @keyword.function [ "=>" "<-" "@" ] @operator [ "import" "export" ] @include [ "try" "catch" "throw" ] @exception "return" @keyword.return [ (comment) (block_comment) ] @comment @spell ( (block_comment) @comment.documentation (#lua-match? @comment.documentation "^/[*][*][^*].*[*]/$") ) ;; `case` is a conditional keyword in case_block (case_block (case_clause ("case") @conditional ) ) (operator_identifier) @operator ( (identifier) @type (#lua-match? @type "^[A-Z]") ) ( (identifier) @variable.builtin (#lua-match? @variable.builtin "^this$") ) ( (identifier) @function.builtin (#lua-match? @function.builtin "^super$") ) ;; Scala CLI using directives (using_directive_key) @parameter (using_directive_value) @string