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๋ฅผ ์ธ์‹ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์ƒ๊ฐ์ธ์ง€ ์•„๋‹ˆ๋ฉด doom-emacs ' ์ž๋™ ์„œ์‹ ๋ž˜ํผ๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“  ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ •๋ณด

  • OS: gnu/linux(x86_64-pc-linux-gnu)
  • ์‰˜: /bin/bash
  • Emacs: 26.2(2019๋…„ 4์›” 12์ผ)
  • Doom: 2.0.9(HEAD -> ๊ฐœ๋ฐœ, _์—…๊ทธ๋ ˆ์ด๋“œ/๊ฐœ๋ฐœ 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 XDBE XIM MODULES TSLC2SYSTEM XWID
  • ์„ธ๋ถ€:
    ```์—˜๋ฆฌ์Šคํ”„
    ํ™˜๊ฒฝ ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ: nil
    ์—˜ํฌ ์ˆ˜: 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 (ํŒ์—… +๋ชจ๋‘ +๊ธฐ๋ณธ๊ฐ’) treemacs unicode vc-gutter vi-tilde-fringe ์ฐฝ ์„ ํƒ ์ž‘์—… ๊ณต๊ฐ„ :editor fold(ํฌ๋งท +onsave) ๋‹ค์ค‘ ์ปค์„œ ํšŒ์ „ ํ…์ŠคํŠธ ์Šค๋‹ˆํŽซ :emacs dired vc :tools ansible direnv docker editorconfig eval flycheck(lookup +docsets) lsp magit make pdf rgb terraform :lang ๋ฐ์ดํ„ฐ 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 ๊ธฐ๋ณธ๊ฐ’)
    ํŒจํ‚ค์ง€: (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)
    ์‹คํ–‰ ๊ฒฝ๋กœ: (./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๋ถ€ํ„ฐ format ๋ช…๋ น์€ LSP๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„๊ฐ€ ํฌ๋งท์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ).

์ด๊ฒƒ์€ ์ „์—ญ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(setq +format-with-lsp nil)

๋˜๋Š” ๋ชจ๋“œ๋ณ„๋กœ

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

์–ด์จŒ๋“  ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ๊ฒƒ์ด๋‹ค. ๊ด€์‹ฌ์„ ๊ฐ€์ ธ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰