EmacsのPHPファイルで未使用の変数を特定することはどういうわけか可能ですか?
他の言語では、Flymakeなどのツールを使用してこれを行うことができます。
私はすでにFlymakeを有効にしてPHPファイルの構文エラーをその場で表示していますが、それでもPHPロジックエラーが次のような状況に起因することがあるのはイライラします。
<?php
$foo = whatever();
$bar = something($fo);
...
foo
開発者の頭痛と彼/彼女の法外なコーヒーの使用に寄与する$のタイプミスに注意してください。
Pascal とviam0Zahによるヒントの後、php.iniファイルにこれを設定しました。
error_reporting = E_ALL | E_STRICT
コマンドラインから実行するとphp
、未定義の変数(-lオプションの有無にかかわらず)に関する通知を確認できるようになりました。
php -r '$foo = 3; echo $fo;'
PHP Notice: Undefined variable: fo in Command line code on line 1
php -r '$foo = 3; echo $fo;' -l
PHP Notice: Undefined variable: fo in Command line code on line 1
これは私が現在.emacsファイルで使用しているものです。解析エラーでは完全に正常に機能しますが、通知を一致させることはできません:(
;; Flymake for PHP
(require 'flymake)
(defun flymake-php-init ()
"Use php to check the syntax of the current file."
(let* ((temp (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace))
(local (file-relative-name temp (file-name-directory buffer-file-name))))
(list "php" (list "-f" local "-l"))))
(add-to-list 'flymake-err-line-patterns
'("\\(Parse\\|Fatal\\) error: +\\(.*?\\) in \\(.*?\\) on line \\([0-9]+\\)$" 3 4 nil 2))
(add-to-list 'flymake-err-line-patterns
'("Notice: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)" 2 3 nil 1))
(add-to-list 'flymake-allowed-file-name-masks '("\\.php$" flymake-php-init))
Gaborの構成も試しましたが、同じ結果になりました。エラーの場合は問題ありませんが、通知の場合は問題があります。
コマンドラインから、解析エラーは次のようになることに注意してください。
php -r '$fo o = 3; echo $fo;' -l
PHP Parse error: syntax error, unexpected T_STRING in Command line code on line 1
通知が一致しない理由がわかりません。正規表現を個別に試しましたが、正しく一致しているようです。
(search-forward-regexp "Notice: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)")
PHP Notice: Undefined variable: fo in Command line code on line 1
(C-x C-e
行の終わりにジャンプします)。
最後に、通知は元々次のように報告されていたため、今のところXdebugを無効にしました。
PHP Notice: Undefined variable: fo in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
したがって、複数行のエラーに一致するように正規表現を少し変更する必要があると思います。これについて何かヒントはありますか?