Package Exports
- java-parser
- java-parser/package.json
- java-parser/src/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 (java-parser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
java-parser
A Java Parser implemented in JavaScript using the Chevrotain Parsing ToolKit. It outputs a Concrete Syntax Tree, rather than an Abstract Syntax Tree.
Currently the main focus of this project is to be used in implementing a prettier Java plugin. But it could also be used as the basis for other Java related tools in the JavaScript ecosystem.
Installation
npm install java-parser --save-dev
or
yarn add java-parser --dev
Usage
Parsing
const { parse } = require("java-parser");
const javaText = `
public class HelloWorldExample{
public static void main(String args[]){
System.out.println("Hello World !");
}
}
`;
const cst = parse(javaText);
// explore the CST
Traversing the CST
See relevant Chevrotain documentation on CST Traversal.
const {
BaseJavaCstVisitor,
BaseJavaCstVisitorWithDefaults
} = require("java-parser");
// Use "BaseJavaCstVisitor" if you need to implement all the visitor methods yourself.
class LambdaArrowsPositionCollector extends BaseJavaCstVisitorWithDefaults {
constructor() {
super();
this.customResult = [];
this.validateVisitor();
}
lambdaExpression(ctx) {
// Collects all the starting offsets of lambda arrows in lambdas with short (no parenthesis)
// single argument lists: e.g:
// - n -> n*n (will be collected)
// - (n) -> n*n (not collected)
if (ctx.lambdaParameters[0].children.Identifier) {
this.customResult.push(ctx.Arrow[0].startOffset);
}
}
}
const lambdaArrowsCollector = new LambdaArrowsPositionCollector();
// The CST result from the previous code snippet
lambdaArrowsCollector.visit(cst);
lambdaArrowsCollector.customResult.forEach(arrowOffset => {
console.log(arrowOffset);
});