From 9663740245e2c18e160f6563d2f114f59d27b7c9 Mon Sep 17 00:00:00 2001 From: JJ Date: Tue, 31 Oct 2023 21:33:05 -0700 Subject: Add support for Agda, update default Nim LSP --- book/src/guides/adding_languages.md | 2 + languages.toml | 32 +++++++++- runtime/queries/agda/highlights.scm | 124 ++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 runtime/queries/agda/highlights.scm diff --git a/book/src/guides/adding_languages.md b/book/src/guides/adding_languages.md index 93ec013f..0763a3c5 100644 --- a/book/src/guides/adding_languages.md +++ b/book/src/guides/adding_languages.md @@ -36,6 +36,7 @@ below. 3. Refer to the [tree-sitter website](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#queries) for more information on writing queries. +4. A list of highlight captures can be found [on the themes page](https://docs.helix-editor.com/themes.html#scopes). > 💡 In Helix, the first matching query takes precedence when evaluating > queries, which is different from other editors such as Neovim where the last @@ -51,3 +52,4 @@ below. grammars. - If a parser is causing a segfault, or you want to remove it, make sure to remove the compiled parser located at `runtime/grammars/.so`. +- If you are attempting to add queries and Helix is unable to locate them, ensure that the environment variable `HELIX_RUNTIME` is set to the location of the `runtime` folder you're developing in. diff --git a/languages.toml b/languages.toml index 77c629e4..d55d5bfb 100644 --- a/languages.toml +++ b/languages.toml @@ -3,6 +3,7 @@ [language-server] +als = { command = "als" } awk-language-server = { command = "awk-language-server" } bash-language-server = { command = "bash-language-server", args = ["start"] } bass = { command = "bass", args = ["--lsp"] } @@ -46,6 +47,7 @@ metals = { command = "metals", config = { "isHttpEnabled" = true } } mint = { command = "mint", args = ["ls"] } nil = { command = "nil" } nimlangserver = { command = "nimlangserver" } +nimlsp = { command = "nimlsp" } nls = { command = "nls" } ocamllsp = { command = "ocamllsp" } ols = { command = "ols", args = [] } @@ -94,7 +96,7 @@ command = "ansible-language-server" args = ["--stdio"] [language-server.lua-language-server] -command = "lua-language-server" +command = "lua-language-server" [language-server.lua-language-server.config.Lua.hint] enable = true @@ -2775,7 +2777,7 @@ shebangs = [] roots = [] comment-token = "#" indent = { tab-width = 2, unit = " " } -language-servers = [ "nimlangserver" ] +language-servers = [ "nimlsp" ] [language.auto-pairs] '(' = ')' @@ -3012,3 +3014,29 @@ language-servers = [ "templ" ] [[grammar]] name = "templ" source = { git = "https://github.com/vrischmann/tree-sitter-templ", rev = "ea56ac0655243490a4929a988f4eaa91dfccc995" } + +[[language]] +name = "agda" +scope = "source.agda" +injection-regex = "agda" +file-types = ["agda"] +roots = [] +comment-token = "--" +# language-servers = [ "als" ] +# the agda language server is of questionable functionality. +auto-format = false +indent = { tab-width = 2, unit = " " } + +[language.auto-pairs] +'"' = '"' +"'" = "'" +'{' = '}' +'(' = ')' +'[' = ']' + +# [language.debugger] +# ?? can this be used for proof assistant support? explore + +[[grammar]] +name = "agda" +source = { git = "https://github.com/tree-sitter/tree-sitter-agda", rev = "c21c3a0f996363ed17b8ac99d827fe5a4821f217" } diff --git a/runtime/queries/agda/highlights.scm b/runtime/queries/agda/highlights.scm new file mode 100644 index 00000000..4ddf849d --- /dev/null +++ b/runtime/queries/agda/highlights.scm @@ -0,0 +1,124 @@ +;; Punctuation +[ "." ";" ":"] @punctuation.delimiter +[ "(" ")" "{" "}" ] @punctuation.bracket + +;; Constants +(integer) @constant.numeric.integer +; (float) @constant.numeric.float +(literal) @string + +;; Pragmas and comments +(comment) @comment +(pragma) @attribute +(macro) @function.macro + +;; Imports +(module_name) @namespace +(import_directive (id) @namespace) +[(module) (import) (open)] @keyword.control.import + +;; Types +(typed_binding (expr) @type) +(record (expr) @type) +(data (expr) @type) +(signature (expr) @type) +(function (rhs (expr) @type)) +; todo: these are too general. ideally, any nested (atom) +; https://github.com/tree-sitter/tree-sitter/issues/880 + +;; Variables +(untyped_binding (atom) @variable) +(typed_binding (atom) @variable) +(field_name) @variable.other.member + +;; Functions +(function_name) @function +;(function (lhs +; . (atom) @function +; (atom) @variable.parameter)) +; todo: currently fails to parse, upstream tree-sitter bug + +;; Data +[(data_name) (record_name)] @constructor +((atom) @constant.builtin.boolean + (#any-of? @constant.builtin.boolean "true" "false" "True" "False")) + +"Set" @type.builtin + +; postulate +; type_signature +; pattern +; id +; bid +; typed_binding +; primitive +; private +; record_signature +; record_assignments +; field_assignment +; module_assignment +; renaming +; import_directive +; lambda +; let +; instance +; generalize +; record +; fields +; syntax +; hole_name +; data_signature + +;; Keywords +[ + "where" + "data" + "rewrite" + "postulate" + "public" + "private" + "tactic" + "Prop" + "quote" + "renaming" + "in" + "hiding" + "constructor" + "abstract" + "let" + "field" + "mutual" + "infix" + "infixl" + "infixr" + "record" + "overlap" + "instance" + "do" +] @keyword + +[ + "=" +] @operator + +; = | -> : ? \ .. ... λ ∀ → +; (_LAMBDA) (_FORALL) (_ARROW) +; "coinductive" +; "eta-equality" +; "field" +; "inductive" +; "interleaved" +; "macro" +; "no-eta-equality" +; "pattern" +; "primitive" +; "quoteTerm" +; "rewrite" +; "syntax" +; "unquote" +; "unquoteDecl" +; "unquoteDef" +; "using" +; "variable" +; "with" + -- cgit v1.2.3-70-g09d2