diff --git a/modules/lang/julia/README.org b/modules/lang/julia/README.org index 97f8094b6..fc46fe04f 100644 --- a/modules/lang/julia/README.org +++ b/modules/lang/julia/README.org @@ -15,11 +15,11 @@ This module adds support for [[https://julialang.org/][the Julia language]] to D ** Module flags - +lsp :: - Enable LSP support for ~julia-mode~. Requires [[doom-module::tools lsp]] and a langserver - (supports LanguageServer.jl). + Enable LSP support for ~julia-mode~. Requires [[doom-module::tools lsp]] and a + langserver (supports LanguageServer.jl). - +tree-sitter :: Leverages tree-sitter for better syntax highlighting and structural text - editing. Requires [[doom-module::tools tree-sitter]]. + editing. Requires Emacs >=29 and [[doom-module::tools tree-sitter]]. - +snail :: Use Snail, a development environment and REPL interaction package for Julia in the spirit of Common Lisp’s SLIME and Clojure’s CIDER. It enables convenient diff --git a/modules/lang/julia/config.el b/modules/lang/julia/config.el index 462b42b10..5e944741f 100644 --- a/modules/lang/julia/config.el +++ b/modules/lang/julia/config.el @@ -4,14 +4,11 @@ :interpreter "julia" :config (unless (modulep! +snail) - (set-repl-handler! 'julia-mode #'+julia/open-repl)) + (set-repl-handler! '(julia-mode julia-ts-mode) #'+julia/open-repl)) (when (modulep! +lsp) (add-hook 'julia-mode-local-vars-hook #'lsp! 'append)) - (when (modulep! +tree-sitter) - (add-hook 'julia-mode-local-vars-hook #'tree-sitter! 'append)) - ;; Borrow matlab.el's fontification of math operators. From ;; (dolist (mode '(julia-mode ess-julia-mode)) @@ -47,9 +44,22 @@ 1 font-lock-type-face))))) +(use-package! julia-ts-mode + :when (modulep! +tree-sitter) + :defer t + :init + (set-tree-sitter! 'julia-mode 'julia-ts-mode + '((julia :url "https://github.com/tree-sitter/tree-sitter-julia" + :rev "v0.23.1"))) + :config + (when (modulep! +lsp) + (add-hook 'julia-ts-mode-local-vars-hook #'lsp! 'append))) + + (use-package! julia-repl :preface (defvar +julia-repl-start-hook nil) :hook (julia-mode . julia-repl-mode) + :hook (julia-ts-mode . julia-repl-mode) :hook (+julia-repl-start . +julia-override-repl-escape-char-h) :hook (+julia-repl-start . julia-repl-use-emacsclient) :config @@ -95,7 +105,8 @@ :after eglot :init ;; Prevent timeout while installing LanguageServer.jl - (setq-hook! 'julia-mode-hook eglot-connect-timeout (max eglot-connect-timeout 60)) + (setq-hook! '(julia-mode-hook julia-ts-mode-hook) + eglot-connect-timeout (max eglot-connect-timeout 60)) :config (eglot-jl-init)) @@ -103,6 +114,7 @@ :when (modulep! +snail) :when (modulep! :term vterm) :hook (julia-mode . julia-snail-mode) + :hook (julia-ts-mode . julia-snail-mode) :config (set-popup-rule! "^\\*julia.*\\*$" :ttl nil :select nil :quit nil) diff --git a/modules/lang/julia/packages.el b/modules/lang/julia/packages.el index 6d45f02e5..c35b03300 100644 --- a/modules/lang/julia/packages.el +++ b/modules/lang/julia/packages.el @@ -4,6 +4,9 @@ (package! julia-mode :pin "5c940c4ba357d8361534f11169f3d40b2d7833fc") (package! julia-repl :pin "317d56021889a336b4be241604ba71e46dc80581") +(when (modulep! +tree-sitter) + (package! julia-ts-mode :pin "d693c6b35d3aed986b2700a3b5f910de12d6c53c")) + (when (modulep! +lsp) (if (modulep! :tools lsp +eglot) (package! eglot-jl :pin "7c968cc61fb64016ebe6dc8ff83fd05923db4374") diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 95a12690c..55197da50 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -38,7 +38,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) - (julia "https://github.com/tree-sitter/tree-sitter-julia" 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)