aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/ocaml
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/ocaml
parentfeat(c-family): inherit injections (diff)
downloadnvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/ocaml')
-rw-r--r--runtime/queries/ocaml/folds.scm30
-rw-r--r--runtime/queries/ocaml/highlights.scm329
-rw-r--r--runtime/queries/ocaml/indents.scm77
-rw-r--r--runtime/queries/ocaml/injections.scm2
-rw-r--r--runtime/queries/ocaml/locals.scm87
5 files changed, 525 insertions, 0 deletions
diff --git a/runtime/queries/ocaml/folds.scm b/runtime/queries/ocaml/folds.scm
new file mode 100644
index 000000000..1d45dbbde
--- /dev/null
+++ b/runtime/queries/ocaml/folds.scm
@@ -0,0 +1,30 @@
+[
+ (let_binding)
+ (external)
+ (type_binding)
+ (exception_definition)
+ (module_binding)
+ (module_type_definition)
+ (open_module)
+ (include_module)
+ (include_module_type)
+ (class_binding)
+ (class_type_binding)
+ (value_specification)
+ (inheritance_specification)
+ (instance_variable_specification)
+ (method_specification)
+ (inheritance_definition)
+ (instance_variable_definition)
+ (method_definition)
+ (class_initializer)
+ (match_case)
+ (attribute)
+ (item_attribute)
+ (floating_attribute)
+ (extension)
+ (item_extension)
+ (quoted_extension)
+ (quoted_item_extension)
+ (comment)
+] @fold
diff --git a/runtime/queries/ocaml/highlights.scm b/runtime/queries/ocaml/highlights.scm
new file mode 100644
index 000000000..891ff7bd5
--- /dev/null
+++ b/runtime/queries/ocaml/highlights.scm
@@ -0,0 +1,329 @@
+; Modules
+;--------
+[
+ (module_name)
+ (module_type_name)
+] @module
+
+; Types
+;------
+((type_constructor) @type.builtin
+ (#any-of? @type.builtin
+ "int" "char" "bytes" "string" "float" "bool" "unit" "exn" "array" "list" "option" "int32"
+ "int64" "nativeint" "format6" "lazy_t"))
+
+[
+ (class_name)
+ (class_type_name)
+ (type_constructor)
+] @type
+
+[
+ (constructor_name)
+ (tag)
+] @constructor
+
+; Variables
+;----------
+[
+ (value_name)
+ (type_variable)
+] @variable
+
+(value_pattern) @variable.parameter
+
+((value_pattern) @character.special
+ (#eq? @character.special "_"))
+
+; Functions
+;----------
+(let_binding
+ pattern: (value_name) @function
+ (parameter))
+
+(let_binding
+ pattern: (value_name) @function
+ body: [
+ (fun_expression)
+ (function_expression)
+ ])
+
+(value_specification
+ (value_name) @function)
+
+(external
+ (value_name) @function)
+
+(method_name) @function.method
+
+; Application
+;------------
+(infix_expression
+ left: (value_path
+ (value_name) @function.call)
+ operator: (concat_operator) @_operator
+ (#eq? @_operator "@@"))
+
+(infix_expression
+ operator: (rel_operator) @_operator
+ right: (value_path
+ (value_name) @function.call)
+ (#eq? @_operator "|>"))
+
+(application_expression
+ function: (value_path
+ (value_name) @function.call))
+
+((value_name) @function.builtin
+ (#any-of? @function.builtin "raise" "raise_notrace" "failwith" "invalid_arg"))
+
+; Fields
+;-------
+[
+ (field_name)
+ (instance_variable_name)
+] @variable.member
+
+; Labels
+; ------
+(label_name) @label
+
+; Constants
+;----------
+; Don't let normal parens take priority over this
+((unit) @constant.builtin
+ (#set! priority 105))
+
+(boolean) @boolean
+
+[
+ (number)
+ (signed_number)
+] @number
+
+(character) @character
+
+(string) @string
+
+(quoted_string
+ "{" @string
+ "}" @string) @string
+
+(escape_sequence) @string.escape
+
+[
+ (conversion_specification)
+ (pretty_printing_indication)
+] @string.special
+
+; Keywords
+;---------
+[
+ "and"
+ "as"
+ "assert"
+ "begin"
+ "constraint"
+ "end"
+ "external"
+ "in"
+ "inherit"
+ "initializer"
+ "let"
+ "match"
+ "method"
+ "module"
+ "new"
+ "of"
+ "sig"
+ "val"
+ "when"
+ "with"
+] @keyword
+
+[
+ "object"
+ "class"
+ "struct"
+ "type"
+] @keyword.type
+
+[
+ "lazy"
+ "mutable"
+ "nonrec"
+ "rec"
+ "private"
+ "virtual"
+] @keyword.modifier
+
+[
+ "fun"
+ "function"
+ "functor"
+] @keyword.function
+
+[
+ "if"
+ "then"
+ "else"
+] @keyword.conditional
+
+[
+ "exception"
+ "try"
+] @keyword.exception
+
+[
+ "include"
+ "open"
+] @keyword.import
+
+[
+ "for"
+ "to"
+ "downto"
+ "while"
+ "do"
+ "done"
+] @keyword.repeat
+
+; Punctuation
+;------------
+(attribute
+ [
+ "[@"
+ "]"
+ ] @punctuation.special)
+
+(item_attribute
+ [
+ "[@@"
+ "]"
+ ] @punctuation.special)
+
+(floating_attribute
+ [
+ "[@@@"
+ "]"
+ ] @punctuation.special)
+
+(extension
+ [
+ "[%"
+ "]"
+ ] @punctuation.special)
+
+(item_extension
+ [
+ "[%%"
+ "]"
+ ] @punctuation.special)
+
+(quoted_extension
+ [
+ "{%"
+ "}"
+ ] @punctuation.special)
+
+(quoted_item_extension
+ [
+ "{%%"
+ "}"
+ ] @punctuation.special)
+
+"%" @punctuation.special
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+ "[|"
+ "|]"
+ "[<"
+ "[>"
+] @punctuation.bracket
+
+(object_type
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
+
+[
+ ","
+ "."
+ ";"
+ ":"
+ "="
+ "|"
+ "~"
+ "?"
+ "+"
+ "-"
+ "!"
+ ">"
+ "&"
+ "->"
+ ";;"
+ ":>"
+ "+="
+ ":="
+ ".."
+] @punctuation.delimiter
+
+(range_pattern
+ ".." @character.special)
+
+; Operators
+;----------
+[
+ (prefix_operator)
+ (sign_operator)
+ (pow_operator)
+ (mult_operator)
+ (add_operator)
+ (concat_operator)
+ (rel_operator)
+ (and_operator)
+ (or_operator)
+ (assign_operator)
+ (hash_operator)
+ (indexing_operator)
+ (let_operator)
+ (and_operator)
+ (match_operator)
+] @operator
+
+(match_expression
+ (match_operator) @keyword)
+
+(value_definition
+ [
+ (let_operator)
+ (let_and_operator)
+ ] @keyword)
+
+[
+ "*"
+ "#"
+ "::"
+ "<-"
+] @operator
+
+; Attributes
+;-----------
+(attribute_id) @attribute
+
+; Comments
+;---------
+[
+ (comment)
+ (line_number_directive)
+ (directive)
+] @comment @spell
+
+(shebang) @keyword.directive
diff --git a/runtime/queries/ocaml/indents.scm b/runtime/queries/ocaml/indents.scm
new file mode 100644
index 000000000..d7f05367d
--- /dev/null
+++ b/runtime/queries/ocaml/indents.scm
@@ -0,0 +1,77 @@
+; format-ignore
+[
+ (let_binding) ; let = ...
+ (type_binding)
+
+ (external)
+ (record_declaration) ; { foo: bar ... }
+ (structure) ; struct ... end
+ (signature) ; sig ... end
+ (value_specification) ; val x: bar
+
+ (do_clause) ; do ... done
+ (match_case)
+
+ (field_expression)
+ (application_expression)
+ (parenthesized_expression) ; ( ... )
+ (record_expression) ; { foo = bar ... }
+ (list_expression) ; [...;...]
+ (try_expression) ; try ... with
+] @indent.begin
+
+; handle if-else if-else case
+(if_expression
+ condition: (_) @indent.begin)
+
+(then_clause) @indent.begin
+
+((else_clause
+ (_) @_not_if) @indent.begin
+ (#not-kind-eq? @_not_if "if_expression"))
+
+((parameter) @indent.begin
+ (#set! indent.start_at_same_line))
+
+(_
+ (ERROR) @indent.begin
+ (#set! indent.start_at_same_line))
+
+(ERROR
+ "|" @indent.begin
+ (#set! indent.start_at_same_line))
+
+(try_expression
+ "with" @indent.branch
+ [
+ (match_case) @indent.dedent
+ (match_case
+ [
+ (parenthesized_expression)
+ (list_expression)
+ ] @indent.dedent)
+ ])
+
+"}" @indent.branch @indent.end
+
+(list_expression
+ "]" @indent.branch)
+
+(parenthesized_expression
+ ")" @indent.branch)
+
+";;" @indent.end
+
+(do_clause
+ "done" @indent.end @indent.branch)
+
+(structure
+ "end" @indent.end @indent.branch)
+
+(signature
+ "end" @indent.end @indent.branch)
+
+[
+ (string)
+ (comment)
+] @indent.auto
diff --git a/runtime/queries/ocaml/injections.scm b/runtime/queries/ocaml/injections.scm
new file mode 100644
index 000000000..2f0e58eb6
--- /dev/null
+++ b/runtime/queries/ocaml/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/ocaml/locals.scm b/runtime/queries/ocaml/locals.scm
new file mode 100644
index 000000000..38d392609
--- /dev/null
+++ b/runtime/queries/ocaml/locals.scm
@@ -0,0 +1,87 @@
+; Scopes
+;-------
+[
+ (compilation_unit)
+ (structure)
+ (signature)
+ (module_binding)
+ (functor)
+ (let_binding)
+ (match_case)
+ (class_binding)
+ (class_function)
+ (method_definition)
+ (let_expression)
+ (fun_expression)
+ (for_expression)
+ (let_class_expression)
+ (object_expression)
+ (attribute_payload)
+] @local.scope
+
+; Definitions
+;------------
+(value_pattern) @local.definition.var
+
+(let_binding
+ pattern: (value_name) @local.definition.var
+ (#set! definition.var.scope "parent"))
+
+(let_binding
+ pattern: (tuple_pattern
+ (value_name) @local.definition.var)
+ (#set! definition.var.scope "parent"))
+
+(let_binding
+ pattern: (record_pattern
+ (field_pattern
+ (value_name) @local.definition.var))
+ (#set! definition.var.scope "parent"))
+
+(external
+ (value_name) @local.definition.var)
+
+(type_binding
+ (type_constructor) @local.definition.type)
+
+(abstract_type
+ (type_constructor) @local.definition.type)
+
+(method_definition
+ (method_name) @local.definition.method)
+
+(module_binding
+ (module_name) @local.definition.namespace
+ (#set! definition.namespace.scope "parent"))
+
+(module_parameter
+ (module_name) @local.definition.namespace)
+
+(module_type_definition
+ (module_type_name) @local.definition.type)
+
+; References
+;------------
+(value_path
+ .
+ (value_name) @local.reference
+ (#set! reference.kind "var"))
+
+(type_constructor_path
+ .
+ (type_constructor) @local.reference
+ (#set! reference.kind "type"))
+
+(method_invocation
+ (method_name) @local.reference
+ (#set! reference.kind "method"))
+
+(module_path
+ .
+ (module_name) @local.reference
+ (#set! reference.kind "type"))
+
+(module_type_path
+ .
+ (module_type_name) @local.reference
+ (#set! reference.kind "type"))