From 4c30a3609aa8fbcca97609d281f5df449c234674 Mon Sep 17 00:00:00 2001 From: rsteube Date: Sun, 3 Jul 2022 23:19:12 +0200 Subject: [PATCH] languages: added elvish (#2948) --- book/src/generated/lang-support.md | 1 + languages.toml | 14 +++++ runtime/queries/elvish/highlights.scm | 76 +++++++++++++++++++++++++++ runtime/queries/elvish/injections.scm | 2 + 4 files changed, 93 insertions(+) create mode 100644 runtime/queries/elvish/highlights.scm create mode 100644 runtime/queries/elvish/injections.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index c82a6443b..3c56a6f40 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -18,6 +18,7 @@ | ejs | ✓ | | | | | elixir | ✓ | ✓ | | `elixir-ls` | | elm | ✓ | | | `elm-language-server` | +| elvish | ✓ | | | `elvish` | | erb | ✓ | | | | | erlang | ✓ | ✓ | | `erlang_ls` | | fish | ✓ | ✓ | ✓ | | diff --git a/languages.toml b/languages.toml index 0b4a1dec5..c9ecc76fd 100644 --- a/languages.toml +++ b/languages.toml @@ -1489,3 +1489,17 @@ roots = [] comment-token = "#" indent = { tab-width = 4, unit = " " } grammar = "python" + +[[language]] +name = "elvish" +scope = "source.elvish" +file-types = ["elv"] +roots = [] +comment-token = "#" +indent = { tab-width = 2, unit = " " } +language-server = { command = "elvish", args = ["-lsp"] } +grammar = "elvish" + +[[grammar]] +name = "elvish" +source = { git = "https://github.com/ckafi/tree-sitter-elvish", rev = "e50787cadd3bc54f6d9c0704493a79078bb8a4e5" } diff --git a/runtime/queries/elvish/highlights.scm b/runtime/queries/elvish/highlights.scm new file mode 100644 index 000000000..fd70488df --- /dev/null +++ b/runtime/queries/elvish/highlights.scm @@ -0,0 +1,76 @@ +;; SPDX-License-Identifier: 0BSD +;; SPDX-FileCopyrightText: 2022 Tobias Frilling + +(comment) @comment + +(if "if" @keyword.control.conditional) +(if (elif "elif" @keyword.control.conditional)) +(if (else "else" @keyword.control.conditional)) + +(while "while" @keyword.control.repeat) +(while (else "else" @keyword.control.repeat)) +(for "for" @keyword.control.repeat) +(for (else "else" @keyword.control.repeat)) + +(try "try" @keyword.control.exception) +(try (catch "catch" @keyword.control.exception)) +(try (else "else" @keyword.control.exception)) +(try (finally "finally" @keyword.control.exception)) + +(import "use" @keyword.control.import) +(import (bareword) @string.special) + +(wildcard ["*" "**" "?"] @string.special) + +(command argument: (bareword) @variable.parameter) +(command head: (identifier) @function) +((command head: (identifier) @keyword.control.return) + (#eq? @keyword.control.return "return")) +((command (identifier) @keyword.operator) + (#match? @keyword.operator "(and|or|coalesce)")) +((command head: _ @function) + (#match? @function "([+]|[-]|[*]|[/]|[%]|[<]|[<][=]|[=][=]|[!][=]|[>]|[>][=]|[<][s]|[<][=][s]|[=][=][s]|[!][=][s]|[>][s]|[>][=][s])")) + +(pipeline "|" @operator) +(redirection [">" "<" ">>" "<>"] @operator) + +(io_port) @constant.numeric + +(function_definition + "fn" @keyword.function + (identifier) @function) + +(parameter_list) @variable.parameter +(parameter_list "|" @punctuation.bracket) + +(variable_declaration + "var" @keyword + (lhs (identifier) @variable)) + +(variable_assignment + "set" @keyword + (lhs (identifier) @variable)) + +(temporary_assignment + "tmp" @keyword + (lhs (identifier) @variable)) + +(variable_deletion + "del" @keyword + (identifier) @variable) + + +(number) @constant.numeric +(string) @string + +((variable (identifier) @function) + (#match? @function ".+\\~$")) +((variable (identifier) @constant.builtin.boolean) + (#match? @constant.builtin.boolean "(true|false)")) +((variable (identifier) @constant.builtin) + (#match? @constant.builtin "(_|after-chdir|args|before-chdir|buildinfo|nil|notify-bg-job-success|num-bg-jobs|ok|paths|pid|pwd|value-out-indicator|version)")) +(variable (identifier) @variable) + +["$" "@"] @punctuation.special +["(" ")" "[" "]" "{" "}"] @punctuation.bracket +";" @punctuation.delimiter diff --git a/runtime/queries/elvish/injections.scm b/runtime/queries/elvish/injections.scm new file mode 100644 index 000000000..321c90add --- /dev/null +++ b/runtime/queries/elvish/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment"))