JQL 解析器
此库包含自定义源 蚂蚁4ts 使用 JQL ANTRR4 语法的库。 它使消费者能够将一个 JQL 查询解析成一个剖析树.
使用量
import { CharStreams, CommonTokenStream } from 'antlr4ts';
import { JQLLexer, JQLParser } from '@atlassianlabs/jql-parser';
// Create the lexer and parser
const jqlText = "project = JQL";
const charStream = CharStreams.fromString(jqlText);
const lexer = new JQLLexer(charStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new JQLParser(tokenStream);
// Parse the input, where `jqlQuery` is the entry point
const parsedJQLTree = parser.jqlQuery();
安装
yarn add @atlassianlabs/jql-parser
文档
检查剖析树
使用 JQLParserListener 或者说 JQLParserVisitor,你会读
关于来访者/听众方法之间的差异 这里。 。 。 .
听众办法
import { JQLParserListener, JqlQueryContext } from '@atlassianlabs/jql-parser';
import { ParseTreeWalker } from 'antlr4ts/tree/ParseTreeWalker';
class EnterQueryListener implements JQLParserListener {
enterJqlQuery: (context: JqlQueryContext) {
console.log(`Query start line number ${context._start.line}`);
// ...
}
// other enterX functions...
}
// Create the listener
const listener: JQLParserListener = new EnterQueryListener();
// Use the entry point for listeners on the parsed JQL tree
ParseTreeWalker.DEFAULT.walk(listener, parsedJQLTree);
访客方式
import { JQLParserVisitor, JqlOperandContext } from '@atlassianlabs/jql-parser';
import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';
// Extend the AbstractParseTreeVisitor to get default visitor behaviour
class CountOperandsVisitor extends AbstractParseTreeVisitor<number>
implements JQLParserVisitor<number> {
defaultResult() {
return 0;
}
aggregateResult(aggregate: number, nextResult: number) {
return aggregate + nextResult;
}
visitJqlOperand(context: JqlOperandContext): number {
return 1 + super.visitChildren(context);
}
}
// Create the visitor
const countOperandsVisitor = new CountOperandsVisitor()
// Use the visitor entry point with the parsed JQL tree
const numberOfOperands = countOperandsVisitor.visit(parsedJQLTree);
支助
对于在Atlassian以外的开发者寻求帮助或报告问题, 请在社区论坛发表文章。 。 。 . 我们将监测这些论坛,并重新将专题分配给适当的维护者.
许可证
版权(c) 2021-2022 阿特拉斯人等. Apache 2.0 许可证,见 自由主义 文档.