in src/esprima.ts [30:80]
export function parse(code: string, options, delegate) {
let commentHandler: CommentHandler | null = null;
const proxyDelegate = (node, metadata) => {
if (delegate) {
delegate(node, metadata);
}
if (commentHandler) {
commentHandler.visit(node, metadata);
}
};
let parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;
let collectComment = false;
if (options) {
collectComment = (typeof options.comment === 'boolean' && options.comment);
const attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);
if (collectComment || attachComment) {
commentHandler = new CommentHandler();
commentHandler.attach = attachComment;
options.comment = true;
parserDelegate = proxyDelegate;
}
}
let isModule = false;
if (options && typeof options.sourceType === 'string') {
isModule = (options.sourceType === 'module');
}
let parser: Parser;
if (options && typeof options.jsx === 'boolean' && options.jsx) {
parser = new JSXParser(code, options, parserDelegate);
} else {
parser = new Parser(code, options, parserDelegate);
}
const program = isModule ? parser.parseModule() : parser.parseScript();
const ast = program as any;
if (collectComment && commentHandler) {
ast.comments = commentHandler.comments;
}
if (parser.config.tokens) {
ast.tokens = parser.tokens;
}
if (parser.config.tolerant) {
ast.errors = parser.errorHandler.errors;
}
return ast;
}