Skip to content

Commit

Permalink
add tree-sitter-gleam
Browse files Browse the repository at this point in the history
  • Loading branch information
the-mikedavis authored and archseer committed Mar 30, 2022
1 parent 1819478 commit 7cd6050
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 0 deletions.
1 change: 1 addition & 0 deletions book/src/generated/lang-support.md
Expand Up @@ -17,6 +17,7 @@
| git-config || | | |
| git-diff || | | |
| git-rebase || | | |
| gleam || | | |
| glsl || || |
| go |||| `gopls` |
| graphql || | | |
Expand Down
13 changes: 13 additions & 0 deletions languages.toml
Expand Up @@ -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" }
101 changes: 101 additions & 0 deletions 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
15 changes: 15 additions & 0 deletions 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

0 comments on commit 7cd6050

Please sign in to comment.