@apexdevtools/apex-parser

中文文档
5.3.0发布于 2026/10/16BSD-3-ClauseTypeScriptESM + CJS近 30 天下载 16.4万

Appex 语言的 Javascript 解析器

中文使用文档
文档目录12 节
  1. 安装
  2. 马文
  3. 国家预防机制
  4. 使用量
  5. 探索解析树( TypeScript)
  6. 抓取语法错误
  7. SOSL 引用
  8. 发展
  9. 先决条件
  10. 大楼
  11. 测试
  12. 源代码许可证( L)

最高参数

销售力Apex(包括触发器和内置SOQL/SOSL)的解析器. 这是基于 ANTLR 4号卫星 语法,看 antlr/BaseApexParser.g4. 目前为Java和JavaScript/TypeScript目标被打包.

套件包括ANTLR4所生成的型号外加可选外加以方便. TypeScript 包导出 ANTLR 类型的别名, 而两个包的抽象度类似 ApexParserFactory 财务报告和审定财务报表 ApexErrorListener。下面和测试班中的例子很少.

语法旨在与平台编译器相匹配. 如果它故意不这样做,差异记录在 销售行为的差异。 。 。 .

安装

马文

<dependency>
    <groupId>io.github.apex-dev-tools</groupId>
    <artifactId>apex-parser</artifactId>
    <version><!-- version --></version>
</dependency>

国家预防机制

npm i @apexdevtools/apex-parser

Npm 包装多个 JavaScript 输出 :

  • 现代节点和捆绑机的无害环境管理,由 import。 。 。 .
  • 常见JS require。 。 。 .
  • 由浏览器意识捆绑者选择的浏览器ESM捆绑.
  • TypeScript 为根包和导出子路径声明.

这些通过软件包曝光 exports 因此,大多数消费者应该从软件包名称而不是从 dist 路径 :

import { ApexParserFactory } from "@apexdevtools/apex-parser";

一般JS消费者可以使用 require数字 :

const { ApexParserFactory } = require("@apexdevtools/apex-parser");

浏览器捆绑包括解析器 API, 但不包括节点文件检查帮助器, 如 check 财务报告和审定财务报表 checkProject。 。 。 .

使用量

ApexParser 访问树的切入点 :

  • compilationUnit()一个类文件.
  • triggerUnit(),触发文件.
  • anonymousUnit(),一个最高脚本文件.
  • query(),一个原始的SOQL查询.

探索解析树( TypeScript)

import {
  ApexParserBaseListener,
  ApexParserBaseVisitor,
  ApexParseTreeWalker,
  ApexParserFactory,
} from "@apexdevtools/apex-parser";

const parser = ApexParserFactory.createParser("public class Hello {}");

/*
 * Use a visitor. Return value and manual control.
 */
class Visitor extends ApexParserBaseVisitor<any> {}

const visitor = new Visitor();
visitor.visit(parser.compilationUnit());


/*
 * Or walk with listener. Enter/exit operations - for whole tree.
 */
class Listener extends ApexParserBaseListener {}

const listener = new Listener();
ApexParseTreeWalker.DEFAULT.walk(listener, parser.compilationUnit());

抓取语法错误

Lexer出错(如无效的字符串逃生序列)只报告给附在Lexer上的收听者,而解析器出错只报告给附在解析器上的收听者. 从一个听众那里捕捉到两个,使用 createLexerAndParser,这给听者 两者:

import { ApexParserFactory, ApexErrorListener } from "@apexdevtools/apex-parser";

class MyListener extends ApexErrorListener {
  apexSyntaxError(line: number, column: number, msg: string): void {
    console.log(`${line}:${column} ${msg}`);
  }
}

const { parser } = ApexParserFactory.createLexerAndParser(source, new MyListener());
parser.compilationUnit();

Java API 等同:

ApexErrorListener listener = new MyListener();
LexerAndParser pair = ApexParserFactory.createLexerAndParser(
  CharStreams.fromString(source), listener);
pair.getParser().compilationUnit();

SOSL 引用

SOSL FIND在嵌入Apex时使用"作为引用字符,在API括号中使用:

Find {something} RETURNING Account

要解析 API 格式,有一个替代解析规则, soslLiteralAlt,可以用来代替 soslLiteral。见 SOSLParserTest 对于这些差异的一些例子.

发展

先决条件

  • JDK 11+(用于ANTR工具)
  • 马文
  • ^20.19.0, ^22.13.0, 或 >=24

大楼

外包包含脚本来构建两种分布:

# Run once - prepare for dev (installs deps, runs antlr gen)
npm run init

# Run antlr gen, compile and test
npm run build

或者,你可以设置,然后建立 每一个分布:

npm run init:npm
npm run build:npm

npm run init:jvm
npm run build:jvm

测试

单位测试

测试的更多选项 :

# From ./npm
npm run build
npm test
# File and test name regex filtering
npm test -- ApexParserTest -t Expression

# From ./jvm
mvn test

系统测试

系统测试使用一组样本项目 apex-samples 仓库。 执行 README 指令 apex-samples 以查看该选项所使用的版本标签中的子模块 构建工作流程两种包必须事先建造,因为js系统测试也使罐子产出.

为了进行测试:

# Set SAMPLES env var to samples repo location
export SAMPLES=<abs path to apex-samples>

# From root dir
npm run build
npm run systest

与快照有关的系统测试失败可能突出回归. 如果预期出错或样本已发生变化,则使用 npm run systest:update 然后执行修改.

源代码许可证( L)

所有源代码都使用3 Clause BSD许可证. 唯一包括的第三方成分是Apex Antlr4语法原出自 Tooling-force.com (英语),虽然现在使用的这个版本与原版本明显不同.

版本与发布记录

@apexdevtools/apex-parser 共发布 24 个版本,首次发布于 2022/06/15;过去 12 个月发布了 5 个版本。

版本发布日期距今
5.3.0latest2026/10/1622 天前
5.2.02026/08/232 个月前
5.1.02026/07/044 个月前
5.1.0-beta.1beta2026/05/175 个月前
5.0.02026/04/226 个月前
5.0.0-beta.52025/08/141.2 年前

关于 @apexdevtools/apex-parser 的常见问题

@apexdevtools/apex-parser 是什么?

Appex 语言的 Javascript 解析器

如何安装 @apexdevtools/apex-parser?

在项目目录运行 npm install @apexdevtools/apex-parser,或使用 pnpm add / yarn add / bun add。

@apexdevtools/apex-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apexdevtools/apex-parser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@apexdevtools/apex-parser 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || ^22.13.0 || >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@apexdevtools/apex-parser 可以商用吗?

@apexdevtools/apex-parser 使用 BSD-3-Clause 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括,不构成法律意见,请以许可原文为准。

@apexdevtools/apex-parser 的下载量有多少?

根据 npm 官方下载统计,@apexdevtools/apex-parser 在 2026/10/06 – 2026/11/04 这 30 天内被下载 164,266 次,日均约 5,476 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apexdevtools/apex-parser 还在维护吗?

最新版本 5.3.0 发布于 2026/10/16(22 天前);至今共发布 24 个版本,其中过去 12 个月发布了 5 个;首次发布于 2022/06/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。