flymake for puppet
少し探してみたけど見つからなかったので書いてみた。
puppet のメッセージがエスケープシーケンスを含んでいるのと、チェック用コマンドの生成で少しハマったけど、とりあえず望み通りの動作はするようになった。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; flymake for puppet (require 'flymake) (defcustom flymake-puppet-err-line-patterns '(("err: Could not parse for environment .+: \\(.+\\) at \\(.+\\):\\([0-9]+\\)" 2 3 nil 1)) "Regexp matching Puppet error messages.") (defconst flymake-allowed-puppet-file-name-masks '(("\\.pp$" flymake-puppet-init)) "Filename extensions that switch on flymake-shell mode syntax checks.") (defun flymake-puppet-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "puppet" (list "parser" "validate" local-file)))) ;2.7 or later ; (list "puppet" (list "--parseonly" local-file)))) ; 2.6 (defun flymake-puppet-load () (interactive) (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted) (setq flymake-check-was-interrupted t)) (ad-activate 'flymake-post-syntax-check) (setq flymake-allowed-file-name-masks flymake-allowed-puppet-file-name-masks) (setq flymake-err-line-patterns flymake-puppet-err-line-patterns) (flymake-mode t)) (add-hook 'puppet-mode-hook 'flymake-puppet-load)