基于 Laravel 扩展包 LaraStan 实现对项目代码的静态编译检查

入门安装

LaraStan 是一个封装了 PHPStan(PHP Static Analysis Tool) 的 Laravel 扩展包,这是一个静态代码分析工具,可以帮助我们在运行代码之前排查可能存在的 bug,实现类似 Go、Java 这种静态语言的编译期检查。

目前 LaraStan 需要 PHP 7.1.3+ 环境才能正常运行,对 Laravel 版本的要求是 5.6+,支持最新发布的 Laravel 6.0 版本,下面我们以 laravel6 项目为基础来演示这个扩展包的安装和使用。

和 Telescope 类似,我们一般只会在开发环境使用这个扩展包,所以安装的时候指定了 --dev 选项:

composer require --dev nunomaduro/larastan

基本使用

安装完成后,即可通过如下命令对项目代码进行扫描分析:

默认检查的代码路径是 app 目录,还可以通过 --path 参数指定分析的目录路径:

php artisan code:analyse --paths="app,config"

还可以通过 --level 参数指定检查级别,PHPStan 支持 0-7 八个级别,级别越高越严格,每个级别检查的明细可以去 vendor/phpstan/phpstan/conf 目录下查看,LaraStan 默认级别是 5,你还可以通过 max 指定使用最高级别(即7)进行检查:

php artisan code:analyse --level=max

LaraStan 支持多种风格的错误显示格式,比如 checkstylerawtablejsonprettyJson,默认使用的是 table,你可以通过 --error-format 参数进行指定:

php artisan code:analyse --error-format prettyJson

错误显示

当目前为止,我们检查的代码还没有任何问题,现在我们在 routes/web.php 新增如下路由定义:

Route::get('/user', function () {
    $user = User::find(1);
    dd($user);
});

其中 User 没有通过命名空间引入完整类名,此时运行代码分析命令检查包含 routes 目录的路径:

php artisan code:analyse --paths="app,routes"

结果如下,会显示代码错误信息,既包括之前的代码错误,也包括刚刚新增的代码:

自定义配置文件

除此之外,我们还可以在项目根目录下创建 phpstan.neonphpstan.neon.dist 文件自定义代码分析配置文件,LaraStan 默认使用的是 vendor/nunomaduro/larastan 目录下的 extension.neon 配置文件,自定义的 phpstan.neon 可以在 extension.neon 的基础进行配置:

includes:
    - ./vendor/nunomaduro/larastan/extension.neon
parameters:
    level: 5
    paths:
        - src

更多自定义代码分析配置设置请参考 PHPStan 文档

上一篇: 基于 Laravel Sentry 扩展包实现 Laravel 学院异常实时监控及告警

下一篇: 基于 Laravel 扩展包 Health Monitor 在应用中实现资源及服务的健康检查和实时监控