diff options
| author | Christian Clason <c.clason@uni-graz.at> | 2023-06-12 09:54:30 -0600 |
|---|---|---|
| committer | Christian Clason <c.clason@uni-graz.at> | 2025-05-12 18:43:40 +0200 |
| commit | 692b051b09935653befdb8f7ba8afdb640adf17b (patch) | |
| tree | 167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/ocaml | |
| parent | feat(c-family): inherit injections (diff) | |
| download | nvim-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.scm | 30 | ||||
| -rw-r--r-- | runtime/queries/ocaml/highlights.scm | 329 | ||||
| -rw-r--r-- | runtime/queries/ocaml/indents.scm | 77 | ||||
| -rw-r--r-- | runtime/queries/ocaml/injections.scm | 2 | ||||
| -rw-r--r-- | runtime/queries/ocaml/locals.scm | 87 |
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")) |
