flycheck挺好用的

之前我用基于flymake开发的插件,但不很稳定,而且flymake的api变动比较多,我有点跟不上了,所以想试试flycheck,发觉入门不难,性能也比我想象的好, 以下是我的配置,

(with-eval-after-load 'flycheck
  ;; 为了高性能所以只在保存代码时检查
  (setq flycheck-check-syntax-automatically '(save mode-enabled))

  ;; 界面尽量简洁,在边栏报错的功能都关掉了.
  (setq flycheck-indication-mode nil)

  ;; 加了一个支持luau语言的syntax checker, "flycheck.el"里可以翻到各种例子
  ;; luau-analyze比较简陋,不会自动到父目录里找配置文件".luaurc",所以我还要
  ;; 设置`:working-directory`,一般不用搞这么复杂,
  (flycheck-define-checker luau-analyze
    "A Luau syntax checker using luau-analyze.
  See URL `https://github.com/luau-lang/luau'."
    ;; `source-original` 表示直接检查原始代码文件, 也有其他的检查方式,
    ;; 常见的是检查当前buffer的内容,然后喂给命令行工具的stdin
    ;; 但luau-analyze不支持从stdin拿数据,
    :command 
    ("luau-analyze" "--formatter=plain" source-original)
    ;; `:error-patterns`的设置最后会转换成regex
    :error-patterns
    ((warning line-start
              (file-name)
              ":" line ":" column "-" end-column
              ": (" (id "W" (one-or-more digit)) ") "
              (message) line-end)
     (error line-start
            (file-name)
            ":" line ":" column "-" end-column
            ": (" (id "E" (one-or-more digit)) ") "
            (message) line-end))
    :working-directory
    (lambda (checker)
      (ignore checker)
      (when buffer-file-name
        (or (locate-dominating-file buffer-file-name ".luaurc")
            (file-name-directory buffer-file-name))))
    :modes (lua-mode lua-ts-mode)))

针对luau语言启用luau-analyze的checker很简单,直接在".dir-locals.el"指定flycheck-checker,或lua-mode-hook里写一行(setq-local flycheck-checker 'luau-analyze), 以下是我的".dir-locals.el",

((lua-mode . ((flycheck-checker . luau-analyze)))
 (lua-ts-mode . ((flycheck-checker . luau-analyze))))
6 个赞

表示赞同

如果 Eglot 能用 Flycheck,我也不想用Flymake了。

其实最好就是 flycheck 加入 Emacs, 然后废掉 Flymake。

1 个赞