credoというのがある.
これはElixirの静的解析ツールで,まぁrubocopみたいなものだと思っていただければ良い.これは単なるCLIなのだが,これに違反した場合,違反箇所をエディタ上に表示してほしいと思った.
そこでflycheck-credoというのがある.
これでcredoを実行して結果をflycheckに連携してくれるので,Emacs上でそれを見ることができるのだ.
しかし,lsp-modeを有効化しているとこれがうまいこと動作しない.実はlsp側が内部でflycheckを実行し,この結果を表示してくれているのだが,flycheck-credoの結果はこのlsp内部から実行されるflycheckにより結果が上書きされてしまう. その結果credoとしてのエラーがflycheckに表示されなくなっている. 試しに一度lsp-modeを無効化した上で,flycheck-credoを入れてみて欲しい.ちゃんと動作するから.
ただ現代においてlspを無効化するのはあまり現実的ではないので,なんとかこの2つに共存していただきたい.
というわけで,
(use-package elixir-mode :config (add-hook 'elixir-mode-hook (lambda () (setq lsp-flycheck-live-reporting nil) (setq-local flycheck-check-syntax-automatically '(mode-enabled save)))) (add-hook 'lsp-after-initialize-hook (lambda () (flycheck-add-next-checker 'lsp 'elixir-credo)))
とやることで,これらを同居できる.
まず flycheck-add-next-checker
だが,これをやることで2つのcheckerを併用できる.
その上で,lsp-flycheck-live-reporting
を無効化することで,elixir-credoの結果が上書きされるのを防いでいる.
Refs: elixirforum.com