carthage-software/mago
Mago is an extremely fast PHP linter, formatter, and static analyzer written in Rust. It helps teams catch issues early, enforce consistent style, and improve code quality across projects, with multiple install options like script, Homebrew, Composer, and Cargo.
+++ title = "Linter" description = "linter 的功能,它与分析器的区别,以及接下来的阅读路径。" nav_order = 10 nav_section = "工具" nav_subsection = "Linter" +++
Mago 的 linter 是一个精心整理的规则目录,用于发现代码风格问题、不一致以及代码异味。大多数问题都附带自动修复,因此你可以用一条命令清理大型代码库。
两个工具都用于发现问题,但它们工作在不同的层面。
linter 关注代码的形态。它强制执行团队约定,标记冗余结构,并建议更现代的语法。它不需要知道代码在运行时具体做什么,只需要看源码长什么样。
分析器会构建整个代码库的语义模型。它知道函数返回什么类型,类有哪些属性,什么可以抛出异常。它能发现逻辑上的不可能,例如在某个类型上调用根本不存在的方法。
如果把代码比作一篇文章,linter 负责语法校对,而分析器负责事实核查。
Mago 分三个阶段处理文件:解析、语义检查、lint。
解析器有意做得宽容。它能读取标准 PHP 编译器会拒绝的语法,包括来自未来 PHP 版本的特性。语义检查器是第二阶段,用于捕获那些被宽容解析器放过、但 PHP 会判定为致命错误的问题:
enum Foo: array {}。使用 --semantics 仅运行解析器和语义检查器:
mago lint -s
它是 php -l 的一个更快、更彻底的替代品,也是在启用完整规则目录之前,把 Mago 介绍给一个代码库的低门槛方式。
--fix,Mago 就会改写受影响的文件。不太安全的类别需要通过显式标志开启。How can I help you explore Laravel packages today?