fix(:lang): missing grammar recipes

I removed the grammar recipes in 3b58741 to avoid redundancy with the
upstream recipes, but didn't realize that those upstream recipes weren't
added until Emacs 31, so users on 30 and older would get errors when
trying to install any missing grammars.

This also establishes a hard dependency between :lang (php +tree-sitter)
and :lang ({javascript,web} +tree-sitter).

Amend: 3b58741522
This commit is contained in:
Henrik Lissner
2025-08-31 12:47:50 +02:00
parent d9fd5cb8f3
commit d545fccf47
21 changed files with 107 additions and 58 deletions

View File

@@ -30,9 +30,10 @@ This is ignored by ccls.")
:hook (c-mode-common . rainbow-delimiters-mode)
:init
(when (modulep! +tree-sitter)
(set-tree-sitter! 'c-mode 'c-ts-mode 'c)
(set-tree-sitter! 'c++-mode 'c++-ts-mode 'cpp))
(set-tree-sitter! 'c-mode 'c-ts-mode
'((c :url "https://github.com/tree-sitter/tree-sitter-c")))
(set-tree-sitter! 'c++-mode 'c++-ts-mode
'((cpp :url "https://github.com/tree-sitter/tree-sitter-cpp"))))
:config
(set-docsets! '(c-mode c-ts-mode) "C")
(set-docsets! '(c++-mode c++-ts-mode) "C++" "Boost")
@@ -114,7 +115,8 @@ This is ignored by ccls.")
:init
(when (and (modulep! +tree-sitter)
(boundp 'cmake-ts-mode)) ; 29+ only
(set-tree-sitter! 'cmake-mode 'cmake-ts-mode 'cmake))
(set-tree-sitter! 'cmake-mode 'cmake-ts-mode
'((cmake :url "https://github.com/uyha/tree-sitter-cmake"))))
:config
(set-docsets! '(cmake-mode cmake-ts-mode) "CMake")
(set-popup-rule! "^\\*CMake Help\\*" :size 0.4 :ttl t)

View File

@@ -2,9 +2,13 @@
(use-package! csharp-mode
:hook (csharp-mode . rainbow-delimiters-mode)
:defer t
:init
(when (modulep! +tree-sitter)
(set-tree-sitter! 'csharp-mode 'csharp-ts-mode 'c-sharp))
(set-tree-sitter! 'csharp-mode 'csharp-ts-mode
'((c-sharp :url "https://github.com/tree-sitter/tree-sitter-c-sharp"
:rev "v0.23.1"
:commit "362a8a41b265056592a0c3771664a21d23a71392"))))
:config
(set-formatter! 'csharpier '("csharpier" "format" "--write-stdout")
:modes '(csharp-mode csharp-ts-mode))

View File

@@ -54,12 +54,15 @@
highlight-numbers-modelist)))
(use-package! elixir-ts-mode
(use-package! elixir-ts-mode ; 30.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'elixir-ts-mode) ; 30.1+ only
:defer t
:init
(set-tree-sitter! 'elixir-mode 'elixir-ts-mode '(elixir heex))
(set-tree-sitter! 'elixir-mode 'elixir-ts-mode
'((elixir :url "https://github.com/elixir-lang/tree-sitter-elixir"
:commit "02a6f7fd4be28dd94ee4dd2ca19cb777053ea74e")
(heex :url "https://github.com/phoenixframework/tree-sitter-heex"
:commit "f6b83f305a755cd49cf5f6a66b2b789be93dc7b9")))
:config
(+elixir-common-config 'elixir-ts-mode))

View File

@@ -53,7 +53,13 @@
:when (fboundp 'go-ts-mode) ; 31.1+ only
:defer t
:init
(set-tree-sitter! 'go-mode 'go-ts-mode '(go gomod gowork))
(set-tree-sitter! 'go-mode 'go-ts-mode
'((go :url "https://github.com/tree-sitter/tree-sitter-go"
:commit "12fe553fdaaa7449f764bc876fd777704d4fb752")
(gomod :url "https://github.com/camdencheek/tree-sitter-go-mod"
:commit "3b01edce2b9ea6766ca19328d1850e456fde3103")
(gowork :url "https://github.com/omertuc/tree-sitter-go-work"
:commit "949a8a470559543857a62102c84700d291fc984c")))
:config
(+go-common-config 'go-ts-mode))

View File

@@ -29,5 +29,5 @@
:defer t
:init
(set-tree-sitter! 'janet-mode 'janet-ts-mode
`(janet-simple :url "https://github.com/sogaiu/tree-sitter-janet-simple"
:cc ,(if (featurep :system 'windows) "gcc.exe"))))
`((janet-simple :url "https://github.com/sogaiu/tree-sitter-janet-simple"
:cc ,(if (featurep :system 'windows) "gcc.exe")))))

View File

@@ -34,12 +34,15 @@ If the depth is 2, the first two directories are removed: net.lissner.game.")
;;
;;; Common packages
(use-package! java-ts-mode
(use-package! java-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'java-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'java-mode 'java-ts-mode '(java doxygen)))
(set-tree-sitter! 'java-mode 'java-ts-mode
'((java :url "https://github.com/tree-sitter/tree-sitter-java"
:commit "94703d5a6bed02b98e438d7cad1136c01a60ba2c")
(doxygen :url "https://github.com/tree-sitter-grammars/tree-sitter-doxygen"
:commit "1e28054cb5be80d5febac082706225e42eff14e6"))))
(use-package! android-mode

View File

@@ -52,12 +52,17 @@
(+javascript-common-config 'js-mode))
(use-package! js-ts-mode
(use-package! js-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'js-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'js-mode 'js-ts-mode 'javascript)
(set-tree-sitter! 'js-mode 'js-ts-mode
'((javascript :url "https://github.com/tree-sitter/tree-sitter-javascript"
:rev "v0.23.0"
:commit "108b2d4d17a04356a340aea809e4dd5b801eb40d")
(jsdoc :url "https://github.com/tree-sitter/tree-sitter-jsdoc"
:rev "v0.23.0"
:commit "b253abf68a73217b7a52c0ec254f4b6a7bb86665")))
(+javascript-common-config 'js-ts-mode))
@@ -68,12 +73,14 @@
(+javascript-common-config 'typescript-mode))
(use-package! typescript-ts-mode
(use-package! typescript-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'typescript-ts-mode) ; 29.1+ only
:mode "\\.ts\\'"
:init
(set-tree-sitter! 'typescript-mode 'typescript-ts-mode 'typescript)
(set-tree-sitter! 'typescript-mode 'typescript-ts-mode
'((typescript :url "https://github.com/tree-sitter/tree-sitter-typescript"
:commit "8e13e1db35b941fc57f2bd2dd4628180448c17d5"
:source-dir "typescript/src")))
:config
(+javascript-common-config 'typescript-ts-mode))

View File

@@ -20,12 +20,13 @@
"f" #'json-mode-beautify))
(use-package! json-ts-mode
(use-package! json-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'json-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'json-mode 'json-ts-mode 'json)
(set-tree-sitter! 'json-mode 'json-ts-mode
'((json :url "https://github.com/tree-sitter/tree-sitter-json"
:commit "4d770d31f732d50d3ec373865822fbe659e47c75")))
:config
(when (modulep! +lsp)
(add-hook 'json-ts-mode-local-vars-hook #'lsp! 'append)))

View File

@@ -48,7 +48,8 @@
:when (modulep! +tree-sitter)
:defer t
:init
(set-tree-sitter! 'julia-mode 'julia-ts-mode 'julia)
(set-tree-sitter! 'julia-mode 'julia-ts-mode
'((julia :url "https://github.com/tree-sitter/tree-sitter-julia")))
:config
(when (modulep! +lsp)
(add-hook 'julia-ts-mode-local-vars-hook #'lsp! 'append)))

View File

@@ -28,10 +28,11 @@
(use-package! lua-ts-mode
:when (modulep! +tree-sitter)
:when (fboundp 'lua-ts-mode) ; 30.1+ only
:defer t
:init
(set-tree-sitter! 'lua-mode 'lua-ts-mode 'lua)
(set-tree-sitter! 'lua-mode 'lua-ts-mode
'((lua :url "https://github.com/tree-sitter-grammars/tree-sitter-lua"
:commit "db16e76558122e834ee214c8dc755b4a3edc82a9")))
:config
(+lua-common-config 'lua-ts-mode))

View File

@@ -126,9 +126,8 @@ capture, the end position, and the output buffer.")
:desc "GFM checkbox" "x" #'markdown-toggle-gfm-checkbox)))
(use-package! markdown-ts-mode
(use-package! markdown-ts-mode ; 31+ only
:when (modulep! +tree-sitter)
:when (fboundp 'markdown-ts-mode)
:defer t
:init
(set-tree-sitter! 'markdown-mode 'markdown-ts-mode '(markdown markdown-inline)))

View File

@@ -79,10 +79,17 @@
(use-package! php-ts-mode
:when (modulep! +tree-sitter)
:when (fboundp 'php-ts-mode) ; 30.1+ only
:defer t
:init
(set-tree-sitter! 'php-mode 'php-ts-mode '(php phpdoc))
(set-tree-sitter! 'php-mode 'php-ts-mode
'((php :url "https://github.com/tree-sitter/tree-sitter-php"
:rev "v0.23.11"
:commit "f7cf7348737d8cff1b13407a0bfedce02ee7b046"
:source-dir "php/src")
(phpdoc :url "https://github.com/claytonrcarter/tree-sitter-phpdoc"
:commit "03bb10330704b0b371b044e937d5cc7cd40b4999")
html css ; requires :lang (web +tree-sitter)
javascript jsdoc)) ; requires :lang (javascript +tree-sitter)
:config
(+php-common-config 'php-ts-mode))

View File

@@ -5,13 +5,15 @@
(modulep! :tools lsp))
"This module requires (:tools lsp)")
(assert! (or (not (modulep! +tree-sitter))
(modulep! :tools tree-sitter))
"This module requires (:tools tree-sitter)")
(assert! (or (not (modulep! +tree-sitter))
(fboundp 'php-ts-mode))
"Can't find `php-ts-mode'; Emacs 30.1+ is required")
(when (modulep! +tree-sitter)
(assert! (modulep! :tools tree-sitter)
"This module requires (:tools tree-sitter)")
(assert! (fboundp 'php-ts-mode)
"Can't find `php-ts-mode'; Emacs 30.1+ is required")
(unless (modulep! :lang javascript +tree-sitter)
(error! "(:lang (javascript +tree-sitter)) required, but not enabled"))
(unless (modulep! :lang web +tree-sitter)
(error! "(:lang (web +tree-sitter)) required, but not enabled")))
(unless (executable-find "php")
(warn! "Couldn't find php in your PATH"))

View File

@@ -20,7 +20,9 @@
python-indent-guess-indent-offset-verbose nil)
(when (modulep! +tree-sitter)
(set-tree-sitter! 'python-mode 'python-ts-mode 'python))
(set-tree-sitter! 'python-mode 'python-ts-mode
'((python :url "https://github.com/tree-sitter/tree-sitter-python"
:commit "bffb65a8cfe4e46290331dfef0dbf0ef3679de11"))))
:config
;; HACK: `python-base-mode' (and `python-ts-mode') don't exist on pre-29

View File

@@ -36,12 +36,13 @@
"{" #'ruby-toggle-block))
(use-package! ruby-ts-mode
(use-package! ruby-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'ruby-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'ruby-mode 'ruby-ts-mode 'ruby)
(set-tree-sitter! 'ruby-mode 'ruby-ts-mode
'((ruby :url "https://github.com/tree-sitter/tree-sitter-ruby"
:commit "71bd32fb7607035768799732addba884a37a6210")))
:config
(set-electric! 'ruby-ts-mode :words '("else" "end" "elsif"))
(set-repl-handler! 'ruby-ts-mode #'inf-ruby)

View File

@@ -33,12 +33,16 @@
(require 'rustic-mode nil t)))
(use-package! rust-ts-mode
(use-package! rust-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'rust-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'rust-mode 'rust-ts-mode 'rust)
(set-tree-sitter! 'rust-mode 'rust-ts-mode
`((rust :url "https://github.com/tree-sitter/tree-sitter-rust"
:commit ,(if (and (treesit-available-p)
(< (treesit-library-abi-version) 15))
"1f63b33efee17e833e0ea29266dd3d713e27e321"
"18b0515fca567f5a10aee9978c6d2640e878671a"))))
(add-to-list 'major-mode-remap-defaults '(rust-mode . rust-ts-mode) t))

View File

@@ -74,9 +74,11 @@ If set to `nil', disable all the above behaviors.")
:append #'lsp!))
(use-package! css-ts-mode
(use-package! css-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'css-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'css-mode 'css-ts-mode 'css))
(set-tree-sitter! 'css-mode 'css-ts-mode
'((css :url "https://github.com/tree-sitter/tree-sitter-css"
:rev "v0.23.0"
:commit "6a442a3cf461b0ce275339e5afa178693484c927"))))

View File

@@ -168,17 +168,18 @@
:append #'lsp!))
(use-package! html-ts-mode
(use-package! html-ts-mode ; 30.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'html-ts-mode) ; 30.1+ only
:defer t
:init
(set-tree-sitter! 'html-mode 'html-ts-mode 'html))
(set-tree-sitter! 'html-mode 'html-ts-mode
'((html :url "https://github.com/tree-sitter/tree-sitter-html"
:rev "v0.23.0"
:commit "6a442a3cf461b0ce275339e5afa178693484c927"))))
(use-package! mhtml-ts-mode
(use-package! mhtml-ts-mode ; 31+ only
:when (modulep! +tree-sitter)
:when (fboundp 'mhtml-ts-mode) ; 31+ only
:defer t
:init
(set-tree-sitter! 'mhtml-mode 'mhtml-ts-mode 'html))

View File

@@ -8,11 +8,13 @@
(setq-hook! 'yaml-mode-hook tab-width yaml-indent-offset))
(use-package! yaml-ts-mode
(use-package! yaml-ts-mode ; 29.1+ only
:when (modulep! +tree-sitter)
:when (fboundp 'yaml-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'yaml-mode 'yaml-ts-mode 'yaml)
(set-tree-sitter! 'yaml-mode 'yaml-ts-mode
'((yaml :url "https://github.com/tree-sitter-grammars/tree-sitter-yaml"
:commit "b733d3f5f5005890f324333dd57e1f0badec5c87")))
:config
(when (modulep! +lsp)
(add-hook 'yaml-ts-mode-local-vars-hook #'lsp! 'append)))

View File

@@ -10,7 +10,8 @@
(use-package! dockerfile-ts-mode
:when (modulep! +tree-sitter)
:when (fboundp 'dockerfile-ts-mode) ; 29.1+ only
:defer t
:init
(set-tree-sitter! 'dockerfile-mode 'dockerfile-ts-mode 'dockerfile))
(set-tree-sitter! 'dockerfile-mode 'dockerfile-ts-mode
'((dockerfile :url "https://github.com/camdencheek/tree-sitter-dockerfile"
:commit "087daa20438a6cc01fa5e6fe6906d77c869d19fe"))))

View File

@@ -45,7 +45,7 @@
(if-let* ((ts (get mode '+tree-sitter))
(fallback-mode (car ts)))
(cond ((not (fboundp mode))
(message "Couldn't find %S, falling back to %S" mode fallback-mode)
(message "Couldn't find `%S', falling back to `%S'" mode fallback-mode)
fallback-mode)
((and (or (eq treesit-enabled-modes t)
(memq fallback-mode treesit-enabled-modes))