经过超过一千次提交、数十个测试与候选版本的迭代,Mago 1.0.0——首个稳定的Mago PHP工具链正式发布。
Mago是一个用Rust编写的综合性PHP工具链,它将代码检查器(linter)、代码格式化器(formatter)和静态分析器(analyzer)整合进一个单一、高速的二进制文件中。无论项目规模大小,它都能在数秒内提供一致可靠的反馈。
自0.26.1版本以来的重大更新
自上一主要版本以来,Mago经历了全面革新:
- 分析器完全重写,支持深度类型推断、泛型和控制流分析。
- 引入了用于扩展类型推断的插件系统。
- 代码检查器现包含135条规则,涵盖9个类别,并支持自动修复。
- 提供超过50项符合PHP-FIG PER编码风格的格式化选项。
- 新增Guard功能,用于强制执行架构边界与结构规则。
- 支持属性初始化检查与带有@throws验证的异常跟踪。
- 提供Baseline支持,便于在现有代码库中逐步采用。
- 上线Web playground:mago.carthage.software/playground。
核心功能详解
1. 代码检查器
检查器内置的135条规则分为9类,涵盖最佳实践、代码清晰度、一致性、正确性、过时用法、可维护性、冗余代码、类型安全及安全漏洞。多数规则支持通过 mago lint --fix 命令自动修复。
2. 代码格式化器
格式化器遵循 PHP-FIG PER编码风格,并提供超过50个自定义选项,控制打印宽度、缩进、大括号位置、方法链换行等。建议在CI流程中运行 mago format --check 以确保团队代码风格统一。
3. 静态分析器
分析器执行深度静态分析,功能包括:
- 支持泛型、交集、联合类型及键控数组的类型推断。
- 基于条件语句进行类型收窄的控制流分析。
- 涵盖类型错误、未使用代码等292+种问题检测。
- 异常跟踪与捕获验证。
- 捕获类型化属性未初始化的问题。
- 检测方法参数、返回类型及属性的类型提示缺失。
插件系统:分析器支持插件,为特定库提供类型推断。目前已支持psl和flow-php等插件,Symfony、Laravel等主流PHP框架的插件正在开发中。在 mago.toml 中配置即可启用:
[analyzer]
plugins = [
"psl",
"flow-php"
]
4. 架构守护
Guard功能用于在代码库中定义并强制执行架构规则与依赖边界。通过配置文件定义架构层与命名空间别名,并设置依赖许可规则。运行 mago guard 可检查违规,有助于维持清晰的架构分层,防止循环依赖。
生产环境就绪
Mago 1.0.0已具备生产就绪能力,每日用于分析数百万行PHP代码。它支持通过Baseline功能渐进式引入静态分析:
- 生成当前问题基准:
mago analyze --generate-baseline
- 在忽略现有问题的同时捕获新问题:
mago analyze --baseline baseline.toml
- 按计划逐步修复历史问题。
卓越性能
Mago凭借Rust带来的原生性能优势,速度远超传统PHP工具。在wordpress-develop代码库上的测试显示,Mago仅需3.88秒即可完成分析,速度比Psalm快12倍,比PHPStan快31倍。

安装与快速入门
安装方式多样:
- Shell脚本(macOS/Linux):
curl --proto '=https' --tlsv1.2 -sSfO https://carthage.software/mago.sh && bash mago.sh
- Homebrew:
brew install carthage-software/tap/mago
- Composer:
composer require --dev carthage-software/mago
- Cargo:
cargo install mago
快速开始:
- 在项目根目录初始化:
mago init
- 运行代码检查:
mago lint
- 运行静态分析:
mago analyze
- 格式化代码:
mago format
将Mago集成到你的CI/CD流水线中,可以持续保障代码质量。
未来展望
1.0.0版本只是一个起点,未来路线图包括:PHP版本管理器、扩展安装管理、PHP版本迁移助手,以及对Symfony、Laravel等框架更深入的插件支持。
|