lsp-bridge -- 速度最快的语法补全插件

编译用 emacs 自带的 compile, 运行用 shell-command ,调试用 dap-mode

1 个赞

dap-mode 似乎是依赖于 lsp-mode 的,是不是会影响 lsp-bridge 的使用?

确实依赖 lsp-mode, 但是可以在不启动 lsp-mode 的情况下使用 dap-debug

3 个赞

不知道有没有用web-mode的小伙伴, 我这里补全时会有很高的几率吃掉一些字符,比如吃掉换行符,后面的行会跑上来, 常见于 script 内, 已经精减了emacs配置, 只留lsp-bridge, 依然能够重现.

Peek 2023-07-03 09-07

可以发一下最小稳定重现的压缩包吗?

lsp-brdige能和dap-mode配合调试吗?如果能,需要怎么安装和配置?

需要安装lsp-mode但又不启动 lsp-mode,这种方案丑陋又怪异

我不用dap-mode,不知道怎么弄

把 lsp-mode 当成 dap-mode 的依赖库就行了。

这种方式确实不太优雅,不过对我来说能用就行,没有时间去实现一个独立的 dap

我是直接开启了lsp-mode和lsp-bridge,然后禁用掉lsp-mode的补全等一些功能,这样就是内存可能用多了,然后有点怪,但是可以使用dap-mode。相关配置如下:

(use-package lsp-mode
  :init
  ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
  (setq lsp-keymap-prefix "C-c l")
  ;; (setq lsp-completion-enable nil)
  (setq lsp-headerline-breadcrumb-enable nil)
  (setq lsp-completion-provider :none)
  (setq lsp-modeline-diagnostics-enable nil)
  (setq lsp-modeline-code-actions-enable nil)
  (setq lsp-lens-enable nil)

  :hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
         (dart-mode . lsp)
         (haskell-mode . lsp)
         ;; if you want which-key integration
         (lsp-mode . lsp-enable-which-key-integration))
  :commands (lsp lsp-deferred))

;; Debug
(use-package dap-mode)
;; UI
(use-package lsp-ui :commands lsp-ui-mode)
1 个赞

大家可以说一下都用 dap-mode 的哪些功能? 还有都在哪些语言用 dap-mode ?

也许我下半年有空的时候可以用 lsp-bridge 类似的技术开发一个完全异步的调试框架。

以前之所以没有弄, 主要是公司的事情太多了, 下班修复 EAF lsp-bridge 的issue基本上把我业余时间全部占满了。 还有一个原因跟我自己的坏习惯有关, 我调试代码除非是崩溃的代码, 日常逻辑代码都用目测。 :sweat_smile:

2 个赞

其实 dap-mode 的效果和 emacs 的 gdb-many-windows 效果差不多,但是支持的语言远超 gdb。它可以为所有 dap 协议支持的语言提供一个统一的、美观的调试方法,能把调试信息可视化(省的再去敲命令了)

1 个赞

我平常写代码比看代码多,所以调试器用的少。

2 个赞

是我犯了个低级错误, 我机器上有两版web-mode, 以为加载的是新版, 实际加载的是, 14.*, 改为加载17.*后问题解决. 顺便赞一下大神的作品, 以前试过多种方案补全, 都放弃了, 只有 lsp-bridge 甚至造越了期望值!!!

1 个赞

我主要是用 DAP 跑 Rails 项目的某个单元测试,调试某个具体问题,这是我的 launch.json 以备参考:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec Function",
      "type": "Ruby",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "program": "${workspaceFolder}/bin/bundle",
      "args": ["exec", "rspec", "${relativeFile}:${lineNumber}"]
    },
    {
      "name": "Rails Server",
      "type": "Ruby",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "program": "${workspaceFolder}/bin/rails",
      "args": ["server"]
    }
  ]
}

还有个用途是在编辑器调试 Chrome Debug 模式打开的前端页面:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug",
      "type": "chrome",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "url": "http://localhost:5174",
      "webRoot": "${workspaceFolder}/src",
      "runtimeExecutable": "/home/xinyifly/.nix-profile/bin/google-chrome-stable",
      "runtimeArgs": ["--remote-debugging-port=9222"]
    }
  ]
}

需要注意的是,很多语言的 DAP 都需要对应语言安装一个相应的调试库,比如 Ruby 需要安装 ruby-debug-ide 这个 gem

神级程序员用目测

我主要在dart中使用断点,功能就是可以断点后查看各种属性的值。

今天使用 pyright-background-analysis, ruff 的多后端配置打开python文件时,发现 find-references 好像会生成两份相同的内容,而且还把定义放进去了? :thinking:

find_define.py 文件中返回的定义位置似乎少了一行?不知道大佬能否修复一下

注:不是lsp-bridge-find-def跳转的位置少了1行,而是类FindDefine中返回的start_pos的line值少了一行

发可以重现的文件吧