diff --git a/CHANGELOG.develop b/CHANGELOG.develop index 9e8fe7c1d..5eb864321 100644 --- a/CHANGELOG.develop +++ b/CHANGELOG.develop @@ -3020,6 +3020,7 @@ Other: - Added scala-lsp and metals as an additional backend for scala (thanks to Rodolfo Hansen) - Disabled =sbt-supershell= in =sbt-mode= (thanks to Rodolfo Hansen) +- Enable new DAP and lsp-treemacs integration via metals (thanks to Rodolfo Hansen) **** Scheme - Added missing =parinfer= package declaration (thanks to Kalle Lindqvist) - Update install docs for Chicken 5 changes (thanks to Grant Shangreaux) diff --git a/layers/+lang/scala/README.org b/layers/+lang/scala/README.org index fcef45a93..07a06357f 100644 --- a/layers/+lang/scala/README.org +++ b/layers/+lang/scala/README.org @@ -17,9 +17,11 @@ - [[#usage][Usage]] - [[#scalastyle][Scalastyle]] - [[#use-java-doc-style][Use Java doc-style]] +- [[#enable-debug-adapter-protocol-dap][Enable Debug Adapter Protocol (DAP)]] - [[#automatically-show-the-type-of-the-symbol-under-the-cursor][Automatically show the type of the symbol under the cursor]] - [[#automatically-insert-asterisk-in-multiline-comments][Automatically insert asterisk in multiline comments]] - [[#automatically-replace-arrows-with-unicode-ones][Automatically replace arrows with unicode ones]] +- [[#enable-gtags-as-a-fallback-navigation-utility][Enable GTags as a fallback navigation utility]] - [[#auto-start][Auto-start]] - [[#key-bindings][Key bindings]] - [[#ensime][Ensime]] @@ -43,13 +45,16 @@ This layer adds support for the Scala language to Spacemacs. ** Features: - Syntax highlighting - Support for language backend. Either using [[https://ensime.github.io/][ENSIME]] or [[https://scalameta.org/metals/][Metals]] +- Debugging support via dap - Auto-completion +- Treeview support for viewing project structure and triggering compilation - Syntax-checking - Refactoring - Incremental compilation - Scala Repl - Style linting - Eldoc integration +- Optional GGTags search - Test execution directly from Emacs - Automatic replacement of ASCII arrows with unicode ones @@ -174,6 +179,9 @@ To enable =java-doc-style=, set the variable =scala-indent:use-javadoc-style= to (scala :variables scala-indent:use-javadoc-style t))) #+END_SRC +* Enable Debug Adapter Protocol (DAP) +The metals backend enables integration with the DAP layer for debugging support. + * Automatically show the type of the symbol under the cursor To enable the feature =ensime-type-at-point= when cursor moves, set the variable =scala-enable-eldoc= to =t=. @@ -207,6 +215,16 @@ the ascii arrows back. (scala :variables scala-use-unicode-arrows t))) #+END_SRC +* Enable GTags as a fallback navigation utility +To enable gtags when in scala-mode, in case metals, or, ensime are not fully +functioning set the variable =scala-enable-gtags= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-enable-gtags t))) +#+END_SRC + + * Auto-start If you prefer to have the backend start when you load a scala file, you can enable it with diff --git a/layers/+lang/scala/config.el b/layers/+lang/scala/config.el index e6d089ac7..0acf9a6cf 100644 --- a/layers/+lang/scala/config.el +++ b/layers/+lang/scala/config.el @@ -14,6 +14,9 @@ (defvar scala-enable-eldoc nil "If non nil then eldoc-mode is enabled in the scala layer.") +(defvar scala-enable-gtags nil + "If non nil then gtags is enabled in the scala layer.") + (defvar scala-auto-insert-asterisk-in-comments nil "If non-nil automatically insert leading asterisk in multi-line comments.") diff --git a/layers/+lang/scala/funcs.el b/layers/+lang/scala/funcs.el index b0f0170af..0a986a4e5 100644 --- a/layers/+lang/scala/funcs.el +++ b/layers/+lang/scala/funcs.el @@ -54,6 +54,16 @@ "Setup LSP metals for Scala." (add-hook 'scala-mode-hook #'lsp)) +(defun spacemacs//scala-setup-dap () + "Setup DAP in metals for Scala." + (when (spacemacs//scala-backend-metals-p) + (add-hook 'scala-mode-hook #'dap-mode))) + +(defun spacemacs//scala-setup-treeview () + "Setup lsp-treemacs for Scala." + (lsp-metals-treeview-enable t) + (setq lsp-metals-treeview-show-when-views-received t)) + (defun spacemacs//scala-disable-flycheck-scala () (push 'scala flycheck-disabled-checkers)) diff --git a/layers/+lang/scala/layers.el b/layers/+lang/scala/layers.el index 247bb58c1..925031af5 100644 --- a/layers/+lang/scala/layers.el +++ b/layers/+lang/scala/layers.el @@ -13,4 +13,4 @@ (when (and (boundp 'scala-backend) (eq scala-backend 'scala-metals)) - (configuration-layer/declare-layer-dependencies '(lsp))) + (configuration-layer/declare-layer-dependencies '(dap))) diff --git a/layers/+lang/scala/packages.el b/layers/+lang/scala/packages.el index c1faf7c3f..13d5651b4 100644 --- a/layers/+lang/scala/packages.el +++ b/layers/+lang/scala/packages.el @@ -11,14 +11,18 @@ (setq scala-packages '( - (ensime :toggle (spacemacs//scala-backend-ensime-p)) lsp-mode - ggtags + dap-mode + eldoc + flycheck + flyspell + lsp-treemacs counsel-gtags + ggtags helm-gtags - noflet - scala-mode + (ensime :toggle (spacemacs//scala-backend-ensime-p)) sbt-mode + scala-mode )) (defun scala/post-init-eldoc () @@ -161,18 +165,15 @@ (spacemacs/enable-flycheck 'scala-mode) ;; Don't use scala checker if ensime mode is active, since it provides ;; better error checking. - (when spacemacs//scala-backend-ensime-p + (when (spacemacs//scala-backend-ensime-p) (with-eval-after-load 'flycheck (add-hook 'ensime-mode-hook 'spacemacs//scala-disable-flycheck-scala)))) (defun scala/post-init-flyspell () (spell-checking/add-flyspell-hook 'scala-mode) - (when spacemacs//scala-backend-ensime-p + (when (spacemacs//scala-backend-ensime-p) (add-hook 'scala-mode-hook #'spacemacs//scala-setup-ensime-flyspell))) -(defun scala/init-noflet () - (use-package noflet)) - (defun scala/init-sbt-mode () (use-package sbt-mode :defer t @@ -268,15 +269,26 @@ If it's part of a left arrow (`<-'),replace it with the unicode arrow." scala-indent:default-run-on-strategy scala-indent:operator-strategy)))) +(defun scala/pre-init-dap-mode () + (add-to-list 'spacemacs--dap-supported-modes 'scala-mode) + (spacemacs//scala-setup-dap)) + (defun scala/post-init-lsp-mode () (when (spacemacs//scala-backend-metals-p) (spacemacs//scala-setup-metals))) +(defun scala/post-init-lsp-treemacs () + (when (spacemacs//scala-backend-metals-p) + (spacemacs//scala-setup-treeview))) + (defun scala/post-init-ggtags () - (add-hook 'scala-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + (when scala-enable-gtags + (add-hook 'scala-mode-local-vars-hook #'spacemacs/ggtags-mode-enable))) (defun scala/post-init-counsel-gtags () - (spacemacs/counsel-gtags-define-keys-for-mode 'scala-mode)) + (when scala-enable-gtags + (spacemacs/counsel-gtags-define-keys-for-mode 'scala-mode))) (defun scala/post-init-helm-gtags () - (spacemacs/helm-gtags-define-keys-for-mode 'scala-mode)) + (when scala-enable-gtags + (spacemacs/helm-gtags-define-keys-for-mode 'scala-mode)))