BIBLIOGRAPHY
Tรกvora, Joรฃo. (2017) 2025. โJoaotavora/Eglot.โ https://github.com/joaotavora/eglot.
โEmacs-Lsp/Lsp-Mode.โ (2016) 2025. emacs-lsp. https://github.com/emacs-lsp/lsp-mode.
๋ ๊ฐ์ง ์ ํ์ง ๋ญ๋ ์ข๋ค. ์ค์ ์ํ๊ณ ์ฐ๋ฉด ์ข๋ค.
๋งํฌ
emacs-lsp/lsp-mode
(โEmacs-Lsp/Lsp-Modeโ [2016] 2025)
- Emacs client/library for the Language Server Protocol
joaotavora/eglot
(Tรกvora [2017] 2025)
- Tรกvora, Joรฃo
- A client for Language Server Protocol servers
์์ ๊ธฐ๋ก
์ ์ฆ์ Eglot ์ด์ ๊ธฐ๋ก๋ค
๋ง์ดํฌ ๊ต์์ ๋ฆฌ์ฐ๋ Eglot ์ ์ด๋ค. ๋๋ค ๊ฐ๋ค ์ฌํํ๊ฒ ๊ตฌ์ฑํ๊ณ ์ถ์ดํ๋ค๋ ์ง์ ์์. ๋นํธ์ธ ๊ธฐ๋ฅ์ ์ต์ฐ์ ์ผ๋ก ์ฌ์ฉํ๋๊ฒ ๋ ํด๋ก์ ์ฒ ํ๊ณผ ๋ง๋ค๊ณ ํ๋ค. ์ ๋๋ฒ์ ์ธ์ด๋ฅผ ์งํฅํ๋ค๋? ๋๋ค ํ๋ก์ ํธ ๊ด๋ฆฌ์์๋ Project.el ์ ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ๋ผ ๊ทธ๋ ์ง. ์๋ ๋งํฌ๊ฐ ์์ง๋ง ํ๋ ํฐ์ปฌ๋ฆฌ ๋ฌธ์์๋ ๊ฐ์ ์ฃผ์ ๋ฅผ ํ๋ก์ ํ์ผ LSP ๋ก ์ธํ ํ๋ค. ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. ์๋๋ ๋ณํ๊ณ ๋ณํ์ ๋ฅ๋์ ์ผ๋ก ๋ค๊ฐ์์๋๊ฒ ๋์ ์๊ฐ์ด๋ค.
Advise Eglot to Support Clojure Monorepo Setup ์ด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ฐ์ ๊ฐ๋ ์ ํ๋ ํฐ์ปฌ๋ฆฌ ๋ฌธ์์์ ๋ณด์์๋ค. Monorepo ๋ผ๊ณ ํ๋ค. ์ฌ๊ธฐ์๋ ํ๋ก์ ํ์ผ ์ ์ฌ์ฉํด์ ๋ชจ๋ ธ๋ฆฌํฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ์๋ ๋ฌธ์ ์ฐธ๊ณ . Monorepo / Nested projects ยท Clojure development with Spacemacs & Cider
๊ฐ์ฅ ํฐ ๋ฌธ์
clojure ๋ ์ด์ด๋ฅผ ๋ฃ์ผ๋ฉดโฆ backend ๋ก lsp / cider ๋ง ์ ํํ ์๊ฐ ์๋ค. lsp ๋ lsp-mode ๋ง์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด๊ณ eglot ์ ์๋๋ค. ํธํ์ด ์๋๋ค.
์์ ์คํ์ด์ค๋งฅ์ค clojure ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๊ณ ! ์๋์ผ๋ก ๋ค ์ก์์ผ ํ๋ค. ์๋ฌด๋ฆฌ eglot ๊ณผ project.el ์ด๋ผ๊ณ ํด๋ ์ด๊ฒ ๋ง๋ ๊ฒ์ธ๊ฐ?
- lsp 2) cider 3) eglot ๋ญ ์ด๋ ๊ฒ ๊ฐ๋จํ ๋ณผ ์ ์์ง๋งโฆ 3 ๋ฒ์ ์คํ์ด์ค๋งฅ์ค ๊ตฌ์กฐ์ ๋ฐ๋๋๋ ๊ตฌ์ฑ์ด๋ค.
๊ทธ๋์ ์์ ๊ฒฐ๋ก ! 22/10/06โ21:42 :: ํ๋ ํฐ์ปฌ๋ฆฌ ๊ตฌ์ฑ์ผ๋ก ๊ฐ์!
project.el ์ ์ ์ธํ๊ณ ํด๋ก์ ์ค์ ์ ์คํ์ด์ค๋งฅ์ค lsp ๋ก ๊ฐ๋ค. ๋ฐฐ์์ ์์ด์ ๊ธฐ๋ณธ์ ํ๊ณ (๊ธฐ๋ณธ์ด๋ผ ํจ์ ๋ฉ๋ด์ผ๋ ์๊ณ ํ์ต์ด ์ฉ์ดํ ๋์)
Cider ๋ ๋ฌผ๋ก ๊ธฐ๋ณธ์ด๊ณ corgi ๋ฅผ ์ ์ฌํ ๋ณด์๊ธฐ์โฆ ๊ทผ๋ ๊ฒฐ๊ตญ์ ์์ฐ๊ฒ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ํ๋ ค ๋ณด๋ด๊ธด ์๊น๋ค. ์๋ฌดํผ ํ๋ ํธ์ปฌ๋ฆฌ๋ฅผ ๋ณด๊ณ ๊ฐ์!
์๋ก์ด ์๊ฐ๊ณผ ๋์ Eglot ๊ฐ๋ฅํ๋ค! ๊ทธ๋ฆฌ๊ณ โฆ
22/10/07โ10:39 :: ๋ ์ค๋ฅธ ์๊ฐ์ ์ ์ eglot ๋ ์ด์ด๊ฐ clojure ๋ ์ด์ด๋ ๋ฌด์จ ์๊ด์ด์ง? ํด๋ก์ ธ๋ ๋๋ค clojure-lsp ์ฐ๋ ๊ฒ์ผ ๋ฟ์ธ๋ฐ? ์ด๋งฅ์ค์์ lsp ๋ ์ด์ด๋ฅผ ์ผ๋ฉด, ๋์ด ์ฐ๋์ด ๋๊ฒ ์ง?
clojure ๋ ์ด์ด์์ backend lsp ํ์ ๋ ๋ญํ๋์ง ๋ณด๊ณ , ํน์ lsp-mode ํจํค์ง์ ์์กด์ ์ธ ๋ด์ฉ์ ์ฒ๋ฆฌํ๊ณ eglot ์ผ๋ก lsp ๋ฅผ ์ฐ๋ํ๊ฒ ํด์ฃผ๋ฉด ์ง๊ธ ๋ ์ด์ด์์๋ ๊ฐ์ ํค ๋ฐ์ธ๋ฉ์ผ๋ก eglot ์ ์ง์ํ ์ ์๊ฒ ๋ค.
- ๊ด๊ฑด์ clojure layer ์ lsp layer ์ฌ์ด์ ์ค์ ์ด๋ค.
- lsp layer ์์ ๋ฌด์จ ์ค์ ์ ํ๋๊ฐ? eglot ๋ ์ด์ด๊ฐ ์๋ค๋ฉด ๋ญ ํด์ผ ํ๋๊ฐ?
- eglot ๋ ์ด์ด๋ฅผ ์ฐพ๊ณ , ๊ฑฐ๊ธฐ์ ์ค์ ์ ํ๋ค.
- clojure ๋ ์ด์ด์ eglot ์ต์ ์ ๋ง๋ค๊ณ , ํ์ฑํ ์ํจ๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด, backend ์ eglot ์ ํ๋ฉด ๋.
๋ ผ์์ด ์๋ค. lsp ๋ชจ๋๋ฅผ ์ ์ฐ์! ๋!
eglot ์ผ๋ก ๋ด๊ฐ ๋์์ ๋ง๋ค ์ ์๋ค. ๋ด๊ฐ ๋ฉ์ธํ ์ธํ ๊ฒ๋ ์๋๋ผ๋ฉด. ์ค๋๋ ฅ์ด ์๋ค.
Eglot ์ ์ด๋ ค์ ๋?
์์ ์ด์ ๊ธฐ๋ก์ ๋ณด๋ฉด ๋ญ ์์ธํ ์ฝ๊ณ ์ถ์ง ์์ง๋ง. ๊ฒฐ๊ตญ Spacemacs ์ ๋ ์ด์ด ๊ตฌ์ฑ์ด ๊ผฌ์ธ๋ค๋ ๊ฑฑ์ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ผญ ์ฌ๋ฌ๊ฐ์ง ์ค์ ์ ํด์ผ ํ๋ค๋ ์๊ฐ์ ํ๋๊น (ํค ๋ฐ์ธ๋ฉ) ์ด๋ ต๋ค. ๊ทธ๋ฆฌ๊ณ ํจ๊ป ์์์ผ ํ๋ ๋ด์ฉ๋ค์ด ์ฌ์ ํ ๋ง์์์๋ ์ ๋ชฐ๋ผ์ ๋ฒฝ์ด ๋์ ๋ณด์ผ ์ ์๋ค.
์๋ก์ด ์๋๋ ์์ฃผ ๊ฐ๋ณ๊ฒ ์ผ์ด๋ฌ๋ค. Company -> Corfu ๋ก ๋ณ๊ฒฝ์ ํ๋ฉด์ ์๊ฒ ๋ ํต์ฐฐ ๋๋ถ์ด๋ค. ๋ด์ฅ ํจํค์ง๋ฅผ ์ด์ฉํ๋ ์ต๊ทผ ํจํค์ง๋ค์ ์์กด์ฑ์ด ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ Spacemacs ์์ ๋ฌธ์ ๋๋ ๋ถ๋ถ๋ง ์ค์น ์ ํ ๋ค์ ์ค์นํ๊ณ ํต์ฌ ํค ๋ฐ์ธ๋ฉ ๋ช ๊ฐ๋ง ๋ฃ์ผ๋ฉด ๋๋ค. Flycheck, Flymake ๋ ๋ฌธ์ ๋ ๊ฒ์ด ์์๋ค. ๋ง์ด๋ ๋ชจ๋์์ ๋์ํ ๋ฟ์ธ๋ฐ ํด๋น ๋ฒํผ์์ ๋๋ฉด ๋๋ค. Eglot ์ Company ๋ ํ์๊ฐ ์๊ธฐ์ ๋์ฑ์ด ๊ทธ๋ ๋ค. ์ด๋ ๊ฒ ํ๊ณ ๋ณด๋ ๊ทธ๋๋ LSP ๊ฐ ํ์ํ๋๋ ๊ทผ๋ณธ์ ์ธ ์ง๋ฌธ์ด ๋์ค๊ธฐ ๋ง๋ จ์ด๋ค.
proselint-flymake, clj-kondo-flycheck ์ด๋ฐ ๋ฐฉ์์ ์ค๋ ๊ฐ ์๊ฐ ์๋ค. ๊ฐ๊ฐ efm-lang-server or megalint, clojure-lsp ๋ผ๋ ์๋ฒ๊ฐ ์์ง ์๋๊ฐ? ์์ ๊ฒ์ ๋ฒ์ฉ ์๋ฒ์ด๊ณ ๋ค์ ๊ฒ์ Clojure ์ ์ฉ ์๋ฒ์ผ ๋ฟ์ด๋ค. ์ ์ฉ ์๋ฒ๋ ํด๋น ์ธ์ด์ ๋ํ ๋ํ ์ผ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ค. ์ธํฐํ์ด์ค๋ ๋ฌผ๋ก ํ์คํ๊ฐ ๋์ด ์๊ธฐ์ Eglot ๊ฐ์ ๋จ์ผ ์ํธ๋ฆฌ ํจํค์ง๊ฐ ์์ ๊ฒ์ด๋ค. ๋ค์ ๋ฒ์ฉ ์๋ฒ๋ ๊ฐ๋ฐ ์ธ์ด ๋ฟ๋ง ์๋๋ผ ๋งํฌ ์ ์ผ๋ก ์์ฑ ๋ ๋ฌธ์ ํ ์คํธ๋ ์ปค๋ฒ ํ๋ค. ์๋ฌดํผ ์๋ฒ ๋ชจ๋ธ์ ๊ทธ๋ฅ ์ง๋ ์น ์๊ฐ ์๋ค. CIDER/Kondo/Refactor/Fommater ๋ฑ ๋๋์ด ์๋ ๊ธฐ๋ฅ๋ค์ด ์ผ๋ง๋ ๋ง์ด ํ์คํ ๋์ด ์ฒ๋ฆฌ๋๊ณ ์๋๊ฐ? ๊ทธ๊ฒ๋ ๋ณ๋์ ํ๋ก์ธ์ค์์ ์ฒ๋ฆฌ ๋๋ Emacs ๋ ๊ฐ์ฌํด์ผ ํ ๋ฟ์ด๋ค. ์ด๋งฅ์ค๋ ์ฑ๊ธ ์ค๋ ๋๋๊น.
- 2023-01-27
lsp-mode features with clojure
-
lsp-mode with clojure lsp-mode/clojure-guide.md at master ยท emacs-lsp/lsp-mode ยท GitHub
Clojure ์์ ๋ฅผ ๋ง์ฃผํ๊ธฐ ์ํด์๋ ์์ ํ์ด์ง๋ฅผ ์ฃผ๋ชฉํด์ผ ํ๋ค. ์๋ ๊ธฐ๋ฅ๋ค์ ์ญ ์ดํด ๋ณด๋ฉด์ <-> Eglot ๊ณผ 1:1 ๋งคํ์ ํด๋ณธ๋ค. ์๋๋ ๊ฒ๋ค์ ๋ง๊ณ ๋๋ ๊ธฐ๋ฅ๋ค์ ๋ณธ๋ค. ๋ค ํ์ํ ๊ฒ๋ ์๋๋ค.
-
lsp-mode features
- Syntax check clj-kondo + flycheck ์ฐ๋ ๋๋ค.
- Find definition/references
lsp-ui
ํจํค์ง์ ์ฐ๋๋๋๊ตฌ๋. - Completion nil ์ ํ๋ฉด cider completion ์ ์ฌ์ฉํ๋ค. ์ ๊ทธ๋ฆฌ๊ณ lsp-mode ๋ ๊ธฐ๋ณธ์ผ๋ก company-mode ๋ฅผ ํ์ฉํ๋ค.
- Code actions
- Hover โ conflict with CIDER
- Code lens lsp-lens-enable ์ค์ ํ๋ฉด 1 references ์ด๋ฐ ์ ๋ณด ๋ฌ๋ค.
- Call hierarchy lsp-treemacs ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์ด๊ฑฐ ์ด๊ธ๋์ด ๋๊ฒ ๋?
- Formatting cljfmt ๋ฅผ ์ด์ฉํ๋ค.
- Refactoring โ conflict with clj-refactor
Eglot features
Diagnostics โ Syntax check
์ง๋จ ์ ๋ณด๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์ Flymake ๋ฅผ ์ด์ฉํด์ annotate / underline ์ผ๋ก ํ๊ธฐํ๋ค. ์ด ์ ๋ณด๋ ElDoc ์์คํ
๊ณผ ๊ณต์ ๋์ด eldoc / eldoc-doc-buffer ์์ ํด๋น ๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธ ํ ์ ์๋ค. C-h .
์ผ๋ก ๋ฐ์ธ๋ฉ ๋์ด ์๋ค.
Eglot ์ Flymake ๊ณผ ์ฐ๋๋๊ธฐ์ ์ต์ง๋ก Flycheck ๋ฅผ ๋ฐ์ด ๋ฃ์ ํ์๊ฐ ์๋ค. ์ด์ ๋ํด, flymake-mode ๋ฅผ ๋ฏธ๋ฆฌ ์คํ ํ ํ์๋ ์๋ค. ์๋์ผ๋ก ์ผ์ค๋ค. ์ ํํ ๋งํ๋ฉด ์๋ ๋ ์์ ๋๊ณ ์ ๋ง์ ๋ง๊ฒ ์ค์ ํด์ ์ผ์ค๋ค.
- eldoc-doc-buffer ;; eglot-mode-map <normal-state> K ;; eglot-mode-map C-h .
eldoc ์์คํ ๊ณผ ์ฐ๋๋์ด ๋์ํ๋ค๋ ๋ง์ด ๋ฌด์์ธ๊ฐ? CIDER ๊ฐ ํ์ํ๊ฐ?
;; echo ์ ์ ๋ณด๊ฐ ๋ณด์ธ๋ค. ์ ์๋ง,
(defn foo [a b]
(+ a b))
Find definition/references
Rename
Find definition โ xref-find-definitions M-.
Find references โ xref-find-references M.?
Completion
์ปดํจ๋ ๋๋ Corfu ์์ ๋์ด ํ ์๋ ์์ง๋ง, ์ด๊ธ๋์ completion-at-point ๋ด์ฅ ํจ์์ ์ฐ๋๋๋๋ก ์ด๋ฏธ ๊ฐ์ถฐ์ ธ ์๋ค. ํด๋น ๋ฐ์ธ๋ฉ์ C-M-i
ํ๋ฉด์ ํ๊ธฐ ๋๋ ๋ฐฉ๋ฒ๊ณผ ๋์ด ๋๋ ๋ฆฌ์คํธ๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๊ถ๊ธํ๋ค.
Snippet completion
ํด๋น ์๋ฒ์์ ์ค๋ํซ ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๋ฉด ์ฐ๋์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์ด๊ฒ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์๋๊ฐ? ๋๋ถ์ด yasnippet ๋ ์ง์ํ๋ค. ์์ ์์ฑ์์ ๋ค๋ฃฌ ๋ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด์ฅ ๊ธฐ๋ฅ ๋๋ ์๋ ์์ฑ ํจํค์ง์ ์ฐ๋ํ๋ฉด ๋๋ค.
Code Actions
์๋ฒ๊ฐ ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ง์ฐ์ค๊ฐ ์ผ๋ถ ์ฌ์ฉ๋๋๋ฐ ์์ ๊ฐ Clojure ์์ผ๋ฉด ์ข๊ฒ ๋ค. ์ด๋ ์๋? ์๋ค. ์ผ๋จ Clojure-lsp ํํ์ด์ง์ lsp-mode ํํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค. ์ฝ๋ ๋ธ๋ก์ด ์์ผ๋๊น ํด๋น ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์ด๊ธ๋์์ ํด๋ณด๋ฉด ๋๋ค.
Hover on symbol with function signature
ElDoc ์ ์ด์ฉํ๋ค. ๊ด๋ จ ์ค์ ์ด ํ์ํ๊ฐ?
Code lens (?) โ X ๊ฐ๋จํ์ง ์์ ๋ฏ
Call hierarchy (?)
Formatting (?)
Refactoring (?)
lsp-mode.el โ User-visible differences:
Single entry point โ ๊ฐ์ฅ ๋๋๋ฌ์ง ์ฐจ์ด๋ eglot-<language>์ ๊ฐ์ ํจํค์ง๊ฐ ์๋ค๋ ์ ์ด๋ค. ์ํธ๋ฆฌ
ํฌ์ธํธ๋ M-x eglot ์ผ ๋ฟ์ด๋ค.
project.el
โ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด์ฅ ๊ธฐ๋ฅ์ธ project.el ๊ณผ ์ฐ๋ํ์ฌ ํ๋ก์ ํธ์
๋ํ ์ ๋ณด๋ฅผ ์ป๋๋ค. ๋ณ๋๋ก ํด๋น ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ํ์ผ์ ๋์ง ์๋๋ค. projectile ๊ณผ ๋๋น๋๋ ๋ถ๋ถ์ด๋ค. ์์ฐ์ค๋ ๋ด์ฅ ๊ธฐ๋ฅ์ ์ง์คํ๊ฒ ๋๋ค.
Flymake โ Diagnostics work out-of-the-box ๋ผ๊ณ ์๊ฐ๋ฅผ ํ๋ ๋ฐ Flycheck ๊ฐ
ํ์ ์๋ค๋ ๋ง์ด๋ค. ์ด ๋ํ ๋ด์ฅ ๊ธฐ๋ฅ์ด๋ค.
Only Emacs โ Emacs ๋ง ์์ผ๋ฉด ๋๋ค. ๋ค๋ฅธ ํจํค์ง๊ฐ ํ์๊ฐ ์๋ค. ํ๋ฌผ๋ฉฐ
Company ๋ ํ์ ์๋ค. ์์ ๋งํ ๋ฐ, ๋ด์ฅ completion-at-point ํจ์์ ์ฐ๋๋๊ธฐ ๋๋ฌธ์ด๋ค.
Nothing to configure and minimalist approach โ ํน์ ์ธ์ด๋ฅผ ์ํด ์ค์ ํ ๊ฒ์ด
์๋ค. ์ฑ๋ฅ์ ์ง์คํ ๋จ์ํ๊ณ ๊ฐ๋ฒผ์ด ๊ตฌ์กฐ.
โEglot is considerably less code and hassle than lsp-mode.el. In most cases, thereโs nothing to configure. Itโs a minimalist approach focused on user experience and performance.โ
(?) ๊ธฐ๋ฅ์ ๋ํด์
์ด ๋ง์ ๋ ์๋ฒ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ธ๋ฐ Eglot ์ด ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒ์ธ๊ฐ? ๊ทธ๋ ๋ค๋ฉด clojure-lsp ์ค์ ์ ์ผ๋ถ๋ lsp-mode ๋ ๋๊ณ eglot ์ ๋ชปํ๋ค๋ ๋ง์ธ๊ฐ? ์๋ฅผ ๋ค์ด formatting ์ค์ ์ด๋ผ๋ฉด ์ด๋ ํ๊ฐ?
์ผ! ๊ทธ๋ฅ ๋ค๋ฅธ ํจํค์ง๋ก ์ปค๋ฒํ๋ฉด ๋์์!๋ผ๊ณ ๋งํ๋ค๋ฉด ๊ทธ๋ฅ ๊ทธ๋ ๊ฒ ํ ์๋ ์๋ค. Server -> Eglot -> Packages ์ด๋ ๊ฒ ๋ผ๋ ๋์์ ํด์ผ ํ๋ค. ๊ทธ๋์ผ ์๋ฒ์ ์ค์ ํ ๊ทธ ๋ฌด์์ด๋ผ๋ ์๋ฏธ๊ฐ ์๋ค.
How to configuration
More performance we get!
์ฌ๊ธฐ์ ์ ๊ฐ๋ฐ์์ ์๊ฒฌ์ด ๊ต์ฅํ ์ข์ ๋ณด์ธ๋ค. ์ปดํจ๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ ํต์ ์ธ ํค ๋ฐ์ธ๋ฉ์ธ =C-M-i=๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ eglot-ensure ์ ์ฌ์ฉํ์ง ์๊ณ ํ๋ก์ ํธ๋ฅผ ์ด๋ฉด M-x eglot ์ ์คํํ๋ค. ์๋์ผ๋ก ํ ํ์ ์์ผ๋ฉฐ ํ๋ฒ ์ด๋ฉด ๊ณ์ ์์ ์ ํ๋๊น ๋ฒ๊ฑฐ๋กญ์ง๋ ์๋ค. Eglot ์ด ์๋ฒ์ ๋๋ฌด ๋ง์ ์์ฒญ์ ํ์ง ์๋๋ก ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค. LSP + Unsuitable Performance ยท Discussion #993 ยท joaotavora/eglot ยท GitHub
๊ทธ๋ฆฌ๊ณ (setq eldoc-area-prefer-doc-buffer t)์ผ๋ก ์ค์ ํ๋๋ฐ, eldoc-box ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฒํผ์์ ์ ๋ณด๋ฅผ ๋ณด๋ ๊ฒ์ ์ ํธํ๋ค. ๋ฌธ์ ๋ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์์ ํํ์ ๋ฐ๋ฅด๋ฉด sane with the Eldoc dance ๋ฅผ ๋ง๊ธฐ ์ํ ๊ฒ์ด๋ค. ๋ํ, flymake-goto-next-error/prev-error ๋ฅผ M-n, M-p ๋ก ์ฌ์ฉํ๋ค. ์ด๋ SLIME ์ ์ฌ์ฉํ ๋ ๋ถํฐ ์ต์ํ ๋ฐ์ธ๋ฉ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ด์ผ๊ธฐ๋ฅผ ๋ณด๋ฉด์ ์๊ฐ์ ์ ๋ฆฌํ๊ฒ ๋์๋ค. eldoc-box, eglot, corfu/Cape (manual), flymke ๊ธฐ๋ฐ์ ์๋ ์ค์ ์ ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ผ๋ก ์คํํ๋ค.
(setq eldoc-idle-delay 0.75)
(setq company-idle-delay 0.75)
(setq flymake-no-changes-timeout 0.5)
Advanced Topics
-
Practically clojure-lsp configuration ์กด์ ์ค์ ํ์ผ์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋ ์ค์ด๋ค. ์ด ์ค์ ํ์ผ์ ์ ๋๋ก ์ฝ๊ณ ์๋์ง ํ์ธํ๊ณ , ๋ฌด์จ ์ค์ ์ ํ๋์ง ์์์ผ ํ๋ค. ์๊ณ ์จ์ผ ํ๋ค.
-
Tree-sitter โ Emacs 29 ๋ด์ฅ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๋ค๋ ์๊ฒฌ์ด๋ค. js2-mode (JavaScript)์ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ tree-sitter ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฑ๋น๊ฐ ์ข๋ค๊ณ ํ๋ค.