LSP и DAP для Python, Golang, Rust и Typescript/Javascript.

Обзор

В предыдущей статье я разработал конфигурацию Emacs для начинающих. В этой статье продолжим настройку LSP (Language Server Protocol) и DAP (Debug Adapter Protocol). В частности, я сосредоточусь на языках Python, Golang, Rust и Typescript.



Emacs — конфигурация для начинающих
Обзорalpha2phi.medium.com



Установка языковых серверов

Я собираюсь использовать те же языковые серверы в своей предыдущей статье о настройке Neovim LSP с использованием Lua.

питон

Для Python установим pyright.

$ npm install -g pyright

Голанг

Для Golang установим gopls.

$ GO111MODULE=on go get golang.org/x/tools/gopls@latest

Ржавчина

Для Rust воспользуемся rust_analyzer. Самый простой способ установки — скачать бинарник, скопировать в папку и добавить папку в PATH окружения.

Машинопись

Для Typescript установим typescript-language-server.

$ npm install -g typescript-language-server
$ npm install -g typescript

lsp-режим и dap-режим

Я собираюсь использовать режим lsp и режим dap для Emacs.

Создайте файл с именем lang.el в папке elisp со следующим содержимым.

Помимо lsp-mode, в этом пакете я установил dap-mode, dap-node, dap-gdb-lldb и dap-go.

В init.el, требуется этот пакет.

(require 'lang)   ;; base extensions

Python LSP и DAP

Создайте файл с именем lang-python.el в папке elisp и запросите его у init.el.

dap-mode использует отладку. Убедитесь, что вы установили его.

# pip install debugpy

Перезапустите Emacs, и теперь LSP и DAP должны работать.

Golang LSP и DAP

Создайте файл с именем lang-go.el в папке elisp и запросите его у init.el.

dap-mode использует копаться. Убедитесь, что вы установили его.

$ go install github.com/go-delve/delve/cmd/dlv@latest

Перезапустите Emacs, и теперь LSP и DAP должны работать.

Убедитесь, что вы выбрали «Перейти к конфигурации неоптимизированного пакета отладки» в меню dap-debug.

Rust LSP и DAP

Создайте файл с именем lang-rust.el в папке elisp и запросите его у init.el.

dap-mode использует gdb или lldb. Убедитесь, что вы их установили.

Перезапустите Emacs, и теперь LSP и DAP должны работать.

Для отладки создайте шаблон запуска, выбрав dap-debug-edit-template.

Обратитесь к Документации по режиму DAP для более подробной информации.

Машинописный LSP и DAP

Создайте файл с именем lang-typescript.el в папке elisp и запросите его у init.el.

Перезапустите Emacs, и теперь LSP и DAP должны работать.

Для отладки создайте шаблон запуска, выбрав dap-debug-edit-template.

Образец шаблона, который я использовал.

(dap-register-debug-template
  "hello"
  (list :type "node"
        :cwd "/Users/alpha2phi/workspace/development/alpha2phi/python-apps/debugging"
        :request "launch"
        :program "/Users/apha2phi/workspace/development/alpha2phi/python-apps/debugging/hello.js"
        :name "hello"))

плющ-posframe

Лично я использую ivy-posframe для отображения меню в центре кадра.

В completion.el я добавил эти строки

(use-package ivy-posframe
  :config
  (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-center)))
  (ivy-posframe-mode 1))

Сопоставление клавиш с использованием general.el

Я также использую general.el для сопоставления некоторых общих функций с Space-XX.

In keymappings.el.

(use-package general
  :after evil
  :config
  (general-create-definer alpha2phi/leader-keys
    :keymaps '(normal insert visual emacs)
    :prefix "SPC"
    :global-prefix "C-SPC")
(alpha2phi/leader-keys
    "t"  '(:ignore t :which-key "theme")
    "tt" '(counsel-load-theme :which-key "choose theme")
    "p"  '(:ignore t :which-key "project")
    "pp" '(counsel-projectile-switch-project :which-key "choose project")
    "pc" '(projectile-command-map :which-key "choose action")
    "f"  '(:ignore t :which-key "find")
    "ff" '(counsel-fzf :which-key "fuzzy find")
    "fx" '(counsel-M-x :which-key "M-x")
    "g"  '(:ignore t :which-key "git")
    "gs" '(magit-status :which-key "git status")
    "d"  '(:ignore t :which-key "debug")
    "dd" '(dap-debug :which-key "start debugging")
    "dba" '(dap-breakpoint-add :which-key "add breakpoint")
    "dbd" '(dap-breakpoint-delete :which-key "delete breakpoint")
    "dr" '(dap-ui-repl :which-key "repl")
    "du" '(dap-ui-mode :which-key "ui")
    ))
(provide 'keymappings)

Это позволяет мне легко переключаться между разными проектами, используя снаряд (SPC-p-p), выполнять нечеткий поиск файлов (SPC-f-f) и отладку (SPC-d-d).

Резюме

Изучать и взламывать Emacs не так уж и просто, но это весело, когда вы заставите его работать так, как вы хотите.

Точечные файлы, которые я использовал, можно найти в этом репозитории.

Другие статьи, которые могут быть вам интересны.





использованная литература

Если вы еще не являетесь участником Medium и хотите им стать, нажмите здесь. (Часть вашей абонентской платы будет использована для поддержки alpha2phi.)