aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/elm
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/elm')
-rw-r--r--runtime/queries/elm/folds.scm14
-rw-r--r--runtime/queries/elm/highlights.scm229
-rw-r--r--runtime/queries/elm/injections.scm8
3 files changed, 251 insertions, 0 deletions
diff --git a/runtime/queries/elm/folds.scm b/runtime/queries/elm/folds.scm
new file mode 100644
index 000000000..56987d9f9
--- /dev/null
+++ b/runtime/queries/elm/folds.scm
@@ -0,0 +1,14 @@
+((function_call_expr) @_fn
+ (#not-has-parent? @_fn parenthesized_expr)) @fold
+
+[
+ (case_of_branch)
+ (case_of_expr)
+ (value_declaration)
+ (type_declaration)
+ (type_alias_declaration)
+ (list_expr)
+ (record_expr)
+ (parenthesized_expr)
+ (import_clause)+
+] @fold
diff --git a/runtime/queries/elm/highlights.scm b/runtime/queries/elm/highlights.scm
new file mode 100644
index 000000000..cfa09caf1
--- /dev/null
+++ b/runtime/queries/elm/highlights.scm
@@ -0,0 +1,229 @@
+[
+ (line_comment)
+ (block_comment)
+] @comment @spell
+
+((block_comment) @comment.documentation
+ (#lua-match? @comment.documentation "^{[-]|[^|]"))
+
+; Keywords
+;---------
+[
+ "if"
+ "then"
+ "else"
+ (case)
+ (of)
+] @keyword.conditional
+
+[
+ "let"
+ "in"
+ (as)
+ (port)
+ (alias)
+ (infix)
+ (module)
+ (type)
+] @keyword
+
+[
+ (import)
+ (exposing)
+] @keyword.import
+
+; Punctuation
+;------------
+(double_dot) @punctuation.special
+
+[
+ ","
+ "|"
+ (dot)
+] @punctuation.delimiter
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "["
+ "]"
+] @punctuation.bracket
+
+; Variables
+;----------
+(value_qid
+ (lower_case_identifier) @variable)
+
+(value_declaration
+ (function_declaration_left
+ (lower_case_identifier) @variable))
+
+(type_annotation
+ (lower_case_identifier) @variable)
+
+(port_annotation
+ (lower_case_identifier) @variable)
+
+(anything_pattern
+ (underscore) @character.special)
+
+(record_base_identifier
+ (lower_case_identifier) @variable)
+
+(lower_pattern
+ (lower_case_identifier) @variable)
+
+(exposed_value
+ (lower_case_identifier) @variable)
+
+(value_qid
+ ((dot)
+ (lower_case_identifier) @variable.member))
+
+(field_access_expr
+ ((dot)
+ (lower_case_identifier) @variable.member))
+
+(function_declaration_left
+ (anything_pattern
+ (underscore) @character.special))
+
+(function_declaration_left
+ (lower_pattern
+ (lower_case_identifier) @variable.parameter))
+
+; Functions
+;----------
+(value_declaration
+ functionDeclarationLeft: (function_declaration_left
+ (lower_case_identifier) @function
+ (pattern)))
+
+(value_declaration
+ functionDeclarationLeft: (function_declaration_left
+ (lower_case_identifier) @function
+ pattern: (_)))
+
+(value_declaration
+ functionDeclarationLeft: (function_declaration_left
+ (lower_case_identifier) @function)
+ body: (anonymous_function_expr))
+
+(type_annotation
+ name: (lower_case_identifier) @function
+ typeExpression: (type_expression
+ (arrow)))
+
+(port_annotation
+ name: (lower_case_identifier) @function
+ typeExpression: (type_expression
+ (arrow)))
+
+(function_call_expr
+ target: (value_expr
+ (value_qid
+ (lower_case_identifier) @function.call)))
+
+; Operators
+;----------
+[
+ (operator_identifier)
+ (eq)
+ (colon)
+ (arrow)
+ (backslash)
+ "::"
+] @operator
+
+; Modules
+;--------
+(module_declaration
+ (upper_case_qid
+ (upper_case_identifier) @module))
+
+(import_clause
+ (upper_case_qid
+ (upper_case_identifier) @module))
+
+(as_clause
+ (upper_case_identifier) @module)
+
+(value_expr
+ (value_qid
+ (upper_case_identifier) @module))
+
+; Types
+;------
+(type_declaration
+ (upper_case_identifier) @type)
+
+(type_ref
+ (upper_case_qid
+ (upper_case_identifier) @type))
+
+(type_variable
+ (lower_case_identifier) @type)
+
+(lower_type_name
+ (lower_case_identifier) @type)
+
+(exposed_type
+ (upper_case_identifier) @type)
+
+(type_alias_declaration
+ (upper_case_identifier) @type.definition)
+
+(field_type
+ name: (lower_case_identifier) @property)
+
+(field
+ name: (lower_case_identifier) @property)
+
+(type_declaration
+ (union_variant
+ (upper_case_identifier) @constructor))
+
+(nullary_constructor_argument_pattern
+ (upper_case_qid
+ (upper_case_identifier) @constructor))
+
+(union_pattern
+ (upper_case_qid
+ (upper_case_identifier) @constructor))
+
+(value_expr
+ (upper_case_qid
+ (upper_case_identifier)) @constructor)
+
+; Literals
+;---------
+(number_constant_expr
+ (number_literal) @number)
+
+(upper_case_qid
+ ((upper_case_identifier) @boolean
+ (#any-of? @boolean "True" "False")))
+
+[
+ (open_quote)
+ (close_quote)
+] @string
+
+(string_constant_expr
+ (string_escape) @string)
+
+(string_constant_expr
+ (regular_string_part) @string)
+
+[
+ (open_char)
+ (close_char)
+] @character
+
+(char_constant_expr
+ (string_escape) @character)
+
+(char_constant_expr
+ (regular_string_part) @character)
diff --git a/runtime/queries/elm/injections.scm b/runtime/queries/elm/injections.scm
new file mode 100644
index 000000000..7ee6c7f03
--- /dev/null
+++ b/runtime/queries/elm/injections.scm
@@ -0,0 +1,8 @@
+([
+ (line_comment)
+ (block_comment)
+] @injection.content
+ (#set! injection.language "comment"))
+
+((glsl_content) @injection.content
+ (#set! injection.language "glsl"))