branch: elpa/flymake-collection commit d80144082511f5c8169540e43652b23c19509740 Author: Mohsin Kaleem <mohk...@kisara.moe> Commit: Mohsin Kaleem <mohk...@kisara.moe>
flymake-collection-hook: Allow disabling builtin flymake backends --- src/flymake-collection-hook.el | 51 +++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/flymake-collection-hook.el b/src/flymake-collection-hook.el index ad7be9bebf..640a8b5af2 100644 --- a/src/flymake-collection-hook.el +++ b/src/flymake-collection-hook.el @@ -41,6 +41,7 @@ (defcustom flymake-collection-hook-config '(((python-mode python-ts-mode) . (flymake-collection-pycodestyle + (python-flymake :disabled t) (flymake-mypy :disabled t) (flymake-collection-pylint :disabled t) (flymake-collection-flake8 :disabled t) @@ -74,7 +75,8 @@ (flymake-collection-rubocop)) ;; (hledger-mode flymake-collection-hledger) ((sh-mode bash-ts-mode) . - (flymake-collection-shellcheck)) + (flymake-collection-shellcheck + (sh-shellcheck-flymake :disabled t))) ((yaml-mode yaml-ts-mode) . flymake-collection-yamllint) ((web-mode html-ts-mode) . @@ -124,7 +126,7 @@ "Unknown hook predicate=%s in `flymake-collection-hook-config'" it)))))) -(defun flymake-collection-hook--resolve-configured-checkers (checkers) +(defun flymake-collection-hook--expand-configs (checkers) "Resolve all the checkers in CHECKERS. Resolving converts each checker in CHECKERS, which should be the value-type in `flymake-collection-hook-config', into a list of (checker . depth) values. This @@ -135,22 +137,42 @@ that are not true." with predicated-result = nil if (symbolp conf) - collect (cons conf nil) + collect `(:checker ,conf) else if (consp conf) if (numberp (cdr conf)) - collect conf + collect `(:checker ,(car conf) :depth ,(cdr conf)) else do (cl-destructuring-bind (checker &optional &key depth predicate disabled &allow-other-keys) conf - (when (and (not disabled) - (or (not predicate) - (funcall predicate))) - (setq predicated-result (cons checker depth)))) + (setq predicated-result `(:checker ,checker + :depth ,depth + :disabled ,(or disabled + (and predicate + (funcall predicate)))))) and if predicated-result collect predicated-result)) -(defun flymake-collection-hook-checkers (mode) - "Fetch the list of diagnostic functions for MODE as (checker . depth)." +(defun flymake-collection-hook--checkers () + "Fetch config entries passing the predicate for the current buffer." + (let (checkers + (modes (list major-mode))) + (when flymake-collection-hook-inherit-config + (let ((mode major-mode)) + (while (setq mode (get mode 'derived-mode-parent)) + (push mode modes)))) + + (dolist (it flymake-collection-hook-config) + (when + (pcase (car it) + ((pred symbolp) (member (car it) modes)) + ((pred consp) (seq-intersection modes (car it))) + (_ + (user-error "Unknown hook predicate=%s in `flymake-collection-hook-config'" it))) + (setq checkers (append checkers (cdr it))))))) + +(defun flymake-collection-hook--checker-configs (mode) + "Fetch the list of diagnostic functions for MODE as plists. +The plists contains keys for :checker, :depth, :disabled." (let (checkers (modes (list mode))) ;; Consider all the parent modes as well. @@ -161,7 +183,7 @@ that are not true." (dolist (mode modes) (setq checkers (append checkers - (flymake-collection-hook--resolve-configured-checkers + (flymake-collection-hook--expand-configs (flymake-collection-hook--configured-checkers-for-mode mode))))) checkers)) @@ -180,8 +202,11 @@ that are not true." (and (boundp mode) (eval mode)))) flymake-collection-hook-ignore-modes) - (dolist (it (flymake-collection-hook-checkers major-mode)) - (add-hook 'flymake-diagnostic-functions (car it) (cdr it) t)))) + (dolist (it (flymake-collection-hook--checker-configs major-mode)) + (cl-destructuring-bind (&key checker depth disabled) it + (if disabled + (remove-hook 'flymake-diagnostic-functions checker 'local) + (add-hook 'flymake-diagnostic-functions checker depth 'local)))))) ;;;###autoload (define-obsolete-function-alias 'flymake-rest-hook-setup 'flymake-collection-hook-setup "2.0.0")