Doom-emacs: [REQUEST] Verwenden Sie `format-all-the-code` nur, wenn der Sprachserver keine Formatierung unterstützt

Erstellt am 8. Aug. 2019  ·  3Kommentare  ·  Quelle: hlissner/doom-emacs

Beschreiben Sie die Funktion

Die Grundidee wurde format-all-the-code in https://github.com/lassik/emacs-format-all-the-code/issues/47 vorgestellt. Die Annahme ist, dass ein Sprachserver wahrscheinlich eine bessere Idee hat, wie der Code formatiert wird, als jeder Standardsatz in format-all-the-code . Der dort zitierte Vorschlag sieht so aus:

  1. Wenn lsp-mode für den aktuellen Puffer nicht aktiviert ist, wird auf das aktuelle Verhalten zurückgegriffen.
  2. Überprüfen Sie andernfalls die textDocument/formatting Fähigkeit des aktuellen Sprachservers (oder möglicherweise Servers, da dies anscheinend ein unterstützter Workflow ist). Wenn es nicht verfügbar ist, greifen Sie auf das aktuelle Verhalten zurück.
  3. Andernfalls verwenden Sie textDocument/formatting (wahrscheinlich über lsp-format-buffer ) anstelle des vordefinierten Tools.

Es ist nicht klar, ob es eine bessere Idee ist, format-all-the-things LSP-fähig zu machen oder den Auto-Formatierungs-Wrapper von doom-emacs . Über die Funktion würde ich mich jedenfalls freuen.

System Information

  • Betriebssystem: gnu/linux (x86_64-pc-linux-gnu)
  • Shell: /bin/bash
  • Emacs: 26.2 (12.04.2019)
  • Doom: 2.0.9 (HEAD -> entwickeln, _upgrade/develop f754d4ff 2019-07-23 18:23:17 +020)
  • Grafikanzeige: nil (Daemon: nil)
  • Systemfunktionen: 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 XDBE XIM MODULES THREADS XWIDGETS2LIB
  • Einzelheiten:
    ```elisp
    env Bootstrapper: nil
    Stromzähler: 0
    uname -a: Linux 5.0.0-25-generic #26~18.04.1-Ubuntu SMP Do 1. August 13:51:02 UTC 2019 x86_64
    Module: (:Completion Company (Ivy +Fuzzy +Childframe) fold (format +onsave) multiple-cursors rotieren-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 +habit +present +protocol) perl php plantuml (python +lsp) qt rest ruby ​​(sh + fish) (web +lsp) :app write :config default)
    Pakete: (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-pfad: (./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

Hilfreichster Kommentar

Entschuldigung für die späte Antwort; Ich melde mich nur, um Sie wissen zu lassen, dass mir dieses Problem bekannt ist. Das :editor format Modul ist schmerzlich überfällig, um es LSP-fähig zu machen und möglicherweise format-all-the-code durch reformatter.el zu ersetzen, um ein anpassbareres Formatierungs-Backend zu ermöglichen.

Ich habe zwar noch keine Zeit, daran zu arbeiten, aber ich habe es nicht vergessen.

Außerdem hat @Kaali in #2516 diese LSP-Unwissenheit im Go-Modus go-mode zu +format-on-save-enabled-modes hinzugefügt wird (was standardmäßig eine negierte Liste ist, da das erste Element not ), dann fügen Sie lsp-format-buffer zum lokalen Vor-Speichern-Hook dieses Modus hinzu. z.B

(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))

Alle 3 Kommentare

Entschuldigung für die späte Antwort; Ich melde mich nur, um Sie wissen zu lassen, dass mir dieses Problem bekannt ist. Das :editor format Modul ist schmerzlich überfällig, um es LSP-fähig zu machen und möglicherweise format-all-the-code durch reformatter.el zu ersetzen, um ein anpassbareres Formatierungs-Backend zu ermöglichen.

Ich habe zwar noch keine Zeit, daran zu arbeiten, aber ich habe es nicht vergessen.

Außerdem hat @Kaali in #2516 diese LSP-Unwissenheit im Go-Modus go-mode zu +format-on-save-enabled-modes hinzugefügt wird (was standardmäßig eine negierte Liste ist, da das erste Element not ), dann fügen Sie lsp-format-buffer zum lokalen Vor-Speichern-Hook dieses Modus hinzu. z.B

(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 Danke für das Feedback! Bevor Sie format-all-the-code ersetzen, interessieren Sie vielleicht die neuesten Entwicklungen , die globale und pufferlokale konfigurierbare Formatierer einführen. Ansonsten: macht mir nichts aus, ich freue mich, wenn und wenn es fertig ist, aber mit Doom bin ich gerade auch ohne ganz zufrieden :)

Ab 7472cff unterstützen unsere Formatbefehle LSP (wenn der laufende Server die Formatierung unterstützt).

Dies kann global deaktiviert werden mit

(setq +format-with-lsp nil)

Oder pro Modus mit

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

Auf jeden Fall betrachte ich dies als gelöst. Danke, dass du mich darauf aufmerksam gemacht hast!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen