Grammar Checker for Emacs

看到 Harper 消息,想說來裝裝看,照討論區中方式,卻碰到跟 eglot 不合的情況,看起來問題出在以下這段:

1
2
3
4
5
6
[jsonrpc] e[01:26:56.418] <-- workspace/configuration[0] {"jsonrpc":"2.0","method":"workspace/configuration","params":{"items":[{}]},"id":0}
[jsonrpc] e[01:26:56.420] --> workspace/configuration[0] {"jsonrpc":"2.0","id":0,"result":[null]}
[jsonrpc] e[01:26:56.420] <-- workspace/configuration[1] {"jsonrpc":"2.0","method":"workspace/configuration","params":{"items":[{}]},"id":1}
[jsonrpc] e[01:26:56.422] --> workspace/configuration[1] {"jsonrpc":"2.0","id":1,"result":[null]}
[stderr] 2025-03-02T17:26:56.420461Z ERROR harper_ls::backend: Settings must be an object.
[stderr] 2025-03-02T17:26:56.422463Z ERROR harper_ls::backend: Settings must be an object.

此文寫下時 harper 最新版本為 v0.23.0, 後退到 v0.22.0 還是不動就放棄了。Grammarly 似乎很紅,但要花錢才能用 API 不然只能網頁使用,放棄。改試老牌的 LanguageTool, 比較好用的對應 language server 是 ltex-ls, 貌似沒什麼在維護,最新版 16.0.0 會有無回應情況,退到 15.2.0 就會動。相關的 emacs 設定如下:

1
2
3
4
5
6
7
(use-package eglot
:hook
(text-mode . eglot-ensure)
:config
(add-to-list 'eglot-server-programs
;; '(text-mode . ("harper-ls" "-s"))))
'(text-mode . ("ltex-ls"))))

最大收穫是 eglot 不錯,而且已經 merge 進 emacs 成為發行的一部分了。不過大致看了一下,lsp-mode 目前還是比較好用的,也許之後再觀察一下吧。

翻找過程中意外發現一位工程師,似乎專門在寫沒什麼必要的 emacs package, 大部分都沒進 gnu or melpa, 像是 eglot 直接可用的情況,他就會去寫個 eglot-ltex, 大概是想賺 contribution 吧。蠻有意思的。

另個有趣的發現是 vale, 很認真在開發,但沒有檢查文法功能,只能查拼字跟 writing style, 因此發現還有 Google developer documentation style guide 這種東西。照著裡面的規則、再加上用 LLM 潤飾的話,就可以寫出煞有介事的文件。