lean2/src/emacs/lean-flycheck.el
2014-08-13 17:02:49 -07:00

71 lines
2.2 KiB
EmacsLisp

;; Copyright (c) 2014 Microsoft Corporation. All rights reserved.
;; Released under Apache 2.0 license as described in the file LICENSE.
;;
;; Author: Soonho Kong
;;
(require 'lean-settings)
(defvar lean-flycheck-initialized nil
"Return true if lean-flycheck has been initialized")
(defun lean-flycheck-command ()
(cl-concatenate 'list
`(,(lean-get-executable lean-flycheck-checker-name))
lean-flycheck-checker-options
'("--")
'(source-inplace)))
(defun lean-flycheck-init ()
"Initialize lean-flychek checker"
(unless lean-flycheck-initialized
(require 'flycheck)
(eval
`(flycheck-define-checker lean-checker-file
"A Lean syntax checker (file)."
: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)
:predicate
(lambda () (and buffer-file-name
(string= "lean" (file-name-extension buffer-file-name))))))
(add-to-list 'flycheck-checkers 'lean-checker-file)
(setq lean-flycheck-initialized t)))
(defun lean-flycheck-turn-on ()
(interactive)
(unless lean-flycheck-use
(when (interactive-p)
(message "use flycheck in lean-mode"))
(setq lean-flycheck-use t))
(lean-flycheck-init)
(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)))
(add-hook 'lean-mode-hook '(lambda ()
(when lean-flycheck-use (lean-flycheck-turn-on))))
(provide 'lean-flycheck)