dape 配置分享及求教

使用习惯之后也希望能够将本职工作迁移进来,并不喜欢 lsp-mode 和 lsp-java,依赖太多。

最近终于用上了 dape,Java 的 dape 设置需要在 jdtls 中设置。因此分享的是 eglot 的配置。

(defun jdtls-command-contact (&optional interactive)
  (let* ((jdtls-cache-dir (file-name-concat user-emacs-directory "cache" "lsp-cache"))
         (project-dir (file-name-nondirectory (directory-file-name (project-root (project-current)))))
         (data-dir (expand-file-name (file-name-concat jdtls-cache-dir (md5 project-dir))))
         ;; lombok 版本不能过低,会导致 dape 启动 lombok 不能加载。
         (jvm-args `(,(concat "-javaagent:" (expand-file-name "~/.m2/repository/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar"))
                     "-Xmx8G"
                     ;; "-XX:+UseG1GC"
                     "-XX:+UseZGC"
                     "-XX:+UseStringDeduplication"
                     ;; "-XX:FreqInlineSize=325"
                     ;; "-XX:MaxInlineLevel=9"
                     "-XX:+UseCompressedOops"))
         (jvm-args (mapcar (lambda (arg) (concat "--jvm-arg=" arg)) jvm-args))
         ;; tell jdtls the data directory and jvm args
         (contact (append '("jdtls")
                          jvm-args
                          `("-data" ,data-dir)
                          `(:initializationOptions
                            (:bundles
                             [,(file-truename "~/.m2/repository/com/microsoft/java/com.microsoft.java.debug.plugin/0.53.0/com.microsoft.java.debug.plugin-0.53.0.jar")])))))
    contact))

(push '((java-mode java-ts-mode) . jdtls-command-contact) eglot-server-programs)

参考自 Can't get Eglot + JDTLS to work · joaotavora/eglot · Discussion #1185 · GitHub 其中几个需要注意的点,GitHub - microsoft/vscode-java-debug: Java Debugger for Visual Studio Code. 需要 jdk 大于等于 21,lombok 的版本需要大于等于 1.18.32,不然第一次启动的时候会导致加载不了 lombok。

另外 dape 默认使用的是内置的 project,切换项目启动 dape 并不会跟随项目修改 :filePath:mainClassand:projectName。需要 C-c C-k 清空只保留 jdtls 后强迫 dape 重新匹配三个值。

求教的点在于 js 和 python 两个的配置。

js debug 的时候遇到了两种错误,但是 npm run dev 都是可以正常启动的。

Could not read source map for chrome-error://chromewebdata/: Unexpected 503 response from chrome-error://chromewebdata/neterror.rollup.js.map: Unsupported protocol "chrome-error:"
Process exited with code 1
Uncaught Error Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/Users/luciuschen/IdeaProjects/RuoYi-Vue3/vite/plugins' is not supported resolving ES modules imported from /Users/luciuschen/IdeaProjects/RuoYi-Vue3/vite.config.js

python debug 的时候遇到了 Unable to locate "python",虚拟环境已激活。

2 个赞

python 的问题解决了,是因为虚拟环境需要在 emacs 再次激活,使用 pyvenv,也可以通过 .dir-locals.el 设置自动激活。

(setup pyvenv
  (:with-mode (python-mode python-ts-mode)
    (:require pyvenv)
    (:when-loaded
      (:option pyvenv-post-activate-hooks
               (list (lambda ()
                       (setq python-shell-interpreter (concat pyvenv-virtual-env "bin/python3")))))
      pyvenv-post-deactivate-hooks
      (list (lambda ()
              (setq python-shell-interpreter "python3"))))))

另外写了个脚本自动下载 js 和编译 java 的 adapter。

#!/bin/bash
# Use curl to get the JSON response for the latest release
# Use grep to find the line containing file URL
# Use cut and tr to extract the URL
# Use wget to download it
curl -s https://api.github.com/repos/microsoft/vscode-js-debug/releases/latest \
| grep "browser_download_url.*gz" \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -O latest-vscode-js-debug.tar.gz -qi -

mkdir -p ~/.emacs.d/debug-adapters
tar -xvzf latest-vscode-js-debug.tar.gz -C ~/.emacs.d/debug-adapters
rm latest-vscode-js-debug.tar.gz

cd ~/.emacs.d/debug-adapters
git clone https://github.com/microsoft/java-debug.git
cd java-debug
./mvnw clean install