add eslint checker for flymake

This commit is contained in:
zedhugh committed 2022-10-29 03:46:29 +08:00
1 parent 969bca30cb
commit 5b2216a62e
6 files changed
+85 -3

No files matched your search

+76
View File
@@ -0,0 +1,76 @@
;; -*- coding: utf-8; lexical-binding: t; -*-
(defun creature/flymake-show-diagnostics-buffer-and-jump ()
(interactive)
(flymake-show-diagnostics-buffer)
(select-window
(get-buffer-window (flymake--diagnostics-buffer-name))))
(with-eval-after-load 'flymake
(add-hook 'flymake-mode-hook #'creature/flymake-add-eslint-backend)
(lazy-load-set-keys
'(("C-c C-n" . flymake-goto-next-error)
("C-c C-p" . flymake-goto-prev-error))
flymake-mode-map)
(lazy-load-set-keys
'(("ex" . flymake-show-diagnostic)
("el" . creature/flymake-show-diagnostics-buffer-and-jump))
flymake-mode-map creature/prefix-key)
(with-eval-after-load 'which-key
(which-key-add-keymap-based-replacements
flymake-mode-map
"e" "errors"
"el" "lines"
"ex" "error message"
)))
(autoload 'eslint-disable-rule-disable-next-line "eslint-disable-rule" "" t)
(autoload 'eslint-disable-rule-flymake "eslint-disable-rule-flymake")
(autoload 'eslint-disable-rule-flycheck "eslint-disable-rule-flycheck")
(defvar creature/eslint-inited nil)
(autoload 'flymake-eslint-enable "flymake-eslint" "" t)
(defun creature/flymake-add-eslint-backend ()
(make-local-variable 'creature/eslint-inited)
(when (and flymake-mode
(not creature/eslint-inited)
(derived-mode-p 'js-mode 'typescript-mode 'web-mode))
;; flymake-eslint-enable 内部会再次调用 (flymake-mode 1) ,为防止无限
;; 循环调用,用 ‘creature/eslint-inited’ 记录该函数调用状态避免多次调用
(setq creature/eslint-inited t)
(flymake-eslint-enable)
(setq flymake-eslint-project-root
(creature/flymake-eslint-find-work-dir))))
(defun creature/flymake-eslint-find-work-dir ()
(let ((max-len 0)
(curr-len 0)
(temp-dir nil)
(work-dir nil))
(dolist (filename '(".eslintrc"
".eslintrc.js"
".eslintrc.cjs"
".eslintrc.yaml"
".eslintrc.yml"
".eslintrc.json"
"package.json"))
(setq temp-dir (locate-dominating-file buffer-file-name filename))
(when (stringp temp-dir)
(setq curr-len (string-bytes (file-truename temp-dir)))
(when (> curr-len max-len)
(setq max-len curr-len
work-dir temp-dir))))
work-dir))
(provide 'init-flymake)