diff options
author | oberblastmeister | 2021-09-01 16:08:08 +0000 |
---|---|---|
committer | GitHub | 2021-09-01 16:08:08 +0000 |
commit | 5766f5da8fc9e98320e7e765c47e701d72108028 (patch) | |
tree | c65b2f9ca410983256a80509838fb28f0482a14f /runtime/queries/ocaml | |
parent | 825bceeab68276cdf120bda5d172b854867d8585 (diff) |
OCaml support (#666)
* added some stuff
* add interface
* indent
* highlights and locals
* scope
* change some stuff
* add indents
* fix blanket highlight
* macro
* use inherits
Diffstat (limited to 'runtime/queries/ocaml')
-rw-r--r-- | runtime/queries/ocaml/highlights.scm | 160 | ||||
-rw-r--r-- | runtime/queries/ocaml/indents.toml | 13 | ||||
-rw-r--r-- | runtime/queries/ocaml/locals.scm | 24 |
3 files changed, 197 insertions, 0 deletions
diff --git a/runtime/queries/ocaml/highlights.scm b/runtime/queries/ocaml/highlights.scm new file mode 100644 index 00000000..093b3cce --- /dev/null +++ b/runtime/queries/ocaml/highlights.scm @@ -0,0 +1,160 @@ +; Modules +;-------- + +[(module_name) (module_type_name)] @namespace + +; Types +;------ + +[(class_name) (class_type_name) (type_constructor)] @type + +[(constructor_name) (tag)] @constructor + +; 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) @method + +; Variables +;---------- + +(value_pattern) @parameter + +; Application +;------------ + +(infix_expression + left: (value_path (value_name) @function) + (infix_operator) @operator + (#eq? @operator "@@")) + +(infix_expression + (infix_operator) @operator + right: (value_path (value_name) @function) + (#eq? @operator "|>")) + +(application_expression + function: (value_path (value_name) @function)) + +; Properties +;----------- + +[(label_name) (field_name) (instance_variable_name)] @property + +; Constants +;---------- + +[(boolean) (unit)] @constant + +[(number) (signed_number)] @number + +(character) @character + +(string) @string + +(quoted_string "{" @string "}" @string) @string + +(escape_sequence) @string.escape + +[ + (conversion_specification) + (pretty_printing_indication) +] @punctuation.special + +; Keywords +;--------- + +[ + "and" "as" "assert" "begin" "class" "constraint" + "end" "external" "in" + "inherit" "initializer" "lazy" "let" "match" "method" "module" + "mutable" "new" "nonrec" "object" "of" "private" "rec" "sig" "struct" + "type" "val" "virtual" "when" "with" +] @keyword + +["fun" "function" "functor"] @keyword.function + +["if" "then" "else"] @keyword.control.conditional + +["exception" "try"] @keyword.control.exception + +["include" "open"] @include + +["for" "to" "downto" "while" "do" "done"] @keyword.control.loop + +; Macros +;------- + +(attribute ["[@" "]"] @attribute) +(item_attribute ["[@@" "]"] @attribute) +(floating_attribute ["[@@@" "]"] @attribute) +(extension ["[%" "]"] @function.macro) +(item_extension ["[%%" "]"] @function.macro) +(quoted_extension ["{%" "}"] @function.macro) +(quoted_item_extension ["{%%" "}"] @function.macro) +"%" @function.macro + +["(" ")" "[" "]" "{" "}" "[|" "|]" "[<" "[>"] @punctuation.bracket + +(object_type ["<" ">"] @punctuation.bracket) + +[ + "," "." ";" ":" "=" "|" "~" "?" "+" "-" "!" ">" "&" + "->" ";;" ":>" "+=" ":=" ".." +] @punctuation.delimiter + +; Operators +;---------- + +[ + (prefix_operator) + (sign_operator) + (infix_operator) + (hash_operator) + (indexing_operator) + (let_operator) + (and_operator) + (match_operator) +] @operator + +(match_expression (match_operator) @keyword) + +(value_definition [(let_operator) (and_operator)] @keyword) + +;; TODO: this is an error now +;(prefix_operator "!" @operator) + +(infix_operator ["&" "+" "-" "=" ">" "|" "%"] @operator) + +(signed_number ["+" "-"] @operator) + +["*" "#" "::" "<-"] @operator + +; Attributes +;----------- + +(attribute_id) @property + +; Comments +;--------- + +[(comment) (line_number_directive) (directive) (shebang)] @comment + +(ERROR) @error + +; Blanket highlights +; ------------------ + +[(value_name) (type_variable)] @variable diff --git a/runtime/queries/ocaml/indents.toml b/runtime/queries/ocaml/indents.toml new file mode 100644 index 00000000..9b6462d8 --- /dev/null +++ b/runtime/queries/ocaml/indents.toml @@ -0,0 +1,13 @@ +indent = [ + "let_binding", + "type_binding", + "structure", + "signature", + "record_declaration", + "function_expression", + "match_case", +] + +oudent = [ + "}", +] diff --git a/runtime/queries/ocaml/locals.scm b/runtime/queries/ocaml/locals.scm new file mode 100644 index 00000000..8f3f3fdf --- /dev/null +++ b/runtime/queries/ocaml/locals.scm @@ -0,0 +1,24 @@ +; Scopes +;------- + +[ + (let_binding) + (class_binding) + (class_function) + (method_definition) + (fun_expression) + (object_expression) + (for_expression) + (match_case) + (attribute_payload) +] @local.scope + +; Definitions +;------------ + +(value_pattern) @local.definition + +; References +;----------- + +(value_path . (value_name) @local.reference) |