最高参数
销售力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 (英语),虽然现在使用的这个版本与原版本明显不同.