diff --git a/modules/lang/zig/README.org b/modules/lang/zig/README.org index 4a0e7aa70..41dad18d1 100644 --- a/modules/lang/zig/README.org +++ b/modules/lang/zig/README.org @@ -22,10 +22,11 @@ This module adds [[https://ziglang.org/][Zig]] support, with optional (but recom this. - +tree-sitter :: Leverages tree-sitter for better syntax highlighting and structural text - editing. Requires [[doom-module::tools tree-sitter]]. + editing. Requires Emacs 29.1+ and [[doom-module::tools tree-sitter]]. ** Packages - [[doom-package:zig-mode]] +- [[doom-package:zig-ts-mode]] if [[doom-module:+tree-sitter]] ** Hacks /No hacks documented for this module./ diff --git a/modules/lang/zig/config.el b/modules/lang/zig/config.el index 8bf21a29c..52adc3bf2 100644 --- a/modules/lang/zig/config.el +++ b/modules/lang/zig/config.el @@ -8,30 +8,46 @@ ;; ;;; Packages -(use-package! zig-mode - :hook (zig-mode . rainbow-delimiters-mode) - :config - (setq zig-format-on-save nil) ; rely on :editor format instead - +(defun +zig-common-config (mode) (when (modulep! +lsp) - (add-hook 'zig-mode-local-vars-hook #'lsp! 'append)) + (add-hook (intern (format "%s-local-vars-hook" mode)) #'lsp! 'append)) + (map! :localleader + :map ,(symbol-value (intern (format "%s-map" mode))) + "b" #'zig-compile + "f" #'zig-format-buffer + "r" #'zig-run + "t" #'zig-test-buffer)) - (when (modulep! +tree-sitter) - (add-hook 'zig-mode-local-vars-hook #'tree-sitter! 'append)) - (when (modulep! :checkers syntax -flymake) +(when (modulep! :checkers syntax -flymake) + (after! flycheck (eval '(flycheck-define-checker zig "A zig syntax checker using zig's `ast-check` command." :command ("zig" "ast-check" (eval (buffer-file-name))) :error-patterns ((error line-start (file-name) ":" line ":" column ": error: " (message) line-end)) - :modes zig-mode) + :modes (zig-mode zig-ts-mode)) t) - (add-to-list 'flycheck-checkers 'zig)) + (add-to-list 'flycheck-checkers 'zig))) - (map! :localleader - :map zig-mode-map - "b" #'zig-compile - "f" #'zig-format-buffer - "r" #'zig-run - "t" #'zig-test-buffer)) + +(use-package! zig-mode + :hook (zig-mode . rainbow-delimiters-mode) + :config + (setq zig-format-on-save nil) ; rely on :editor format instead + (+zig-common-config 'zig-mode)) + + +(use-package! zig-ts-mode + :when (modulep! +tree-sitter) + :when (fboundp 'zig-ts-mode) + :defer t + :init + (set-tree-sitter! 'zig-mode 'zig-ts-mode + '((zig :url "https://github.com/tree-sitter/zig-tree-sitter" + :rev "v0.25.0"))) + :config + ;; HACK: Rely on `major-mode-remap-defaults' + (cl-callf2 rassq-delete-all 'zig-ts-mode auto-mode-alist) + + (+zig-common-config 'zig-ts-mode)) diff --git a/modules/lang/zig/packages.el b/modules/lang/zig/packages.el index 0a86d0cf5..a37af95db 100644 --- a/modules/lang/zig/packages.el +++ b/modules/lang/zig/packages.el @@ -2,3 +2,7 @@ ;;; lang/zig/packages.el (package! zig-mode :pin "c46d024733b7c1d6af829bb610fc9629b060bc9e") + +(when (and (modulep! +tree-sitter) + (fboundp 'treesit-available-p)) + (package! zig-ts-mode :pin "3898b70d6f72da688e086323fa2922f1542d1318"))