控制 lsp-mode 的 codeAction 请求

lsp-mode 在光标移动的时候每移动一下就会触发一个 textDocument/codeAction 请求,相应的就会造成大量的这种无用请求,而像 VSCode 只会当光标在标记了错误提醒的地方才会触发一个 codeAction 请求,lsp-mode 有这种功能吗,大概翻了下代码没找到这个请求的触发的地方,不知道可不可以加上类似的判断?

1 个赞
(defadvice! +lsp-modeline--check-mode-actions (&rest _)
  :override #'lsp-modeline--check-code-actions
  (when (and (lsp-feature? "textDocument/codeAction")
         (flycheck-overlay-errors-at (point)))  ;; (> (length (lsp-cur-line-diagnostics)) 0) 或者按行来
    (lsp-request-async
     "textDocument/codeAction"
     (lsp--text-document-code-action-params)
     #'lsp--modeline-update-code-actions
     :mode 'unchanged
     :cancel-token :lsp-modeline-code-actions)))

找到了触发的地方,加了个当前位置是否有错误的判断,目前感觉可以满足需要,待用用看是不是有其他问题。

2 个赞

这个feature在modeline上没什么意义,直接disable最省资源了。楼上的workaround不够通用,如果用flymake就不行了。

是的,因为我没有用 lsp-ui,就只找到了是这个地方触发的 codeAction, 所以就这么处理了一下,用这个 (> (length (lsp-cur-line-diagnostics)) 0) 判断应该就通用了吧。

我是直接设置 lsp-modeline-code-actions-enable 为nil。

1 个赞

嗯,如果quickfix用不到是可以禁用,平时我也很少用这个,只是之前写了点 rust 感觉用它来拆分一下引用库和换行啥的还有点用

我是直接绑定lsp-ui-sideline-apply-code-actions 到快捷键 :grinning_face_with_smiling_eyes:

你这个是设置了 lsp-ui-sideline-show-code-actionst 了是吗?我试了下值为 nil 的时候,这个命令始终返回当前行没有可执行的codeAction ,我开启了之后,左侧会把所有的 quickfix 列出来,显的很乱,而且我不知道是不是那儿有问题,它会默认显示当前文件所有的 quickfix ,没有给我筛选出来属于当前行的。 而且,用 lsp-ui-sideline 又会出现每移动一下光标或行就会触发一下 codeAction 请求 :joy:

我是绑定的 lsp-execute-code-action ,和 lsp-ui-sideline-apply-code-actions 一样,不过都是需要我自己从一大堆的quickfix 里面挑出来执行。。。

只会执行当前行的action啊,如果没有就会显示这个消息。

我在vscode上对比了下,感觉不同的 client 的对触发 codeAction 的实现不太一样,rust-analyzer 就会一直触发codeAction,而 eslint 的就在有错误提示的时候才触发,而写前端开启 lsp-ui-sideline 不知道是谁的问题,那么多的提示就很影响了

嗯 ,是有点诡异。还是关了比较好,否则流畅度很受影响

lsp在我这就是跳转工具,解决了lsp卡手的致命问题(误

(setq lsp-enable-symbol-highlighting nil
      lsp-ui-doc-enable nil
      lsp-ui-doc-show-with-cursor nil
      lsp-ui-doc-show-with-mouse nil
      lsp-ui-sideline-enable nil
      lsp-ui-sideline-show-code-actions nil
      lsp-ui-sideline-enable nil
      lsp-ui-sideline-show-hover nil
      lsp-ui-sideline-enable nil
      lsp-ui-peek-always-show t
      lsp-lens-enable nil
      lsp-headerline-breadcrumb-enable nil
      lsp-modeline-code-actions-enable nil
      lsp-diagnostics-provider :none
      lsp-eldoc-enable-hover nil
      lsp-modeline-diagnostics-enable nil
      lsp-signature-auto-activate nil
      lsp-signature-render-documentation nil
      lsp-completion-provider :none
      lsp-completion-show-detail nil
      lsp-completion-show-kind nil
      lsp-enable-on-type-formatting nil
      lsp-enable-indentation nil
      lsp-disabled-clients '((c++-mode . clangd) (c-mode . clangd)))
1 个赞