Package Exports
- @atlassianlabs/jql-parser
- @atlassianlabs/jql-parser/dist/cjs/index.js
- @atlassianlabs/jql-parser/dist/esm/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@atlassianlabs/jql-parser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
JQL Parser
This library contains auto-generated sources from the antlr4ts library using the JQL ANTLR4 grammar. It enables consumers to parse a JQL query into a parse tree.
Usage
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();
Installation
yarn add @atlassianlabs/jql-parser
Documentation
Inspecting the parse tree
A JQL parse tree can be inspected using the JQLParserListener
or JQLParserVisitor
, you can read
about the differences between the visitor/listener approaches here.
Listener Approach
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);
Visitor Approach
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);
Support
For developers outside of Atlassian looking for help, or to report issues, please make a post on the community forum. We will monitor the forums and redirect topics to the appropriate maintainers.
License
Copyright (c) 2021 - 2022 Atlassian and others. Apache 2.0 licensed, see LICENSE file.