Emacs에서 LSP 활용하기
LSP란?
Language Server Protocol (LSP)은 언어 분석 등을 수행하는 Language Server와 각 툴(클라이언트)이 통신·제휴할 때의 프로토콜을 규정하는 것입니다.
종래, 코드 완성이나 정의 참조 등의 기능은 각 툴이 독자적으로, 한편 언어 마다 구현해 왔습니다만, 그것에는 상당한 노력이 필요했습니다. 그러나 LSP를 사용하면 각 도구는 Language Server가 어떤 언어를 사용하는지 의식하지 않고 완성 및 정의 참조를 수행 할 수 있습니다.
그래서 Emacs 유저에게 LSP(와 Language Server)는 「IDE like인 코드 완성, 정의 참조, 참조 검색 등을 제공해 주는 것」이라고 파악할 수 있을까 생각합니다.
참조 1 : What is the Language Server Protocol?
참고 자료 2 : Qiita/language server protocol에 대해(전편)
LSP 클라이언트 패키지
Emacs에서는 주로 두 개의 패키지가 LSP를 지원합니다.
(각 편집기의 지원 도구는 이 페이지 또는 여기 페이지)
lsp-mode
company-lsp 이나 lsp-ui , imenu , xref 등과 연계를 하여 IDE like 적인 기능을 제공하는 package 입니다. 꽤 다기능으로 UI에 대해서도 충실합니다. 이하, 원문.
lsp-mode aims to provide IDE-like experience by providing optional integration with the most popular Emacs packages like company, flycheck and projectile
eglot
lsp-mode
와는 다른 다른 package. xref-find-definitions
, flymake-mode
, eldoc-mode
, completion-at-point
등과 연계하여 정의 참조나 참조 검색을 실행시킵니다. lsp-mode
보다 훨씬 간단합니다. 이하, 원문.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 설정
eglot
에 주목해 설정 방법을 소개합니다. lsp-mode
에 대해서는 Qiita/좋아하는 에디터에 쾌적한 개발 환경을 제공하는 LSP 등이 참고가 된다고 생각합니다.또한 이번에는 Ruby의 LSP를 바탕으로 설명하지만 다른 언어에서도 Language Server의 도입 이외에는 특별히 차이가 없다고 생각합니다.
eglot
소개 (require 'eglot)
;; eglot を ON にする mode を指定
(add-hook 'ruby-mode-hook 'eglot-ensure)
Ruby의 경우 solargraph이 주류 인 것 같습니다.
(각 언어의 Language Server 대응표는 이 페이지)
$ gem install solargraph
이것을 설정하면 Ruby (Rails) Project에서 Mode Line에
eglot
가 표시됩니다.eglot 사용 예
코드 완료
변수가 Array Class이면
to_h
가 후보로 서제스트됩니다.한편, String Class 라면
to_h
는 후보에 나오지 않고, 대신에 to_i
등이 적절히 서제스트 됩니다.Go to Definition
eglot
는 xref-find-definitions
를 사용하여 변수의 정의 위치로 점프할 수 있습니다.그건 그렇고, smart-jump.el
(require 'smart-jump)
(smart-jump-setup-default-registers)
;; お好みでどうぞ
(define-key global-map [(super d)] 'smart-jump-go)
Find References
xref-find-definitions
를 사용하여 변수의 참조 부분을 찾을 수 있습니다.또한
xref-find-references
에서 기호 위치에 대한 자세한 설명을 볼 수 있습니다.dumb-jump.el
평상시는 을
eglot-help-at-point
대신에 사용하고 있습니다만, find-references
유효시에는 eglot
를 실행시키도록 하고 있습니다.(global-set-key (kbd "s-f") 'counsel-rg)
;; eglot-mode 時に有効にする
(define-key eglot-mode-map (kbd "s-f") 'xref-find-references)
마지막으로
Emacs with LSP, 꿈이 있네요.
참고 자료
Reference
이 문제에 관하여(Emacs에서 LSP 활용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/blue0513/items/acc962738c7f4da26656텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)