From 7cd60502358440449935a50b4d95fa6527312037 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Tue, 29 Mar 2022 21:13:58 -0500 Subject: [PATCH] add tree-sitter-gleam --- book/src/generated/lang-support.md | 1 + languages.toml | 13 ++++ runtime/queries/gleam/highlights.scm | 101 +++++++++++++++++++++++++++ runtime/queries/gleam/locals.scm | 15 ++++ 4 files changed, 130 insertions(+) create mode 100644 runtime/queries/gleam/highlights.scm create mode 100644 runtime/queries/gleam/locals.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 35a10c0fe..34e65e46c 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -17,6 +17,7 @@ | git-config | ✓ | | | | | git-diff | ✓ | | | | | git-rebase | ✓ | | | | +| gleam | ✓ | | | | | glsl | ✓ | | ✓ | | | go | ✓ | ✓ | ✓ | `gopls` | | graphql | ✓ | | | | diff --git a/languages.toml b/languages.toml index ce51e4fcb..3439d7f01 100644 --- a/languages.toml +++ b/languages.toml @@ -1003,3 +1003,16 @@ language-server = { command = "solc", args = ["--lsp"] } [[grammar]] name = "solidity" source = { git = "https://github.com/slinlee/tree-sitter-solidity", rev = "f3a002274744e859bf64cf3524985f8c31ea84fd" } + +[[language]] +name = "gleam" +scope = "source.gleam" +injection-regex = "gleam" +file-types = ["gleam"] +roots = ["gleam.toml"] +comment-token = "//" +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "gleam" +source = { git = "https://github.com/gleam-lang/tree-sitter-gleam", rev = "7159ce961592192b0e7cdf88782cda0fdf41a4cb" } diff --git a/runtime/queries/gleam/highlights.scm b/runtime/queries/gleam/highlights.scm new file mode 100644 index 000000000..ed3fcecad --- /dev/null +++ b/runtime/queries/gleam/highlights.scm @@ -0,0 +1,101 @@ +; Comments +(module_comment) @comment +(statement_comment) @comment +(comment) @comment + +; Constants +(constant + name: (identifier) @constant) + +; Modules +(module) @namespace +(import alias: (identifier) @namespace) +(remote_type_identifier + module: (identifier) @namespace) +((field_access + record: (identifier) @namespace + field: (label) @function) + (#is-not? local)) + +; Functions +(unqualified_import (identifier) @function) +(function + name: (identifier) @function) +(external_function + name: (identifier) @function) +(function_parameter + name: (identifier) @variable.parameter) +((function_call + function: (identifier) @function) + (#is-not? local)) +((binary_expression + operator: "|>" + right: (identifier) @function) + (#is-not? local)) + +; "Properties" +; Assumed to be intended to refer to a name for a field; something that comes +; before ":" or after "." +; e.g. record field names, tuple indices, names for named arguments, etc +(label) @variable.other.member +(tuple_access + index: (integer) @variable.other.member) + +; Type names +(remote_type_identifier) @type +(type_identifier) @type + +; Literals +(string) @string +(bit_string_segment_option) @function.builtin +(integer) @constant.numeric.integer +(float) @constant.numeric.float + +; Variables +(identifier) @variable +(discard) @comment.unused + +; Operators +(binary_expression + operator: _ @operator) + +; Keywords +[ + (visibility_modifier) ; "pub" + (opacity_modifier) ; "opaque" + "as" + "assert" + "case" + "const" + "external" + "fn" + "if" + "import" + "let" + "todo" + "try" + "type" +] @keyword + +; Punctuation +[ + "(" + ")" + "[" + "]" + "{" + "}" + "<<" + ">>" +] @punctuation.bracket +[ + "." + "," + ;; Controversial -- maybe some are operators? + ":" + "#" + "=" + "->" + ".." + "-" +] @punctuation.delimiter diff --git a/runtime/queries/gleam/locals.scm b/runtime/queries/gleam/locals.scm new file mode 100644 index 000000000..bd5903e56 --- /dev/null +++ b/runtime/queries/gleam/locals.scm @@ -0,0 +1,15 @@ +; Scopes +(function_body) @local.scope + +(case_clause) @local.scope + +; Definitions +(let pattern: (identifier) @local.definition) +(function_parameter name: (identifier) @local.definition) +(list_pattern (identifier) @local.definition) +(list_pattern assign: (identifier) @local.definition) +(tuple_pattern (identifier) @local.definition) +(record_pattern_argument pattern: (identifier) @local.definition) + +; References +(identifier) @local.reference