使用 Phing 检查 PHP 和 JavaScript 中的语法错误
使用Phing检查PHP和JavaScript中的语法错误
对文件运行简单的语法检查是节省时间的好方法。这可能是在测试代码时,但最佳实践是甚至不要提交包含语法错误的代码。
您可以在PHP可执行文件中使用-l(小写L)标志对单个文件进行语法检查,如下所示。
$php-lfile.php
不幸的是,这一次只能检查一个文件,所以我开始尝试找到一种同时检查整个项目的好方法。互联网上有几个脚本可用,但我开始使用Phing中的phplint任务创建自己的解决方案。这意味着如果我想包含(或排除)特定目录或文件,我只需创建一个文件集并将其提供给phplint任务,而不必重写整个内容。
我经常使用Drupal,所以我想对Drupal项目运行快速语法检查,看看它是否有任何问题。这意味着设置以下文件集,其中包括根目录中的代码php文件以及通常在Drupal项目中找到的扩展名为.php、.inc和.module的PHP文件。
下一步是创建phplint目标,以便我可以在文件集上运行phplint任务。这很简单。
将此构建脚本保存为build.xml意味着您可以通过在当前所在的目录上运行它来检查整个项目。您可以使用-f标志来包含所需的build.xml文件。
phing-f/path/to/buildfile/build.xml
作为测试,我在我目前正在处理的Drupal项目上运行它。事实证明,它确实包含一个语法错误,尽管它是在第三方代码中。这是日期模块中的错误:
[phplint]Parseerror:syntaxerror,unexpected'*'in./docroot/sites/all/modules/contrib/date/api.date.phponline166
快速查看源代码后,我发现了有问题的代码行。注意额外的结束注释块。这个文件不是正在运行的代码的一部分,它被用来生成API文档,但phplint任务仍然能够把它挑出来。
/** * This hook lets other modules alter the local date objects created by the date_combo validation * before they are converted back to the database timezone and stored. * * @param $date - the $date object. * @param $fom_state - the $form_state array. * @param $context, and array containing: * 'field' - the $field array. * 'instance' - the $instance array. * 'item' - the $item array. * 'element' - the $element array. */ */ function date_all_day_date_combo_validate_date_end_alter(&$date, &$form_state, $context) { //如果这是“全天”值,请将时间设置为午夜。 if (!empty($context['element']['#date_is_all_day'])) { $date->setTime(0, 0, 0); } }
检查JavaScript的语法错误稍微有点棘手,但使用JavaScriptlint程序和jsllintphing任务很有可能。要使其正常工作,您需要从http://www.javascriptlint.com/download.htm下载JavaScriptlint文件并使用以下命令(在Linux系统上)编译它。以下命令编译jslint,然后将可执行文件复制到操作系统可以看到的地方。
$ make -f Makefile.ref $ sudo cp Linux_All_DBG.OBJ/jsl /usr/local/bin/jsl
完成后,您可以通过自己运行“jsl”来检查它是否已安装。要设置jsllint任务,您需要有一些JavaScript文件,以下文件集将处理这些文件。
现在我们需要做的就是将这个文件集提供给运行jsllint任务的jsllint目标。注意在此处的任务名称中添加两个l。
您可能会注意到我已将showwarnings设置为false。这是因为当我第一次在Drupal项目上运行它时,我收到了数百条警告。关闭警告会停止大量输出,因此您可以专注于错误。当我在我的项目中这样做时,我没有语法错误。
可以使用xmllintphing任务对XML进行语法检查,尽管这需要使用架构来检查XML,因此无法对项目进行批量检查。对于您找到的每种XML文件类型,您都需要一个架构文件,这通常不存在。
将phplint和jsllint部分放在一起,我们最终得到一个Phing构建文件,如下所示。将此文件插入Phing将检查项目中的所有PHP和JavaScript文件的语法,尽管这是专门设置来检查Drupal项目的。
以下是相关的Phing文档页面:
phplint任务
jslint任务
xmllint任务