Configure java +lsp test runner via dap-mode (#3049)

* Configure java +lsp test runner via dap-mode

This configures dap-mode appropriately so the user can run tests
directly from Doom. It adds two bindings as well which tries to mirror
other major modes:
* `SPC m t t` runs all the tests in the class at point.
* `SPC m t s` runs a single test method at point.

I also expanded the README with more details about configuring `+lsp`.

* Add +java/run-test, document +lsp/uninstall-server

* Add +java/debug-test

* Fix localleader bindings

When in `:init` they don't load in time on the initial Java buffer.
This commit is contained in:
James Ravn 2020-05-08 10:54:54 +01:00 committed by GitHub
parent e411367f4b
commit 79923809e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 7 deletions

View file

@ -4,10 +4,31 @@
(use-package! lsp-java
:after lsp-clients
:preface
(setq lsp-java-server-install-dir (concat doom-etc-dir "eclipse.jdt.ls/server/")
lsp-java-workspace-dir (concat doom-etc-dir "java-workspace")
lsp-jt-root (concat doom-etc-dir "eclipse.jdt.ls/server/java-test/server/"))
(setq lsp-java-workspace-dir (concat doom-etc-dir "java-workspace"))
(add-hook! java-mode-local-vars #'lsp!)
:config
;; TODO keybinds
)
(when (featurep! :tools debugger +lsp)
(defun +java/run-test ()
"Runs test at point. If in a method, runs the test method, otherwise runs the entire test class."
(interactive)
(condition-case nil
(dap-java-run-test-method)
(user-error (dap-java-run-test-class))))
(defun +java/debug-test ()
"Runs test at point in a debugger. If in a method, runs the test method, otherwise runs the entire test class."
(interactive)
(condition-case nil
(call-interactively #'dap-java-debug-test-method)
(user-error (call-interactively #'dap-java-debug-test-class))))
(map! :map java-mode-map
:localleader
(:prefix ("t" . "Test")
:desc "Run test class or method" "t" #'+java/run-test
:desc "Run all tests in class" "a" #'dap-java-run-test-class
:desc "Debug test class or method" "d" #'+java/debug-test
:desc "Debug all tests in class" "D" #'dap-java-debug-test-class)))
:init
(when (featurep! :tools debugger +lsp)
(setq lsp-jt-root (concat lsp-java-server-install-dir "java-test/server/")
dap-java-test-runner (concat lsp-java-server-install-dir "test-runner/junit-platform-console-standalone.jar"))))

View file

@ -13,10 +13,12 @@
- [[#oracle-jdk-11][Oracle JDK 11]]
- [[#ubuntu-1][Ubuntu]]
- [[#fedora-1][Fedora]]
- [[#multiple-java-versions][Multiple Java Versions]]
- [[#features][Features]]
- [[#lsp-features][=+lsp= features]]
- [[#meghanada-features][=+meghanada= features]]
- [[#configuration][Configuration]]
- [[#lsp][=+lsp=]]
* Description
This module adds [[https://www.java.com][java]] support to Doom Emacs, including =android-mode= and
@ -30,6 +32,9 @@ The =+lsp= and =+meghanada= packages are mutually exclusive and do not work
together. At the time of writing the =+meghanada= is already configured whereas
=+lsp= needs to manual configuring.
The =lsp= test runner requires that =:tools (debugger +lsp)= is enabled, as this
provides =dap-mode= which contains the Java test runner.
* Prerequisites
This module requires the Java SDK.
@ -72,6 +77,23 @@ source /etc/profile.d/jdk11.sh
java -version
#+END_SRC
** Multiple Java Versions
It is common to need support for multiple Java versions. You can use a generic
tool like [[https://github.com/shyiko/jabba][jabba]] to install and manage multiple Java versions on any OS.
To switch between Java versions in Doom, you can use [[https://github.com/direnv/direnv][direnv]] and the [[file:~/.emacs.d/modules/tools/direnv/README.org::+TITLE: tools/direnv][direnv module]]. To set a
Java version for a particular project, create a =.envrc= pointing to the Java
installation in the root of the project:
#+BEGIN_SRC conf-unix
PATH_add ~/.jabba/jdk/adopt@1.11.0-3
JAVA_HOME=~/.jabba/jdk/adopt@1.11.0-3
#+END_SRC
And then run =direnv allow .= in the project directory. If the =direnv= module
is enabled, then Doom will automatically source this environment before
executing the LSP server.
* Features
** =+lsp= features
According to [[https://github.com/emacs-lsp/lsp-java]] it adds
@ -111,4 +133,16 @@ According to [[https://github.com/mopemope/meghanada-emacs/]] it adds
+ Search references
+ Full-featured text search
* TODO Configuration
* Configuration
** =+lsp=
Install the eclipse server by executing =M-x lsp-install-server= and selecting
=jdtls=. After that any newly opened =java= files should start the LSP server
automatically.
To update the server, perform =SPC u M-x lsp-install-server=.
Note that if you change Java version you may need to remove the LSP server and
install it again. You can do this with =M-x +lsp/uninstall-server= followed by
=M-x lsp-install-server=.
Enable the =:tools (debugger +lsp)= module to get test runner support.