最近在 PHP 开发社区中,工具链的性能和效率一直是个热门话题。最近 Mago 的新工具横空出世,它声称用 Rust 语言重写了 PHP 的核心工具链,包括代码格式化、Lint 检查和静态分析功能。这让我想起了 JavaScript 生态中那些用 Rust 优化的工具(如 SWC 或 Rome),现在 PHP 世界也迎来了类似变革。
PHP 工具链 Mago 1.0.0-alpha.1 发布!
Mago 是一个多功能 PHP 工具链,它整合了三个主要功能:
最引人注目的是,Mago 完全用 Rust 语言从头构建。这不是简单的包装,而是对 PHP 工具的彻底重写。Rust 以其高性能、安全性和并发能力闻名,在 Node.js 生态中已证明能大幅提升工具速度(如 Bun 或 Deno)。
为什么选择 Rust?传统 PHP 工具如 Pint(基于 PHPCS Fixer)和 PHPStan 都是用 PHP 写的,虽然功能强大,但处理大型项目时速度较慢。Rust 的编译型特性能让 Mago 在解析和处理 PHP 代码时更快,尤其在多线程场景下。
Mago 的安装非常简洁。通过 Composer 命令
composer require --dev carthage-software/mago
它会下载一个纯二进制文件,几乎零依赖。这意味着不需要额外安装 PHP 扩展或库,就能运行。配置过程也很友好。
“运行
mago init
后,它会引导你设置项目
composer.json
中的 PHP 版本和框架(如 Laravel)。默认遵循 PSR-12,能移除多余空格、调整函数括号等。Nuno 注意到,它与 Pint 的 Laravel 预设略有差异(如匿名函数的空格处理)。用 --dry-run
可以预览变化,而不实际修改文件。
运行 mago lint
能快速扫描语法问题。在几毫秒内完成,但输出不如 Pint 详细(缺少具体变更列表)。
类似于 Rector,Mago 能自动修复一些代码问题,如移除不必要的 else
语句(因为前置返回已覆盖)。Mago 检测到多余的 else
,并用 --fix
自动优化。但有时会生成“破损”代码(如空行或语法错误),这可能是早期版本的 Bug。
此外,Mago 支持忽略特定规则(如用注释 // mago:ignore
),类似于 PHPStan 的 @phpstan-ignore-next-line
。
总的来说,Mago 的 Lint 和格式化已很可靠,但分析功能不如 PHPStan 成熟,尤其在复杂框架集成上。
Mago 目前无法完全取代现有工具,但它证明了 Rust 在 PHP 生态的潜力。社区需要时间完善它,或许未来它能成为默认选择——不过这可能很遥远。