2023年10月18日水曜日

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。

  • 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。
  • 用途は、メモ と python がほとんど。
  • emacs を 29.1 にした時から、package manager を elpaca に移行。
    • 初期は起動に時間がかかるが、各パッケージのインストが済めば、かなり早い。
    • org-mode, (python-mode(ビルトインを使うように変更), markdown-mode など、ビルトインを使わないようにするには、 先読みさせる必要がある。
  • emacs 29 は、tree-sitter が ビルトインされていて、 ビルトインの方は、treesit で区別?されている。
    • 未成熟?なので、まだ多くは期待できないらしい。
    • hook の設定で、python-mode は、python-base-mode にする必要があった。 他の言語はどうなのだろう?
  • lsp は デフォルトの eglot を使っている。
    • eglot の他に、軽量だという lsp-bridgelspce も試したが、 今のところデフォ。
    • python では、使えてると思っている。
    • lsp-mode より軽いと感じるが、lspce や lsp-bridge の方が軽快。
  • sideline-mode に加えて eldoc-box を使いはじめた。いいかんじだと思う。
  • flymake(flymake-ruff) をデフォにして、たまに、flymake を止めて flycheck(pylint) を動かしている。 consult-flymake、consult-flycheck で移動。
  • 補完は、lsp 経由の company。 capf になるのようで、バックエンドのカスタマイズができていない。
  • フォールディングは、origami だが、あいかわらず使いこなせない。
  • treemacs は、たまに使う。私のレベルでは、tag jump で間に合ってるのだろう。

最近は、さらに使用時間が短かくなっている。目の隈が醜い今日このごろ。

1 treesit

(use-package treesit-auto
  :config
  (setq treesit-auto-install 'prompt)
  (global-treesit-auto-mode)
)

(use-package treesit
  :elpaca nil
  :config
  (setq treesit-font-lock-level 4)
)

2 eldoc、ruff(flymake)

(use-package eldoc :blackout t
 :elpaca nil
 :custom
 (eldoc-idle-delay 0) ; idle時にdelayをかけない
)

(use-package eldoc-box :after eldoc
 :config
 (blackout 'eldoc-box-hover-mode "")
 (blackout 'eldoc-box-help-at-point "")
)

(use-package flymake-ruff
  :hook (python-ts-mode . flymake-ruff-load))

3 eglot

;;
(use-package eglot
  :elpaca nil
  :hook
  (python-base-mode . eglot-ensure)
  (sh-mode . eglot-ensure)
  (markdown-mode . eglot-ensure)
  (web-mode . eglot-ensure)
  (mhtml-mode . eglot-ensure)
  (rustic-mode . eglot-ensure)
  :config
  ;;
  (add-to-list 'eglot-server-programs '(web-mode . ("vls" "--stdio")))
  (add-to-list 'eglot-server-programs '(mhtml-mode .
     ("~/.yarn/bin/vscode-html-language-server" "--stdio")))
  (add-to-list 'eglot-server-programs '(markdown-mode . ("marksman")))
  ;; (add-to-list 'eglot-server-programs '(python-base-mode . ("pylsp")))
  (add-to-list 'eglot-server-programs '(python-base-mode . ("jedi-language-server")))
  ;;
  (add-to-list 'eglot-server-programs '(rustic-mode . ("rust-analyzer")))

;; どこかのコピペ
;; 表示を調整できるようだが、まったく理解できてない。
(defun /eglot-managed-mode-initialize ()
  (setq
   eldoc-documentation-functions
   (list
    #'eglot-signature-eldoc-function
    #'eglot-hover-eldoc-function
    #'flymake-eldoc-function
    ))
  )

(add-hook 'eglot-managed-mode-hook #'/eglot-managed-mode-initialize)
(add-hook 'eglot-managed-mode-hook #'eldoc-box-hover-mode t)
;; (add-hook 'eglot-managed-mode-hook #'eldoc-box-help-at-point t)
)

4 Python

(use-package pyvenv
 :hook
  ;; (python-mode . pyvenv-mode)
  (python-base-mode . pyvenv-mode)
 :custom (pyvenv-exec-shell "/usr/bin/zsh"))

(use-package pipenv
  :hook
 ;; (python-mode . pipenv-mode)
 (python-base-mode . pipenv-mode)
  :init
  (setq pipenv-with-flycheck nil)
  :config
  (blackout 'pipenv-mode " pip")
)

(use-package company-jedi
 :hook python-base-mode
 :after (:all jedi-core python-base-mode)
 :config
 (setq-local jedi:complete-on-dot t)
 )

(use-package python-mode
 :elpaca nil  ;; init.el で先読みしているから。
 :mode ("\\.py")
 :interpreter ("python")
 :config
 ;; (blackout 'python-mode " Py")
 (blackout 'python-base-mode " PyTS")
 (blackout 'python-ts-mode " PyTS")
 ;; (setq py-use-menu-p nil)

 (setq auto-complete-mode nil)
 (setq electric-indent-local-mode nil)

 (flymake-mode nil)
)

(use-package py-isort
 :hook python-base-mode
 :after (:all python-base-mode pipenv-mode)
)

(use-package blacken
 :hook python-base-mode
 :after (:all python-base-mode pipenv-mode)
 :custom
 ((blacken-line-length 84)
  (blacken-skip-string-normalization t))
)

(use-package numpydoc
  :hook python-base-mode
  :after (:all python-base-mode pipenv-mode)
  :custom
  (numpydoc-insert-examples-block nil)
  (numpydoc-template-long nil)
)

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...