FlyMake with PHP. == On Windows == I use this code to let flymake-mode work with my php modules, on Windows.
(defvar phpwin-php.exe-location "c:\\Progra~2\\PHP\\v5.3\\php.exe"
"Location for the PHP.exe executable on windows.")
(defun phpwin-flymake-create-temp-intemp (file-name prefix)
"Return file name in temporary directory for checking FILE-NAME.
This is a replacement for `flymake-create-temp-inplace'. The
difference is that it gives a file name in
`temporary-file-directory' instead of the same directory as
FILE-NAME.
For the use of PREFIX see that function.
This won't always work; it will fail if the source module
refers to relative paths.
"
(unless (stringp file-name)
(error "Invalid file-name"))
(or prefix
(setq prefix "flymake"))
(let* ((name (concat
(file-name-nondirectory
(file-name-sans-extension file-name))
"_" prefix))
(ext (concat "." (file-name-extension file-name)))
(temp-name (make-temp-file name nil ext))
)
(flymake-log 3 "create-temp-intemp: file=%s temp=%s" file-name temp-name)
temp-name))
(defun phpwin-flymake-get-cmdline (source base-dir)
"Gets the cmd line for running a flymake session in a PHP buffer.
This gets called by flymake itself."
(list phpwin-php.exe-location (list "-f" source "-l")))
(defun phpwin-flymake-init ()
"initialize flymake for php"
(let ((create-temp-f 'phpwin-flymake-create-temp-intemp)
;;(create-temp-f 'flymake-create-temp-inplace)
(use-relative-base-dir t)
(use-relative-source t)
(get-cmdline-f 'phpwin-flymake-get-cmdline)
args
temp-source-file-name)
(setq temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f)
args (flymake-get-syntax-check-program-args
temp-source-file-name "."
use-relative-base-dir use-relative-source
get-cmdline-f))
args))
(defun phpwin-flymake-cleanup () )
(eval-after-load "flymake"
'(progn
;; add an entry for PHP to the flymake-allowed-file-name-masks,
;; or modify the existing entry.
(let* ((key "\\.php\\'")
(phpentry (assoc key flymake-allowed-file-name-masks)))
(if phpentry
(setcdr phpentry '(phpwin-flymake-init phpwin-flymake-cleanup))
(add-to-list
'flymake-allowed-file-name-masks
(list key 'phpwin-flymake-init 'phpwin-flymake-cleanup))))))
== On Windows with PHP CodeSniffer ==
If you like the idea of flymake for syntax checking of PHP, but want something more rigorous than just running PHP.exe on the module, consider [http://pear.php.net/package/PHP_CodeSniffer PHP CodeSniffer]. It performs static analysis on PHP modules, and can check things like whitespace, indenting, curly brace placement, the presence and format of comments, the use of double-quotes, and many more items.
To do it, download !CodeSniffer (free). Then configure emacs to use !CodeSniffer for php/flymake using Lisp:flyphpcs.el.
http://i.imgur.com/bkBu0.png
As you can see it works nicely with FlymakeCursor . It also works well with [[RFringe]] (not shown here).
== Related Links ==
* [http://sachachua.com/wp/2008/07/emacs-and-php-on-the-fly-syntax-checking-with-flymake/ PHP syntax checking for Flymake]
* [http://www.illusori.co.uk/perl/2011/07/25/perl_php_static_analysis_with_emacs_flymake.html Perl and PHP continuous static analysis with Emacs Flymake] ---
A guide to getting PHP_!CodeSniffer and/or Perl::Critic hooked up to FlyMake to take you beyond just simple syntax checking.
----
CategoryProgrammerUtils
CategoryFlymake