emacsでPHPの構文チェック

http://www.blik.it/2007/02/21/syntax-checking-for-php-in-emacs/
を参考にして、emacs21でPHP用のflymakeを使用できるように設定してみた。

1.flymakeのインストール
http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/progmodes/flymake.el
からflymake.elをダウンロードしてきて、
~/.emacs.d/flymake.el
に保存。

エラーがでるので、下記の行をコメントアウト。理由は良く分からない。

(flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist)

2.~/.emacs.d/flymake-php.elを作成

;; Flymake PHP Extension

(require 'flymake)

(defconst flymake-allowed-php-file-name-masks '(
(".php3'" flymake-php-init)
(".inc'" flymake-php-init)
(".php'" flymake-php-init))
"Filename extensions that switch on flymake-php mode syntax checks")

(defconst flymake-php-err-line-pattern-re '("(Parse|Fatal) error: (.*) in (.*) on line ([0-9]+)" 3 4 nil 2)
"Regexp matching PHP error messages")

(defun flymake-php-init ()
(let* *1
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "php" (list "-f" local-file "-l"))))

(defun flymake-php-load ()
(setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-php-file-name-masks))
(setq flymake-err-line-patterns (cons flymake-php-err-line-pattern-re flymake-err-line-patterns))
(flymake-mode t)
;;(local-set-key "C-cd" 'flymake-display-err-menu-for-current-line)
)

(provide 'flymake-php)

Shift-Cが入力できなくなるので、下記行をコメントアウト。理由は良く分からない。
(local-set-key "C-cd" 'flymake-display-err-menu-for-current-line)

3.~/.emacsに追記

(add-to-list 'load-path "~/.emacs.d/")
(require 'flymake-php)
(add-hook 'php-mode-user-hook 'flymake-php-load)

php-modeが必要。

*1:temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace