celerrate/celerrate

GitHub: celerrate/celerrate

Celerrate 是一款用 Rust 实现的极速 PHP 多合一工具链,旨在以增量语义引擎为核心,为 PHP 项目提供高性能的静态分析、格式化、LSP 及自动化重构能力。

Stars: 0 | Forks: 0

# Celerrate [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/celerrate/celerrate/actions/workflows/ci.yml) [![最新发布](https://img.shields.io/github/v/release/celerrate/celerrate)](https://github.com/celerrate/celerrate/releases/latest) [![平台支持](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-555)](https://github.com/celerrate/celerrate/releases/latest) [![许可证:MIT 或 Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](#license) **一款极其快速、多合一的 PHP 工具链,使用 Rust 编写。** Celerrate 在 1.533 秒内完成对 130 万行 PHP 代码的冷启动类型检查, 并在你修改函数体后,仅需 0.521 秒即可完成检查。 该数据为端到端测量结果,测量协议已提交至代码库中。 ## 快速开始 从[最新发布版本](https://github.com/celerrate/celerrate/releases/latest)下载适用于你平台的压缩包, 解压后,在 Composer 项目中运行二进制文件: ``` celerrate check . ``` 无需任何配置。Composer 发现机制会自动找到你的代码、 依赖项以及所使用的 PHP 版本范围: ``` src/Service/Search.php:27:16 CEL0021 `array_find` requires PHP 8.4, but the project's minimum PHP version is 8.1 src/Controller/PostController.php:42:19 CEL0018 unknown class `App\Service\Mailer` src/Notification/Mailer.php:31:9 CEL0034 accessing `format` on a possibly null `DateTimeImmutable|null` 0 notices, 3 diagnostics ``` ## 性能表现 Bar chart of median wall clock on symfony/demo: cold full analysis 1.533 seconds, warm with one function body edited 0.521 seconds 数据基于已提交的[基准测试协议](benchmarks/PROTOCOL.md) 在 symfony/demo(9447 个 PHP 文件,130 万行代码,包含 vendor 目录)上测得, 开启类型推断,并运行于协议指定的硬件上: | 场景 | 中位挂钟时间 | | --- | --- | | 冷启动全量分析 | 1.533 s | | 热启动,修改单个函数体 | **0.521 s** | | 热启动,修改单个签名 | 0.471 s | 所有数据均为完整的 CLI 运行时间:包括进程启动、缓存加载、 分析和报告生成。在该规模下未发布与其他工具的对比结果; 协议中说明了具体原因。 ## 目前支持的功能 `celerrate check .` 会报告五类诊断信息 ([标识符参考](docs/diagnostics.md)): - **未知符号**:引用了无法解析的类、函数或常量, 此项检查会综合考量你的项目、Composer 依赖以及内置的 PHP stubs。 - **PHP 版本限制**:使用了不在 `composer.json` 声明的 PHP 版本范围内的符号或语法,包括已移除和已弃用的内容。 - **未知成员**:在接收者的推断类型上不存在的方法、 属性、类常量和 enum cases,对动态内容保持静默, 能够识别 `__call`/`__get` 和 `@property`/`@method` docblocks。 - **空值特性(Nullability)**:解引用可能为 `null` 的值, 通过流 narrowing(`instanceof`、`isset()`、`??`、`?->` 链、 `match`、提前返回、断言注解)来决定在每个使用点是否仍可为空。 - **参数类型**:针对每个参数的可赋值性和参数数量检查, 支持命名参数,并遵循每个文件的 `declare(strict_types)` 模式。 其他相关功能: - **遵循你的注解**:支持标准 PHPDoc、PHPStan 变体 以及 Psalm 同义词,通过内置的 [PHPDoc bridge](docs/phpdoc-bridge.md)实现,包括内联 抑制规则(`@phpstan-ignore-line`、`@psalm-suppress` 等)。 - **过程间推断**:声明的类型会被信任, 未加注解的返回类型会在整个调用图中进行推断, 泛型会为了精确度而被解析(但绝不会对泛型本身报错)。 - **零配置**:Composer 发现机制会自动推导需要分析的内容 以及检查时所依据的 PHP 版本。已安装的依赖会被索引,但绝不会对其报错。 - **`--watch`**:在每次文件更改时重新分析。 - **持久化缓存**(`.celerrate/cache/`,自动忽略自身):热启动 运行会跨进程复用所有未发生更改的内容,包括推断出的类型。 ### 尚未支持的功能 尚无 lint 规则、格式化工具、语言服务器、配置 文件、基准(baseline),除终端报告外也无其他输出格式。 不报告泛型不匹配(泛型仅用于提升精度), 未加注解的参数会被视为 `mixed`。这些是接下来规划的 子项目,将按[路线图](#roadmap)中的顺序推进。 ## 单引擎,全工具链 每一条 Celerrate 命令都是对同一个增量语义模型的视图。 只需索引项目一次;其他所有操作都是查询: - **`celerrate check`**:具备过程间类型推断的静态分析, 以及 lint、安全污点和架构规则组。 一条命令即可回答“我的代码没问题吗?”。 - **`celerrate format`**:一款具有坚定主见、无损的格式化工具。 - **`celerrate lsp`**:提供与 CI 相同诊断功能的语言服务器, 且响应速度与你的打字速度同步。 - **`celerrate migrate` / `celerrate generate`**:自动化重构 和语义化代码生成。 速度始终是其一大特色:Rust 核心,默认并行, 设计上即为增量式。诊断旨在提供指导:包含带有注解的 代码跨度、引擎的推理过程、具体的建议以及安全的自动 修复。可扩展性是设计之初就考虑到的:支持使用 Rust 编写的第一方插件, 以及通过沙箱化的 WASM API 接入的社区插件。 ## 值得信赖的设计 这些数字背后的工程规则在 CI 中受到严格的机械化约束: - **零 panic**:clippy 在整个工作区内禁止使用 `unwrap`、`expect`、索引操作和 `panic`;全面禁用 `unsafe` 代码。 - **任何输入都无法使其崩溃**:解析器和加载器只会产生诊断信息, 绝不会引发失败。模糊测试(Fuzzing)确保它们不出差错。 - **确定性**:每一项分析结果都是其输入的纯函数。 输入相同,在任何机器上的输出也必然相同。 - **设计上的增量式**:失效部分是精确计算得出的,绝非 臆测;热启动运行会复用所有未更改的内容。 - **测量而非自夸**:性能数据均来源于已提交的、 可复现的基准测试协议。 - **测试驱动**:没有测试需求,就没有生产代码。 ## 兼容性 Celerrate 面向 PHP 8.1+ 项目。它定义了自己的类型注解 规范,并提供第一方的 [PHPDoc bridge](docs/phpdoc-bridge.md), 该 bridge 默认开启,确保现有的带注解代码库在第一天就能正常运行。 ## 路线图 每次专注一个核心支柱,按以下顺序推进: 1. **`celerrate check`**:静态分析引擎是首个 公开交付成果(自 v0.0.1 起预览,自 v0.0.3 起具备类型感知能力);lint、污点和架构规则组均构建于其上。 2. **`celerrate format`**:格式化工具,待无损语法树 经分析器验证后推出。 3. **`celerrate lsp`**:语言服务器,复用同一个 增量引擎。 4. **`celerrate migrate` / `celerrate generate`**:重构和代码 生成,放在最后是因为它们依赖于上述所有功能。 ## 许可证 采用以下双重许可之一: - MIT 许可证 ([LICENSE-MIT](LICENSE-MIT)) - Apache 许可证,版本 2.0 ([LICENSE-APACHE](LICENSE-APACHE)) 由你自行选择。“Celerrate”是 JDevelop 的商标。 ### 贡献 除非你明确声明,否则根据 Apache-2.0 许可证的规定,你出于包含在此作品中的目的而 有意提交的任何贡献,均应按上述方式进行双重许可,不附加任何 额外的条款或条件。
标签:LSP, OpenVAS, PHP, Rust, 云安全监控, 可视化界面, 开发工具链, 网络流量审计, 通知系统, 静态分析