Doom-emacs: [REQUEST] 只有在语言服务器不支持格式时才使用 `format-all-the-code`

创建于 2019-08-08  ·  3评论  ·  资料来源: hlissner/doom-emacs

描述特征

基本思想已在https://github.com/lassik/emacs-format-all-the-code/issues/47 中引入format-all-the-code 假设是语言服务器可能比format-all-the-code任何默认设置更好地了解如何格式化代码。 从那里引用的提案是这样的:

  1. 如果当前缓冲区未启用lsp-mode ,则回退到当前行为。
  2. 否则,检查当前语言服务器(或者可能是服务器,因为这显然是受支持的工作流程)的textDocument/formatting功能。 如果它不可用,则回退到当前行为。
  3. 否则,使用textDocument/formatting (可能通过lsp-format-buffer )而不是预定义的工具。

目前尚不清楚使format-all-the-things LSP-aware 或扩展doom-emacs '自动格式化包装器是否更好。 无论哪种方式,我都会很高兴拥有该功能。

系统信息

  • 操作系统:gnu/linux (x86_64-pc-linux-gnu)
  • 外壳:/bin/bash
  • Emacs:26.2(2019 年 4 月 12 日)
  • 厄运:2.0.9(HEAD -> 开发,_upgrade/develop f754d4ff 2019-07-23 18:23:17 +0200)
  • 图形显示:nil(守护进程:nil)
  • 系统特性: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS GLIB NOTIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBECMS XIM XIM MODULES LIBXML2SYSTEM
  • 细节:
    ```省略号
    env 引导程序:无
    elc 计数:0
    uname -a:Linux 5.0.0-25-generic #26~18.04.1-Ubuntu SMP Thu Aug 1 13:51:02 UTC 2019 x86_64
    模块: (:completion company (ivy +fuzzy +childframe) :ui doom doom-dashboard hl-todo modeline nav-flash ophints (popup +all +defaults) treemacs unicode vc-gutter vi-tilde-fringe window-select workspaces :editor折叠(格式+onsave)多光标旋转文本片段:emacs dired vc:tools ansible direnv docker editorconfig eval flycheck(查找+docsets)lsp magit make pdf rgb terraform :lang data emacs-lisp(go +lsp)(haskell + intero) (java +lsp) (javascript +lsp) (kotlin +lsp) Latex markdown (org +attach +babel +capture +export +habit +present +protocol) perl php plantuml (python +lsp) qt rest ruby​​ (sh +鱼) (web +lsp) :app write :config default)
    包: (full-ack visual-regexp nginx-mode company-qml persistent-scratch gitlab-ci-mode gitlab-ci-mode-flycheck rpm-spec-mode kotlin-mode flycheck-kotlin puppet-mode prettier-js add-node -modules-path solaire-mode comment-dwim-2 ag lsp-python-ms glsl-mode)
    exec-path: (./node_modules/.bin ~/.npm-packages/bin/ ~/.local/bin/ /bin ~/go/bin ~/.npm-packages/bin ~/.cargo/bin/ ~ /.npm-packages/bin/ ~/.local/bin/ /bin ~/go/bin /bin ~/bin ~/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin / usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin ~/.dotnet/tools /usr/lib/maven3/bin ~/.fzf/bin /usr/lib/x86_64-linux- gnu/emacs/26.2/x86_64-linux-gnu)
:editor format :tools lsp new resolved

最有用的评论

回复晚了非常抱歉; 只是想告诉你我知道这个问题。 :editor format模块很早就应该重写了,这既是为了使其具有 LSP 感知能力,也可能将 format-all-the-code 替换为 reformatter.el 以促进更可定制的格式化后端。

然而,我还没有时间做这件事,但我并没有忘记它。

此外,#2516 中的@Kaali在 go-mode 中提出了这种 LSP- go-mode+format-on-save-enabled-modes (默认情况下这是一个否定列表,因为它的第一个元素是not )来禁用我们的格式化程序lsp-format-buffer到该模式的本地保存前挂钩。 例如

(add-to-list '+format-on-save-enabled-modes 'go-mode t)

(add-hook! 'go-mode-hook
  (add-hook 'before-save-hook #'lsp-format-buffer nil 'local)
  (add-hook 'before-save-hook #'lsp-organize-imports nil 'local))

所有3条评论

回复晚了非常抱歉; 只是想告诉你我知道这个问题。 :editor format模块很早就应该重写了,这既是为了使其具有 LSP 感知能力,也可能将 format-all-the-code 替换为 reformatter.el 以促进更可定制的格式化后端。

然而,我还没有时间做这件事,但我并没有忘记它。

此外,#2516 中的@Kaali在 go-mode 中提出了这种 LSP- go-mode+format-on-save-enabled-modes (默认情况下这是一个否定列表,因为它的第一个元素是not )来禁用我们的格式化程序lsp-format-buffer到该模式的本地保存前挂钩。 例如

(add-to-list '+format-on-save-enabled-modes 'go-mode t)

(add-hook! 'go-mode-hook
  (add-hook 'before-save-hook #'lsp-format-buffer nil 'local)
  (add-hook 'before-save-hook #'lsp-organize-imports nil 'local))

@hlissner感谢您的反馈! 在替换format-all-the-code ,您可能对最近的发展感兴趣,它引入了全局和缓冲区本地可配置格式化程序。 否则:别介意我,如果完成了我会很高兴的,但即使没有它,我现在也对 Doom 很满意:)

从 7472cff 开始,我们的格式化命令支持 LSP(如果正在运行的服务器支持格式化)。

这可以全局禁用

(setq +format-with-lsp nil)

或者在每个模式的基础上

(setq-hook! 'python-mode-hook +format-with-lsp nil)

无论如何,我会认为这已解决。 感谢您引起我的注意!

此页面是否有帮助?
0 / 5 - 0 等级