Doom-emacs: [ЗАПРОС] Используйте `format-all-the-code` только в том случае, если языковой сервер не поддерживает форматирование

Созданный на 8 авг. 2019  ·  3Комментарии  ·  Источник: hlissner/doom-emacs

Опишите функцию

Основная идея была представлена ​​в format-all-the-code в https://github.com/lassik/emacs-format-all-the-code/issues/47. Предполагается, что языковой сервер, вероятно, лучше знает, как отформатировать код, чем любой установленный по умолчанию в format-all-the-code . Предложение, процитированное оттуда, звучит так:

  1. Если lsp-mode не включен для текущего буфера, вернитесь к текущему поведению.
  2. В противном случае проверьте возможность textDocument/formatting текущего языкового сервера (или, возможно, серверов, поскольку это, по-видимому, поддерживаемый рабочий процесс). Если он недоступен, вернитесь к текущему поведению.
  3. В противном случае используйте textDocument/formatting (возможно, через lsp-format-buffer ) вместо предопределенного инструмента.

Неясно, лучше ли сделать format-all-the-things LSP-совместимым или расширить оболочку автоформатирования doom-emacs '. В любом случае я был бы счастлив получить эту функцию.

Системная информация

  • ОС: GNU / Linux (x86_64-pc-linux-gnu)
  • Оболочка: / bin / bash
  • Emacs: 26.2 (12 апреля 2019 г.)
  • Doom: 2.0.9 (ГОЛОВА -> разработка, _обновление / разработка f754d4ff 2019-07-23 18:23:17 +0200)
  • Графический дисплей: nil (демон: nil)
  • Системные функции: XPM JPEG TIFF GIF PNG RSVG IMAGICK SOUND GPM DBUS GSETTINGS GLIB NOTIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE THRESTY XADIM MODULES XDBE XADIM XADIM
  • Подробности:
    элисп
    env bootstrapper: ноль
    количество элк: 0
    uname -a: Linux 5.0.0-25-generic # 26 ~ 18.04.1-Ubuntu SMP Чт 1 августа 13:51:02 UTC 2019 x86_64
    модули: (: завершение компании (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 fold (format + onsave) несколько курсоров rotate-text snippets: emacs dired vc: tools ansible direnv docker editorconfig eval flycheck (lookup + 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 + привык + present + протокол) perl php plantuml (python + lsp) qt rest ruby ​​(sh + рыба) (web + lsp): запись приложения: конфигурация по умолчанию)
    пакеты: (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-путь: (./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 на correatter.el, чтобы облегчить более настраиваемый бэкэнд форматирования.

Однако у меня еще нет времени над этим работать, но я не забыл об этом.

Кроме того, @Kaali в # 2516 поднял это незнание LSP в режиме go. В настоящее время обходным путем для этого является отключение нашего средства форматирования, добавив go-mode к +format-on-save-enabled-modes (который по умолчанию является отрицательным списком, так как его первый элемент равен not ), затем добавьте lsp-format-buffer в локальный обработчик before-save-hook этого режима. например

(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 на correatter.el, чтобы облегчить более настраиваемый бэкэнд форматирования.

Однако у меня еще нет времени над этим работать, но я не забыл об этом.

Кроме того, @Kaali в # 2516 поднял это незнание LSP в режиме go. В настоящее время обходным путем для этого является отключение нашего средства форматирования, добавив go-mode к +format-on-save-enabled-modes (который по умолчанию является отрицательным списком, так как его первый элемент равен not ), затем добавьте lsp-format-buffer в локальный обработчик before-save-hook этого режима. например

(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 рейтинги