是否有可能在 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
所以,我想我应该稍微改变正则表达式以匹配多行错误。对此有任何提示吗?