ericsssan/ez

GitHub: ericsssan/ez

Ez 是用 Zig 实现的高性能 JS/TS linter,通过零拷贝 AST 共享让现有 ESLint 插件无需重写即可高速运行。

Stars: 0 | Forks: 0

# Ez 一个用 Zig 编写的高性能 JavaScript/TypeScript 解析器和 linter,配备零拷贝的 ESLint 插件运行器,允许你运行任何 ESLint 插件而无需重新实现其规则。 ## 解析器一致性 | 测试套件 | 必须解析 | 必须拒绝 | 备注 | |-------|-----------|-------------|-------| | tc39/test262-parser-tests | 3,966/3,966 (100%) | 1,387/1,391 (99.7%) | 6 个已知的过期测试被跳过 | | TypeScript | 3,466/3,466 (100%) | 583/1,009 (57.8%) | 1,432 个被跳过(decorators 等) | | Babel (JS) | 3,911/4,122 (94.9%) | 1,583/1,587 (99.7%) | 2,871 个被跳过(JSX/TS/proposals) | “必须拒绝”衡量了解析器是否正确地对无效代码报告解析错误。TypeScript 较低的“必须拒绝”得分(57.8%)反映了其缺乏针对 TS 的特定错误检测——ez 能在不崩溃的情况下解析代码,但尚未能诊断出所有的 TypeScript 语义/语法违规。 ## 功能 - **Zig 原生解析器** — SIMD 加速的词法分析器、arena 分配、MultiArrayList AST(结构体数组布局) - **语义分析** — 作用域树、符号表、引用追踪 - **零拷贝 JS 桥接** — AST 作为原始 `ArrayBuffer` 共享;Node.js 读取时无需复制或序列化 - **ESLint 插件运行器** — 通过 `require()` 加载任何 ESLint 插件,并针对 ez AST 运行其规则 - **兼容 ESTree 的节点视图** — 命名字段获取器(`node.test`、`node.consequent`、`node.body` 等)、`node.parent`、`node.range`、`node.loc` - **AST 选择器** — visitor keys 中支持 `esquery` 风格的选择器(`"IfStatement > BlockStatement"`、`"CallExpression[callee.name='require']"`) - **自动修复** — `--fix` 原地应用规则提供的修复 - **完整的 SourceCode API** — `getText()`、`getTokenBefore/After()`、`getScope()`、`getAncestors()` ## ESLint 插件兼容性 已针对当前版本进行测试: | 插件 | 通过的规则数 | |--------|---------------| | `eslint` (核心) | 292/292 | | `eslint-plugin-n` | 43/43 | | `eslint-plugin-es-x` | 208/208 | | `eslint-plugin-import` | 45/46 | ## 快速开始 ### 构建原生模块 ``` zig build # builds zig-out/lib/libez.{dylib,so,dll} ``` ### 安装 JS 依赖 ``` cd js && npm install ``` ### 运行 lint 规则 ``` # 对文件或目录运行所有 eslint 核心规则 node js/lint.js --eslint-plugin eslint src/ # 运行特定规则 node js/lint.js --eslint-plugin eslint --rule eqeqeq src/index.js # 运行第三方 plugin node js/lint.js --eslint-plugin eslint-plugin-unicorn src/ # TypeScript-eslint plugin node js/lint.js --eslint-plugin @typescript-eslint/eslint-plugin src/ # 多个 plugins node js/lint.js -p eslint -p eslint-plugin-n src/ # 应用 autofixes node js/lint.js --eslint-plugin eslint --fix src/ # JSON 输出 node js/lint.js --eslint-plugin eslint --format=json src/ | jq . # 使用 config file 配置 rule 选项 node js/lint.js --eslint-plugin eslint --config .eslintrc.json src/ ``` ### CLI 选项 ``` --eslint-plugin, -p Load ESLint plugin (repeatable) --rule, -r Only run rules matching this name (repeatable) --config, -c ESLint config file (.eslintrc.json) for rule options --format=json Output JSON array instead of text --fix Apply autofixes to files (writes in place) --help, -h Show help ``` ## 工作原理 Ez 将其 AST 序列化为一个扁平的 `ArrayBuffer`,并直接与 Node.js 共享——没有 JSON,也没有拷贝。JS 端通过对同一内存的 Typed Array 视图读取节点标签、token 和额外数据。ESLint 插件规则像往常一样调用 `context.report()`;ez 收集这些报告并对其进行格式化。 有关完整架构的详细信息,请参阅 [DESIGN.md](DESIGN.md):MultiArrayList AST 布局、SIMD 词法分析器、arena 分配以及 JS 桥接协议。 ## 环境要求 - Zig `0.16.0-dev` 或更高版本 - Node.js 18+(用于 JS 插件运行器) ## 许可证 MIT
标签:CMS安全, DoH影响, JavaScript, Linter, MITM代理, pptx, TypeScript, Zig, 云安全监控, 动态分析, 安全插件, 数据可视化, 静态分析