经过超过 1,000 次提交、13 个发布候选版、34 个测试版和 12 个 Alpha 版后,我们很高兴地宣布 Mago 1.0.0 —— Mago PHP 工具链的第一个稳定版。
Mago 是一个用 Rust 编写的全面 PHP 工具链,它将 linter(代码检查器)、formatter(代码格式化器)和 static analyzer(静态分析器)结合成一个单一的、闪电般快速的二进制文件。无论您是在处理小型项目还是拥有数百万行代码的庞大代码库,Mago 都能在几秒钟内提供一致、可靠的反馈。
如果您上次使用 Mago 是 0.26.1 版本,那么这个工具已经发生了翻天覆地的变化:
linter 包含 135 条规则,组织成 9 个类别:
类别 | 重点 |
|---|---|
最佳实践 | 惯用的 PHP 模式和约定 |
清晰度 | 代码可读性和表达性 |
一致性 | 代码库中统一的编码风格 |
正确性 | 逻辑错误和潜在 bug |
弃用 | 过时的模式和已弃用功能 |
可维护性 | 长期代码健康 |
冗余 | 不必要或重复的代码 |
安全性 | 类型安全和 null 处理 |
安全 | 潜在的安全漏洞 |
许多规则包含 自动修复,可以使用 mago lint --fix 应用。
格式化器会生成干净、一致的代码,遵循 https://www.php-fig.org/per/coding-style/,并提供超过 50 个自定义选项:
在 CI 中运行 mago format --check 以确保团队中一致的格式化。
分析器执行 深度静态分析,包括:
分析器支持插件,用于库特定的类型推断:
插件 | 描述 |
|---|---|
stdlib | PHP 内置函数(默认启用) |
psl | azjezz/psl 类型提供器 |
flow-php | flow-php/etl 类型提供器 |
在您的 mago.toml 中启用插件:
[analyzer]
plugins = [
"psl",
"flow-php"
]
即将推出的插件包括 Symfony、Laravel、Doctrine 和 PHPUnit。
Guard 强制执行代码库中的 架构规则 和 依赖边界:
[guard.perimeter]
# 定义从核心到基础设施的架构层。
layering = [
"CarthageSoftware\\Domain",
"CarthageSoftware\\Application",
"CarthageSoftware\\UI",
"CarthageSoftware\\Infrastructure"
]
# 为命名空间组创建可重用的别名。
[guard.perimeter.layers]
core = [
"@native",
"Psl\\**"
]
psr = [
"Psr\\**"
]
framework = [
"Symfony\\**",
"Doctrine\\**"
]
# 为特定命名空间定义依赖规则。
[[guard.perimeter.rules]]
namespace = "CarthageSoftware\\Domain"
permit = [
"@layer:core"
]
[[guard.perimeter.rules]]
namespace = "CarthageSoftware\\Application"
permit = [
"@layer:core",
"@layer:psr"
]
[[guard.perimeter.rules]]
namespace = "CarthageSoftware\\Infrastructure"
permit = [
"@layer:core",
"@layer:psr",
"@layer:framework"
]
[[guard.perimeter.rules]]
namespace = "CarthageSoftware\\Tests"
permit = [
"@all"
]
运行 mago guard 来检查架构违规。这有助于通过以下方式维护干净的架构:
Mago 1.0.0 已 生产就绪,并被公司每天分析 数百万行 PHP 代码。该工具链已在各种代码库中经过实战测试,从遗留单体到现代框架。
将静态分析引入现有代码库可能令人不知所措。Mago 支持 baseline,让您可以:
mago analyze --generate-baselinemago analyze --baseline baseline.toml我们致力于快速修复报告的问题。大多数 bug 报告在 1-2 天 内解决。虽然偶尔会出现假阳性,但我们将其视为高优先级 bug。
此版本自最后一个发布候选版以来的变化包括:
properties-of<T> 现在正确扩展为 array<non-empty-string, mixed>,用于泛型对象约束Mago 比传统的 PHP 工具快得多。在 wordpress-develop 代码库上:
分析器 | 时间 |
|---|---|
Mago | 3.88s |
Psalm | 45.53s |
PHPStan | 120.35s |
Mago 在不到 4 秒内分析整个 WordPress 代码库——比 Psalm 快 12 倍,比 PHPStan 快 31 倍。
有关 linter 和 formatter 的完整基准测试,请参阅 mago.carthage.software/benchmarks](https://mago.carthage.software/benchmarks

curl --proto '=https' --tlsv1.2 -sSfO https://carthage.software/mago.sh && bash mago.sh
brew install carthage-software/tap/mago
composer require --dev carthage-software/mago
cargo install mago
有关更多安装选项,请参阅 安装指南。
mago init
mago lint
mago analyze
mago format
有关全面文档,请访问 mago.carthage.software。
1.0.0 版本只是开始。我们的路线图包括: