Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | book/src/generated/lang-support.md | 1 | ||||
| -rw-r--r-- | languages.toml | 14 | ||||
| -rw-r--r-- | runtime/queries/elisp/highlights.scm | 72 | ||||
| -rw-r--r-- | runtime/queries/elisp/tags.scm | 5 |
4 files changed, 92 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index d013f201..b9aadc69 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -42,6 +42,7 @@ | edoc | ✓ | | | | | eex | ✓ | | | | | ejs | ✓ | | | | +| elisp | ✓ | | | | | elixir | ✓ | ✓ | ✓ | `elixir-ls` | | elm | ✓ | ✓ | | `elm-language-server` | | elvish | ✓ | | | `elvish` | diff --git a/languages.toml b/languages.toml index e908ea59..19c5cf9f 100644 --- a/languages.toml +++ b/languages.toml @@ -3642,6 +3642,20 @@ name = "pest" source = { git = "https://github.com/pest-parser/tree-sitter-pest", rev = "a8a98a824452b1ec4da7f508386a187a2f234b85" } [[language]] +name = "elisp" +scope = "source.elisp" +file-types = ["el"] +comment-tokens = [";"] + +[language.auto-pairs] +'(' = ')' +'"' = '"' + +[[grammar]] +name = "elisp" +source = { git = "https://github.com/Wilfred/tree-sitter-elisp", rev = "e5524fdccf8c22fc726474a910e4ade976dfc7bb" } + +[[language]] name = "gjs" scope = "source.gjs" file-types = ["gjs"] diff --git a/runtime/queries/elisp/highlights.scm b/runtime/queries/elisp/highlights.scm new file mode 100644 index 00000000..1639168b --- /dev/null +++ b/runtime/queries/elisp/highlights.scm @@ -0,0 +1,72 @@ +;; Special forms +[ + "and" + "catch" + "cond" + "condition-case" + "defconst" + "defvar" + "function" + "if" + "interactive" + "lambda" + "let" + "let*" + "or" + "prog1" + "prog2" + "progn" + "quote" + "save-current-buffer" + "save-excursion" + "save-restriction" + "setq" + "setq-default" + "unwind-protect" + "while" +] @keyword + +;; Function definitions +[ + "defun" + "defsubst" + ] @keyword +(function_definition name: (symbol) @function) +(function_definition parameters: (list (symbol) @variable.parameter)) +(function_definition docstring: (string) @comment) + +;; Highlight macro definitions the same way as function definitions. +"defmacro" @keyword +(macro_definition name: (symbol) @function) +(macro_definition parameters: (list (symbol) @variable.parameter)) +(macro_definition docstring: (string) @comment) + +(comment) @comment + +(integer) @constant.numeric.integer +(float) @constant.numeric.float +(char) @constant.character + +(string) @string + +[ + "(" + ")" + "#[" + "[" + "]" +] @punctuation.bracket + +[ + "`" + "#'" + "'" + "," + ",@" +] @operator + +;; Highlight nil and t as constants, unlike other symbols +[ + "nil" + "t" +] @constant.builtin diff --git a/runtime/queries/elisp/tags.scm b/runtime/queries/elisp/tags.scm new file mode 100644 index 00000000..7abcb9a4 --- /dev/null +++ b/runtime/queries/elisp/tags.scm @@ -0,0 +1,5 @@ +;; defun/defsubst +(function_definition name: (symbol) @name) @definition.function + +;; Treat macros as function definitions for the sake of TAGS. +(macro_definition name: (symbol) @name) @definition.function |