From f5a1af4bf62be1070c66c797ce8cd423d667bdab Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 22 May 2025 19:50:04 +0200 Subject: [PATCH] feat(kotlin): add treesit support --- modules/lang/kotlin/README.org | 4 ++++ modules/lang/kotlin/config.el | 17 +++++++++++++++-- modules/lang/kotlin/packages.el | 4 ++++ modules/tools/tree-sitter/config.el | 1 - 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/lang/kotlin/README.org b/modules/lang/kotlin/README.org index af35162ab..878071c01 100644 --- a/modules/lang/kotlin/README.org +++ b/modules/lang/kotlin/README.org @@ -13,10 +13,14 @@ This module adds [[https://kotlinlang.org/][Kotlin]] support to Doom Emacs. - +lsp :: Enable LSP support for ~kotlin-mode~. Requires [[doom-module::tools lsp]] and a langserver (supports [[https://github.com/emacs-lsp/lsp-mode][kotlin-language-server]]). +- +tree-sitter :: + Leverages tree-sitter for better syntax highlighting and structural text + editing. Requires Emacs 29.1+ and [[doom-module::tools tree-sitter]]. ** Packages - [[doom-package:flycheck-kotlin]] if [[doom-module::checkers syntax]] - [[doom-package:kotlin-mode]] +- [[doom-package:kotlin-ts-mode]] ** Hacks /No hacks documented for this module./ diff --git a/modules/lang/kotlin/config.el b/modules/lang/kotlin/config.el index db22b89ac..06a6a34bb 100644 --- a/modules/lang/kotlin/config.el +++ b/modules/lang/kotlin/config.el @@ -1,11 +1,12 @@ ;;; lang/kotlin/config.el -*- lexical-binding: t; -*- (after! kotlin-mode - (when (modulep! +lsp) - (add-hook 'kotlin-mode-local-vars-hook #'lsp! 'append)) (set-docsets! 'kotlin-mode "Kotlin") (set-repl-handler! 'kotlin-mode #'kotlin-repl) + (when (modulep! +lsp) + (add-hook 'kotlin-mode-local-vars-hook #'lsp! 'append)) + (map! :map kotlin-mode-map :localleader :prefix ("b" . "build") @@ -17,3 +18,15 @@ (use-package! flycheck-kotlin :when (modulep! :checkers syntax -flymake) :hook (kotlin-mode . flycheck-kotlin-setup)) + + +(use-package! kotlin-ts-mode + :when (modulep! +tree-sitter) + :when (fboundp 'treesit-available-p) + :defer t + :init + (set-tree-sitter! 'kotlin-mode 'kotlin-ts-mode + '((kotlin :url "https://github.com/fwcd/tree-sitter-kotlin"))) + :config + (when (modulep! +lsp) + (add-hook 'kotlin-ts-mode-local-vars-hook #'lsp! 'append))) diff --git a/modules/lang/kotlin/packages.el b/modules/lang/kotlin/packages.el index 8d1c42bc0..849823a42 100644 --- a/modules/lang/kotlin/packages.el +++ b/modules/lang/kotlin/packages.el @@ -3,5 +3,9 @@ (package! kotlin-mode :pin "fddd747e5b4736e8b27a147960f369b86179ddff") +(when (and (modulep! +tree-sitter) + (fboundp 'treesit-available-p)) + (package! kotlin-ts-mode :pin "a25d56cecac9160ba7c140f982ec16ca7b2fe97f")) + (when (modulep! :checkers syntax -flymake) (package! flycheck-kotlin :pin "a2a6abb9a7f85c6fb15ce327459ec3c8ff780188")) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 2bd9cb31c..640005c81 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -32,7 +32,6 @@ (java "https://github.com/tree-sitter/tree-sitter-java" nil nil nil nil) (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src" nil nil) (json "https://github.com/tree-sitter/tree-sitter-json" nil nil nil nil) - (kotlin "https://github.com/fwcd/tree-sitter-kotlin" nil nil nil nil) (latex "https://github.com/latex-lsp/tree-sitter-latex" nil nil nil nil) (make "https://github.com/tree-sitter-grammars/tree-sitter-make" nil nil nil nil) (nix "https://github.com/nix-community/tree-sitter-nix" nil nil nil nil)