lean2/src/emacs/lean-flycheck.el

85 lines
2.9 KiB
EmacsLisp
Raw Normal View History

;; Copyright (c) 2014 Microsoft Corporation. All rights reserved.
;; Released under Apache 2.0 license as described in the file LICENSE.
;;
;; Author: Soonho Kong
;;
2014-08-14 00:02:49 +00:00
(require 'lean-settings)
(defun lean-flycheck-command ()
"Concat lean-flychecker-checker-name with options"
(cl-concatenate 'list
`(,(lean-get-executable lean-flycheck-checker-name))
lean-flycheck-checker-options
'("--cache")
'(source-original)
'("--")
'(source-inplace)))
(defun lean-flycheck-init ()
"Initialize lean-flychek checker"
(eval
`(flycheck-define-checker lean-checker
"A Lean syntax checker."
:command ,(lean-flycheck-command)
:error-patterns
((error line-start "FLYCHECK_BEGIN ERROR\n"
(file-name) ":" line ":" column ": error: "
(minimal-match
(message (one-or-more (one-or-more not-newline) "\n") ))
"FLYCHECK_END" line-end)
(warning line-start "FLYCHECK_BEGIN WARNING\n"
(file-name) ":" line ":" column ": warning "
(minimal-match
(message (one-or-more (one-or-more not-newline) "\n") ))
"FLYCHECK_END" line-end))
:modes (lean-mode)))
(add-to-list 'flycheck-checkers 'lean-checker))
(defun lean-flycheck-turn-on ()
(interactive)
(unless lean-flycheck-use
(when (interactive-p)
(message "use flycheck in lean-mode"))
(setq lean-flycheck-use t))
(flycheck-mode t))
(defun lean-flycheck-turn-off ()
(interactive)
(when lean-flycheck-use
(when (interactive-p)
(message "no flycheck in lean-mode")))
(flycheck-mode 0)
(setq lean-flycheck-use nil))
(defun lean-flycheck-toggle-use ()
(interactive)
(if lean-flycheck-use
(lean-flycheck-turn-off)
(lean-flycheck-turn-on)))
(eval-after-load "flycheck"
'(defadvice flycheck-try-parse-error-with-pattern
(after lean-flycheck-try-parse-error-with-pattern activate)
"Add 1 to error-column."
(let* ((err ad-return-value)
(col (flycheck-error-column err)))
(when (and (string= major-mode "lean-mode") col)
(setf (flycheck-error-column ad-return-value) (1+ col))))))
(defun lean-flycheck-delete-temporaries ()
"Delete temporaries files generated by flycheck."
(when (eq major-mode 'lean-mode)
(let* ((filename (buffer-file-name))
(tempname (format "%s_%s"
flycheck-temp-prefix
(file-name-nondirectory filename)))
(tempbase (file-name-base tempname))
(tempfile (expand-file-name tempbase
(file-name-directory filename)))
(exts '(".ilean" ".d" ".olean"))
(tempfiles (--map (concat tempfile it) exts)))
(mapc #'flycheck-safe-delete tempfiles))))
(provide 'lean-flycheck)