mirror of
https://github.com/doomemacs/doomemacs
synced 2025-08-01 12:17:25 -05:00
feat(clojure): add treesit support
This commit is contained in:
@ -27,7 +27,11 @@ This module adds support for the Clojure(Script) language.
|
|||||||
** Packages
|
** Packages
|
||||||
- [[doom-package:cider]]
|
- [[doom-package:cider]]
|
||||||
- [[doom-package:clj-refactor]]
|
- [[doom-package:clj-refactor]]
|
||||||
|
- [[doom-package:clojure-mode]]
|
||||||
|
- [[doom-package:clojure-ts-mode]] if [[doom-module:+tree-sitter]]
|
||||||
- [[doom-package:flycheck-clj-kondo]] if [[doom-module::checkers syntax]]
|
- [[doom-package:flycheck-clj-kondo]] if [[doom-module::checkers syntax]]
|
||||||
|
- [[doom-package:jet]]
|
||||||
|
- [[doom-package:neil]]
|
||||||
|
|
||||||
** Hacks
|
** Hacks
|
||||||
- Error messages emitted from CIDER are piped into the REPL buffer when it is
|
- Error messages emitted from CIDER are piped into the REPL buffer when it is
|
||||||
|
@ -46,17 +46,48 @@
|
|||||||
(add-to-list 'tree-sitter-major-mode-language-alist '(clojurescript-mode . clojure)))))
|
(add-to-list 'tree-sitter-major-mode-language-alist '(clojurescript-mode . clojure)))))
|
||||||
|
|
||||||
|
|
||||||
|
(use-package! clojure-ts-mode
|
||||||
|
:when (modulep! +tree-sitter)
|
||||||
|
:defer t
|
||||||
|
:init
|
||||||
|
(setq clojure-ts-auto-remap nil) ; we do it ourselves
|
||||||
|
(set-tree-sitter! 'clojure-mode 'clojure-ts-mode
|
||||||
|
'((clojure :url "https://github.com/sogaiu/tree-sitter-clojure")))
|
||||||
|
(set-tree-sitter! 'clojurec-mode 'clojure-ts-clojurec-mode 'clojure)
|
||||||
|
(set-tree-sitter! 'clojuredart-mode 'clojure-ts-clojuredart-mode 'clojure)
|
||||||
|
(set-tree-sitter! 'clojurescript-mode 'clojure-ts-clojurescript-mode 'javascript)
|
||||||
|
(set-tree-sitter! 'jank-mode 'clojure-ts-jank-mode 'cpp)
|
||||||
|
(set-tree-sitter! 'joker-mode 'clojure-ts-joker-mode 'clojure)
|
||||||
|
:config
|
||||||
|
;; HACK: Rely on `major-mode-remap-defaults' instead (upstream also doesn't
|
||||||
|
;; check if the grammars are ready before adding these entries, which will
|
||||||
|
;; bork clojure buffers.
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-mode auto-mode-alist)
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-clojurescript-mode auto-mode-alist)
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-clojurec-mode auto-mode-alist)
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-clojuredart-mode auto-mode-alist)
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-jank-mode auto-mode-alist)
|
||||||
|
(cl-callf2 rassq-delete-all 'clojure-ts-joker-mode auto-mode-alist))
|
||||||
|
|
||||||
|
|
||||||
;; `cider-mode' is used instead of the typical `cider' package due to the main
|
;; `cider-mode' is used instead of the typical `cider' package due to the main
|
||||||
;; library being loaded only when is absolutely needed, which is too late for
|
;; library being loaded only when is absolutely needed, which is too late for
|
||||||
;; reconfiguration in many cases.
|
;; reconfiguration in many cases.
|
||||||
(use-package! cider-mode
|
(use-package! cider-mode
|
||||||
;; NOTE if `org-directory' doesn't exist, `cider-jack' in won't work
|
;; NOTE if `org-directory' doesn't exist, `cider-jack' in won't work
|
||||||
:hook (clojure-mode-local-vars . cider-mode)
|
:hook (clojure-mode-local-vars . cider-mode)
|
||||||
|
:hook (clojure-ts-mode-local-vars . cider-mode)
|
||||||
:init
|
:init
|
||||||
(after! clojure-mode
|
(after! clojure-mode
|
||||||
(set-repl-handler! '(clojure-mode clojurec-mode) #'+clojure/open-repl :persist t)
|
(set-repl-handler! '(clojure-mode clojure-ts-mode
|
||||||
(set-repl-handler! 'clojurescript-mode #'+clojure/open-cljs-repl :persist t)
|
clojurec-mode clojure-ts-clojurec-mode)
|
||||||
(set-eval-handler! '(clojure-mode clojurescript-mode clojurec-mode) #'cider-eval-region))
|
#'+clojure/open-repl :persist t)
|
||||||
|
(set-repl-handler! '(clojurescript-mode clojure-ts-clojurescript-mode)
|
||||||
|
#'+clojure/open-cljs-repl :persist t)
|
||||||
|
(set-eval-handler! '(clojure-mode clojure-ts-mode
|
||||||
|
clojurescript-mode clojure-ts-clojurescript-mode
|
||||||
|
clojurec-mode clojure-ts-clojurec-mode)
|
||||||
|
#'cider-eval-region))
|
||||||
|
|
||||||
;; HACK Fix radian-software/radian#446: CIDER tries to calculate the frame's
|
;; HACK Fix radian-software/radian#446: CIDER tries to calculate the frame's
|
||||||
;; background too early; sometimes before the initial frame has been
|
;; background too early; sometimes before the initial frame has been
|
||||||
@ -285,6 +316,7 @@
|
|||||||
:when (or (modulep! -lsp)
|
:when (or (modulep! -lsp)
|
||||||
+clojure-load-clj-refactor-with-lsp)
|
+clojure-load-clj-refactor-with-lsp)
|
||||||
:hook (clojure-mode . clj-refactor-mode)
|
:hook (clojure-mode . clj-refactor-mode)
|
||||||
|
:hook (clojure-ts-mode . clj-refactor-mode)
|
||||||
:config
|
:config
|
||||||
(set-lookup-handlers! 'clj-refactor-mode
|
(set-lookup-handlers! 'clj-refactor-mode
|
||||||
:references #'cljr-find-usages)
|
:references #'cljr-find-usages)
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
;; -*- lexical-binding: t; no-byte-compile: t; -*-
|
;; -*- lexical-binding: t; no-byte-compile: t; -*-
|
||||||
;;; lang/clojure/doctor.el
|
;;; lang/clojure/doctor.el
|
||||||
|
|
||||||
|
(assert! (or (not (modulep! +tree-sitter))
|
||||||
|
(modulep! :tools tree-sitter))
|
||||||
|
"This module requires (:tools tree-sitter)")
|
||||||
|
|
||||||
(when (and (modulep! :checkers syntax)
|
(when (and (modulep! :checkers syntax)
|
||||||
(modulep! -lsp))
|
(modulep! -lsp))
|
||||||
(unless (executable-find "clj-kondo")
|
(unless (executable-find "clj-kondo")
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
;;; Core packages
|
;;; Core packages
|
||||||
(package! clojure-mode :pin "b766094aea28bdc7b44ce1960d96434fe7d1d9cf")
|
(package! clojure-mode :pin "b766094aea28bdc7b44ce1960d96434fe7d1d9cf")
|
||||||
|
(when (modulep! +tree-sitter)
|
||||||
|
(package! clojure-ts-mode :pin "da56a6938f525c8ead1fb3d79eced4d892df1661"))
|
||||||
(package! clj-refactor :pin "dc1bbc8cdaa723bdbb6669ea7d280625c370755d")
|
(package! clj-refactor :pin "dc1bbc8cdaa723bdbb6669ea7d280625c370755d")
|
||||||
(package! cider :pin "12f10a6f4b3052a9b437f92cf97d551a5964f4cb")
|
(package! cider :pin "12f10a6f4b3052a9b437f92cf97d551a5964f4cb")
|
||||||
(when (modulep! :checkers syntax -flymake)
|
(when (modulep! :checkers syntax -flymake)
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
(bibtex "https://github.com/latex-lsp/tree-sitter-bibtex" nil nil nil nil)
|
(bibtex "https://github.com/latex-lsp/tree-sitter-bibtex" nil nil nil nil)
|
||||||
(blueprint "https://github.com/huanie/tree-sitter-blueprint" nil nil nil nil)
|
(blueprint "https://github.com/huanie/tree-sitter-blueprint" nil nil nil nil)
|
||||||
(c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" nil nil nil nil)
|
(c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" nil nil nil nil)
|
||||||
(clojure "https://github.com/sogaiu/tree-sitter-clojure" nil nil nil nil)
|
|
||||||
(commonlisp "https://github.com/tree-sitter-grammars/tree-sitter-commonlisp" nil nil nil nil)
|
(commonlisp "https://github.com/tree-sitter-grammars/tree-sitter-commonlisp" nil nil nil nil)
|
||||||
(css "https://github.com/tree-sitter/tree-sitter-css" nil nil nil nil)
|
(css "https://github.com/tree-sitter/tree-sitter-css" nil nil nil nil)
|
||||||
(html "https://github.com/tree-sitter/tree-sitter-html" nil nil nil nil)
|
(html "https://github.com/tree-sitter/tree-sitter-html" nil nil nil nil)
|
||||||
|
Reference in New Issue
Block a user