ITADN

Feature Request/Proposal: Customize `jdtls` Jar Location

#487Openrectangular-zone 创建于 2024-09-20
I've recently had cause to install `jdtls` myself, rather than using `lsp-mode`'s auto-install faculty. Unfortunately, this can get a little messy. The issue at hand is the function [`lsp-java--locate-server-jar`](https://github.com/emacs-lsp/lsp-java/blob/master/lsp-java.el#L559), and the directory layout of `jdtls` when it's installed by alternative tools. Specifically, `lsp-mode`'s installation creates a structure like this: ```shell # ~.emacs.d/.cache/lsp/eclipse.jdt.ls/ drwxr-xr-x@ - rdonaldson 19 Sep 16:03 bin drwxr-xr-x@ - rdonaldson 19 Sep 16:03 boot-server drwxr-xr-x@ - rdonaldson 19 Sep 16:03 bundles drwxr-xr-x@ - rdonaldson 19 Sep 16:15 config_linux drwxr-xr-x@ - rdonaldson 19 Sep 16:03 config_mac drwxr-xr-x@ - rdonaldson 19 Sep 16:03 config_ss_linux drwxr-xr-x@ - rdonaldson 19 Sep 16:03 config_ss_mac drwxr-xr-x@ - rdonaldson 19 Sep 16:03 config_ss_win drwxr-xr-x@ - rdonaldson 19 Sep 16:03 config_win drwxr-xr-x@ - rdonaldson 19 Sep 16:03 features drwxr-xr-x@ - rdonaldson 19 Sep 16:03 java-decompiler drwxr-xr-x@ - rdonaldson 19 Sep 16:03 java-test drwxr-xr-x@ - rdonaldson 19 Sep 16:03 plugins ``` Tools I'm using are creating layouts like so: ```shell ├── bin │ ├── jdtls │ └── jdtls.py └── share └── java └── jdtls ├── config_linux ├── features └── plugins ``` While this installation is valid, it breaks JAR detection, so LSP won't start -- even though it can find the "server command". I can see a couple very reasonable solutions here, and I'm happy to implement whichever solution y'all prefer. 1. Right now, jar location searches in `lsp-java-server-install-dir`; we could add a new `defcustom` for `lsp-java-server-jar-location` and check there _first_ if non-nil. 2. We could add a new `defcustom` for the path prefix of the JAR location within the install dir -- something like `(defcustom lsp-java-server-jar-subpath "plugins")`. 3. We could make a new `defcustom` for the JAR location function itself, setting the current function as the default implementation. Thanks so much for the excellent tools, y'all.
1 条评论