From 1586b0eec7000fe511d6ed381b35130a38759c40 Mon Sep 17 00:00:00 2001 From: oberblastmeister Date: Wed, 1 Sep 2021 11:16:16 -0400 Subject: YAML support (#667) * added submodule * remove wrong one * added highlights * use property * add indents * shallow--- helix-syntax/languages/tree-sitter-yaml | 1 + 1 file changed, 1 insertion(+) create mode 160000 helix-syntax/languages/tree-sitter-yaml (limited to 'helix-syntax') diff --git a/helix-syntax/languages/tree-sitter-yaml b/helix-syntax/languages/tree-sitter-yaml new file mode 160000 index 00000000..0e36bed1 --- /dev/null +++ b/helix-syntax/languages/tree-sitter-yaml @@ -0,0 +1 @@ +Subproject commit 0e36bed171768908f331ff7dff9d956bae016efb -- cgit v1.2.3-70-g09d2 From ae3f9366118bae9775b5229b817d1131c84cfc96 Mon Sep 17 00:00:00 2001 From: oberblastmeister Date: Wed, 1 Sep 2021 11:54:21 -0400 Subject: Lua support (#665) * added submodule * small changes * updated some stuff * remove * shallow clone * correct indent * shallow * ok * highlights * proper captures--- .gitmodules | 4 + helix-syntax/languages/tree-sitter-lua | 1 + languages.toml | 8 ++ runtime/queries/lua/highlights.scm | 166 +++++++++++++++++++++++++++++++++ runtime/queries/lua/indents.toml | 24 +++++ 5 files changed, 203 insertions(+) create mode 160000 helix-syntax/languages/tree-sitter-lua create mode 100644 runtime/queries/lua/highlights.scm create mode 100644 runtime/queries/lua/indents.toml (limited to 'helix-syntax') diff --git a/.gitmodules b/.gitmodules index aba8084c..ae4984da 100644 --- a/.gitmodules +++ b/.gitmodules @@ -102,6 +102,10 @@ path = helix-syntax/languages/tree-sitter-protobuf url = https://github.com/yusdacra/tree-sitter-protobuf.git shallow = true +[submodule "helix-syntax/languages/tree-sitter-lua"] + path = helix-syntax/languages/tree-sitter-lua + url = https://github.com/nvim-treesitter/tree-sitter-lua + shallow = true [submodule "helix-syntax/languages/tree-sitter-yaml"] path = helix-syntax/languages/tree-sitter-yaml url = https://github.com/ikatyang/tree-sitter-yaml diff --git a/helix-syntax/languages/tree-sitter-lua b/helix-syntax/languages/tree-sitter-lua new file mode 160000 index 00000000..6f5d4019 --- /dev/null +++ b/helix-syntax/languages/tree-sitter-lua @@ -0,0 +1 @@ +Subproject commit 6f5d40190ec8a0aa8c8410699353d820f4f7d7a6 diff --git a/languages.toml b/languages.toml index 7a2ea24d..7164c4df 100644 --- a/languages.toml +++ b/languages.toml @@ -224,6 +224,14 @@ roots = [] comment-token = ";" indent = { tab-width = 4, unit = " " } +[[language]] +name = "lua" +scope = "source.lua" +file-types = ["lua"] +roots = [] +comment-token = "--" +indent = { tab-width = 2, unit = " " } + [[language]] name = "yaml" scope = "source.yaml" diff --git a/runtime/queries/lua/highlights.scm b/runtime/queries/lua/highlights.scm new file mode 100644 index 00000000..8e27a39a --- /dev/null +++ b/runtime/queries/lua/highlights.scm @@ -0,0 +1,166 @@ +;;; Highlighting for lua + +;;; Builtins +(self) @variable.builtin + +;; Keywords + +(if_statement +[ + "if" + "then" + "end" +] @keyword.control.conditional) + +[ + "else" + "elseif" + "then" +] @keyword.control.conditional + +(for_statement +[ + "for" + "do" + "end" +] @keyword.control.loop) + +(for_in_statement +[ + "for" + "do" + "end" +] @keyword.control.loop) + +(while_statement +[ + "while" + "do" + "end" +] @keyword.control.loop) + +(repeat_statement +[ + "repeat" + "until" +] @keyword.control.loop) + +(do_statement +[ + "do" + "end" +] @keyword) + +[ + "in" + "local" + (break_statement) + "goto" + "return" +] @keyword + +;; Operators + +[ + "not" + "and" + "or" +] @keyword.operator + +[ +"=" +"~=" +"==" +"<=" +">=" +"<" +">" +"+" +"-" +"%" +"/" +"//" +"*" +"^" +"&" +"~" +"|" +">>" +"<<" +".." +"#" + ] @operator + +;; Punctuation +["," "." ":" ";"] @punctuation.delimiter + +;; Brackets +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +; ;; Constants +[ +(false) +(true) +] @boolean +(nil) @constant.builtin +(spread) @constant ;; "..." +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_0-9]*$")) + +;; Parameters +(parameters + (identifier) @parameter) + +; ;; Functions +(function [(function_name) (identifier)] @function) +(function ["function" "end"] @keyword.function) + +(function + (function_name + (function_name_field + (property_identifier) @function .))) + +(local_function (identifier) @function) +(local_function ["function" "end"] @keyword.function) + +(variable_declaration + (variable_declarator (identifier) @function) (function_definition)) +(local_variable_declaration + (variable_declarator (identifier) @function) (function_definition)) + +(function_definition ["function" "end"] @keyword.function) + +(function_call + [ + ((identifier) @variable (method) @method) + ((_) (method) @method) + (identifier) @function + (field_expression (property_identifier) @function) + ] + . (arguments)) + +;; Nodes +(table ["{" "}"] @constructor) +(comment) @comment +(string) @string +(number) @number +(label_statement) @label +; A bit of a tricky one, this will only match field names +(field . (identifier) @property (_)) +(shebang) @comment + +;; Property +(property_identifier) @property + +;; Variable +(identifier) @variable + +;; Error +(ERROR) @error diff --git a/runtime/queries/lua/indents.toml b/runtime/queries/lua/indents.toml new file mode 100644 index 00000000..df1a9752 --- /dev/null +++ b/runtime/queries/lua/indents.toml @@ -0,0 +1,24 @@ +indent = [ + "function_definition", + "variable_declaration", + "local_variable_declaration", + "field", + "local_function", + "function", + "if_statement", + "for_statement", + "for_in_statement", + "repeat_statement", + "return_statement", + "while_statement", + "table", + "arguments", + "do_statement", +] + +oudent = [ + "end", + "until", + "}", + ")", +] -- cgit v1.2.3-70-g09d2 From 5766f5da8fc9e98320e7e765c47e701d72108028 Mon Sep 17 00:00:00 2001 From: oberblastmeister Date: Wed, 1 Sep 2021 12:08:08 -0400 Subject: OCaml support (#666) * added some stuff * add interface * indent * highlights and locals * scope * change some stuff * add indents * fix blanket highlight * macro * use inherits--- .gitmodules | 4 + helix-syntax/build.rs | 3 + helix-syntax/languages/tree-sitter-ocaml | 1 + languages.toml | 17 +++ runtime/queries/ocaml-interface/highlights.scm | 1 + runtime/queries/ocaml/highlights.scm | 160 +++++++++++++++++++++++++ runtime/queries/ocaml/indents.toml | 13 ++ runtime/queries/ocaml/locals.scm | 24 ++++ 8 files changed, 223 insertions(+) create mode 160000 helix-syntax/languages/tree-sitter-ocaml create mode 100644 runtime/queries/ocaml-interface/highlights.scm create mode 100644 runtime/queries/ocaml/highlights.scm create mode 100644 runtime/queries/ocaml/indents.toml create mode 100644 runtime/queries/ocaml/locals.scm (limited to 'helix-syntax') diff --git a/.gitmodules b/.gitmodules index ae4984da..f905b8c7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -102,6 +102,10 @@ path = helix-syntax/languages/tree-sitter-protobuf url = https://github.com/yusdacra/tree-sitter-protobuf.git shallow = true +[submodule "helix-syntax/languages/tree-sitter-ocaml"] + path = helix-syntax/languages/tree-sitter-ocaml + url = https://github.com/tree-sitter/tree-sitter-ocaml + shallow = true [submodule "helix-syntax/languages/tree-sitter-lua"] path = helix-syntax/languages/tree-sitter-lua url = https://github.com/nvim-treesitter/tree-sitter-lua diff --git a/helix-syntax/build.rs b/helix-syntax/build.rs index 75f8c970..473646fd 100644 --- a/helix-syntax/build.rs +++ b/helix-syntax/build.rs @@ -177,6 +177,7 @@ fn main() { let ignore = vec![ "tree-sitter-typescript".to_string(), "tree-sitter-haskell".to_string(), // aarch64 failures: https://github.com/tree-sitter/tree-sitter-haskell/issues/34 + "tree-sitter-ocaml".to_string(), ]; let dirs = collect_tree_sitter_dirs(&ignore).unwrap(); @@ -202,4 +203,6 @@ fn main() { build_dir("tree-sitter-typescript/tsx", "tsx"); build_dir("tree-sitter-typescript/typescript", "typescript"); + build_dir("tree-sitter-ocaml/ocaml", "ocaml"); + build_dir("tree-sitter-ocaml/interface", "ocaml-interface") } diff --git a/helix-syntax/languages/tree-sitter-ocaml b/helix-syntax/languages/tree-sitter-ocaml new file mode 160000 index 00000000..23d419ba --- /dev/null +++ b/helix-syntax/languages/tree-sitter-ocaml @@ -0,0 +1 @@ +Subproject commit 23d419ba45789c5a47d31448061557716b02750a diff --git a/languages.toml b/languages.toml index 7164c4df..c04435fe 100644 --- a/languages.toml +++ b/languages.toml @@ -224,6 +224,23 @@ roots = [] comment-token = ";" indent = { tab-width = 4, unit = " " } +[[language]] +name = "ocaml" +scope = "source.ocaml" +injection-regex = "ocaml" +file-types = ["ml"] +roots = [] +comment-token = "(**)" +indent = { tab-width = 2, unit = " " } + +[[language]] +name = "ocaml-interface" +scope = "source.ocaml.interface" +file-types = ["mli"] +roots = [] +comment-token = "(**)" +indent = { tab-width = 2, unit = " "} + [[language]] name = "lua" scope = "source.lua" diff --git a/runtime/queries/ocaml-interface/highlights.scm b/runtime/queries/ocaml-interface/highlights.scm new file mode 100644 index 00000000..6d3dfbcf --- /dev/null +++ b/runtime/queries/ocaml-interface/highlights.scm @@ -0,0 +1 @@ +; inherits: ocaml 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) -- cgit v1.2.3-70-g09d2