编程

PHP 8.3: PHP CLI Lint (php -l) 支持一次额 linting 多个文件

449 2023-10-28 18:42:00

PHP 的 CLI 命令行提供了 Linting 特性,用于检测传入的文件是否有语法错误。这对于在执行前快速检测 PHP 文件或者代码片段非常有用。

php -l my-file.php
No syntax errors detected in my-file.php

PHP 8.3 之前,同一个调用中要 lint 多个 PHP 文件时不可能的,无论提供了介个文件, PHP CLI 只会 lint 第一个文件:

php -l file1.php file2.php
No syntax errors detected in file1.php

从 PHP 8.3 起,可以传入多个 PHP 文件,PHP CLI 会在同一个调用中 lint 所有文件。

php -l file1.php file2.php
No syntax errors detected in file1.php
No syntax errors detected in file2.php

如果 linter 在提供的任何文件中发现任何错误,它会显示错误,并继续列表的其余部分。如果所有文件未通过 lint 测试,则存在错误。

支持全局 Pattern

除了单独传递多个文件名之外,还可以使用 glob 模式来 lint 多个文件:

php -l src/*.php src/**/*.php

退出码

  • 如果有任何文件是不能访问的,退出码(exit code) 为 1
  • 如果有任何文件是不能 lint 的,退出码(exit code) 为 255
  • 如果上述两个错误都出现了,退出码为 1

向后兼容性影响

PHP 8.3 之前,PHP CLI 静默忽略传给 lint 的额外文件。对于 Glob 模式,它只使用第一个文件。

对于只运行在 PHP 8.3+ 的 PHP 应用,现在可以快速 lint 多个文件或整个代码库,而无需多次调用 Linter(例如使用 find 命令)或第三方工具。

第三方工具如 php-parallel-lint/PHP-Parallel-Lint 可以提供跨越多个 PHP 版本的并行 linting。