JQL lexer, parser, listener and visitor

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.
``typescript
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();
`sh`
yarn add @atlassianlabs/jql-parser
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
`typescript
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
`typescript
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
implements JQLParserVisitor
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);
``
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.