@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

OS XのEmacsでPHPLintとflycheck

EmacsでもPHPLintで指摘して欲しいですよね。 SublimeTextには負けない。

flycheckを導入し、ESLintは使えるようになりました。次はPHPです。

www.flycheck.org

flycheckのドキュメントでPHPも対応しているとのことなので、必要なものを用意しました。

phpmdを入れる

brew install phpmd php55

php55インストール時の出力に従い、Apacheが呼び出すPHPbrewでいれたものに置き換えました。

# もともとの設定
# LoadModule php5_module libexec/apache2/libphp5.so
# brewがいれたphp
LoadModule php5_module    /usr/local/opt/php55/libexec/apache2/libphp5.so

phpcsを入れる

PEARで入れる。これもphp55インストール時の出力に従って設定を変えてからphpcsをいれる。

chmod -R ug+w /usr/local/Cellar/php55/5.5.25/lib/php
pear config-set php_ini /usr/local/etc/php/5.5/php.ini system
sudo pear install PHP_CodeSniffer

あと、phpmdはパスが通ったけれど、phpcsはパスが通らなかったのでlocateで探してパスを通しました。

  • .zshrc
export PATH=$PATH:/usr/local/Cellar/php55/5.5.25/bin/
  • init.el

zshの設定に記述したから、いらないかもしれない。/usr/local/Cellar/php55/5.5.25/binにパスが通れば良い。 M-! which phpcsでphpcsのパスが出力されればパスが通った。

(dolist (dir (list
              "/sbin"
              "/usr/sbin"
              "/bin"
              "/usr/bin"
              ;; "/opt/local/bin"
              ;; "/sw/bin"
              "/usr/local/bin"
              "/usr/local/Cellar/php55/5.5.25/bin"
              (expand-file-name "~/.emacs.d/bin")
              (expand-file-name "~/bin")
              (expand-file-name "~/Library/Haskell/bin")
              ;; "/Apps/gnupack_devel-11.00/app/cygwin/cygwin/usr/local/bin"
              ;; "/Apps/gnupack_devel-11.00/app/cygwin/cygwin/usr/bin"
              ;; "/Apps/gnupack_devel-11.00/app/cygwin/cygwin/bin/"
              ;; "/Apps/gnupack_devel-11.00/app/cygwin/cygwin/usr/sbin/"
              ;; "/Apps/gnupack_devel-11.00/app/cygwin/cygwin/sbin/"
              ))
 ;; PATH と exec-path に同じ物を追加します
 (when (and (file-exists-p dir) (not (member dir exec-path)))
   (setenv "PATH" (concat dir ":" (getenv "PATH")))
   (setq exec-path (append (list dir) exec-path))))

(require 'exec-path-from-shell)
(when (and (memq window-system '(mac ns))
           (functionp 'exec-path-from-shell-initialize))
  (exec-path-from-shell-initialize)
  (add-hook' after-init-hook 'exec-path-from-shell-initialize))

flycheckの設定

そしてflycheckの設定として、init.elに下記内容を追加

;; php-mode
(add-hook 'php-mode-hook 'flycheck-mode)

phpファイルを開くとたくさん怒ってくれます。 f:id:peccu:20150522153519p:plain ここからが本番ですね。ひたすら潰す。

editorconfigである程度はなんとかなるけども。