Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Mago Laravel Package

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.

View on GitHub
Deep Wiki
Context7

+++ title = "分析器" description = "分析器的功能,它与 linter 的区别,以及接下来的阅读路径。" nav_order = 10 nav_section = "工具" nav_subsection = "Analyzer" +++

分析器

一款面向 PHP 的静态分析引擎。它会构建整个项目的语义模型,然后遍历每个函数、方法和表达式,在代码运行之前捕获类型错误和逻辑上的不可能。

分析器与 linter 的对比

两个工具都用于发现问题,但它们工作在不同的层面。

linter 关注代码的形态:风格问题、不一致、代码异味。它不需要知道代码在运行时具体做什么。

分析器关注代码的含义。它跟踪每个变量在每个分支中的类型,知道一个类上每个方法实际返回什么,并跟随哪些异常会向外传播。它能捕获各种不可能的情形,例如在某个类型上调用根本不存在的方法、在需要 Order 处传入了 ?Order,或在已注解为绝不返回 null 的函数中返回 null

如果把代码比作一篇文章,linter 负责语法校对,而分析器负责事实核查。

分析器提供了什么

  • **类型推断。**即便类型提示不完整,分析器也能理解每个表达式的类型。它支持 Psalm 和 PHPStan 注解、泛型、条件类型以及流敏感的类型收窄。
  • **全程序级感知。**分析在整个项目范围内进行,因此跨文件的调用能暴露真实的签名不匹配。
  • **速度。**Rust 内核,并行化,几秒之内即可处理整个项目。
  • **启发式检查。**一组可配置的咨询性检查,关注那些算不上严格错误、但常常预示潜在 bug 的代码质量问题。

接下来读什么

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle