aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/queries/gleam/highlights.scm101
-rw-r--r--runtime/queries/gleam/locals.scm15
2 files changed, 116 insertions, 0 deletions
diff --git a/runtime/queries/gleam/highlights.scm b/runtime/queries/gleam/highlights.scm
new file mode 100644
index 00000000..ed3fceca
--- /dev/null
+++ b/runtime/queries/gleam/highlights.scm
@@ -0,0 +1,101 @@
+; Comments
+(module_comment) @comment
+(statement_comment) @comment
+(comment) @comment
+
+; Constants
+(constant
+ name: (identifier) @constant)
+
+; Modules
+(module) @namespace
+(import alias: (identifier) @namespace)
+(remote_type_identifier
+ module: (identifier) @namespace)
+((field_access
+ record: (identifier) @namespace
+ field: (label) @function)
+ (#is-not? local))
+
+; Functions
+(unqualified_import (identifier) @function)
+(function
+ name: (identifier) @function)
+(external_function
+ name: (identifier) @function)
+(function_parameter
+ name: (identifier) @variable.parameter)
+((function_call
+ function: (identifier) @function)
+ (#is-not? local))
+((binary_expression
+ operator: "|>"
+ right: (identifier) @function)
+ (#is-not? local))
+
+; "Properties"
+; Assumed to be intended to refer to a name for a field; something that comes
+; before ":" or after "."
+; e.g. record field names, tuple indices, names for named arguments, etc
+(label) @variable.other.member
+(tuple_access
+ index: (integer) @variable.other.member)
+
+; Type names
+(remote_type_identifier) @type
+(type_identifier) @type
+
+; Literals
+(string) @string
+(bit_string_segment_option) @function.builtin
+(integer) @constant.numeric.integer
+(float) @constant.numeric.float
+
+; Variables
+(identifier) @variable
+(discard) @comment.unused
+
+; Operators
+(binary_expression
+ operator: _ @operator)
+
+; Keywords
+[
+ (visibility_modifier) ; "pub"
+ (opacity_modifier) ; "opaque"
+ "as"
+ "assert"
+ "case"
+ "const"
+ "external"
+ "fn"
+ "if"
+ "import"
+ "let"
+ "todo"
+ "try"
+ "type"
+] @keyword
+
+; Punctuation
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+ "<<"
+ ">>"
+] @punctuation.bracket
+[
+ "."
+ ","
+ ;; Controversial -- maybe some are operators?
+ ":"
+ "#"
+ "="
+ "->"
+ ".."
+ "-"
+] @punctuation.delimiter
diff --git a/runtime/queries/gleam/locals.scm b/runtime/queries/gleam/locals.scm
new file mode 100644
index 00000000..bd5903e5
--- /dev/null
+++ b/runtime/queries/gleam/locals.scm
@@ -0,0 +1,15 @@
+; Scopes
+(function_body) @local.scope
+
+(case_clause) @local.scope
+
+; Definitions
+(let pattern: (identifier) @local.definition)
+(function_parameter name: (identifier) @local.definition)
+(list_pattern (identifier) @local.definition)
+(list_pattern assign: (identifier) @local.definition)
+(tuple_pattern (identifier) @local.definition)
+(record_pattern_argument pattern: (identifier) @local.definition)
+
+; References
+(identifier) @local.reference