; CREDITS @stumash (stuart.mashaal@gmail.com) (field_expression field: (identifier) @property) (field_expression value: (identifier) @type (#match? @type "^[A-Z]")) (type_identifier) @type (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) ;; val/var definitions/declarations (val_definition pattern: (identifier) @variable) (var_definition pattern: (identifier) @variable) (val_declaration name: (identifier) @variable) (var_declaration name: (identifier) @variable) ; imports/exports (import_declaration path: (identifier) @namespace) ((stable_identifier (identifier) @namespace)) ((import_declaration path: (identifier) @type) (#match? @type "^[A-Z]")) ((stable_identifier (identifier) @type) (#match? @type "^[A-Z]")) (export_declaration path: (identifier) @namespace) ((stable_identifier (identifier) @namespace)) ((export_declaration path: (identifier) @type) (#match? @type "^[A-Z]")) ((stable_identifier (identifier) @type) (#match? @type "^[A-Z]")) ((namespace_selectors (identifier) @type) (#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) (#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) ; method definition (function_declaration name: (identifier) @method) (function_definition name: (identifier) @method) ; expressions (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 [ (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) @spell @comment (block_comment) @spell @comment ;; `case` is a conditional keyword in case_block (case_block (case_clause ("case") @conditional)) (indented_cases (case_clause ("case") @conditional)) (operator_identifier) @operator ((identifier) @type (#match? @type "^[A-Z]")) ((identifier) @variable.builtin (#match? @variable.builtin "^this$")) ( (identifier) @function.builtin (#match? @function.builtin "^super$") ) ;; Scala CLI using directives (using_directive_key) @parameter (using_directive_value) @string