jsdoc/packages/jsdoc-parse/lib/ast-builder.js
Jeff Williams 65e6db3ba4 refactor: move ast-builder and ast-node to @jsdoc/parse
BREAKING CHANGE: Modules no longer exist in jsdoc package.
2020-12-24 16:05:58 -08:00

66 lines
1.6 KiB
JavaScript

const _ = require('lodash');
const babelParser = require('@babel/parser');
const { log } = require('@jsdoc/util');
// Exported so we can use them in tests.
const parserOptions = exports.parserOptions = {
allowAwaitOutsideFunction: true,
allowImportExportEverywhere: true,
allowReturnOutsideFunction: true,
allowSuperOutsideMethod: true,
allowUndeclaredExports: true,
plugins: [
'asyncGenerators',
'bigInt',
'classPrivateMethods',
'classPrivateProperties',
'classProperties',
['decorators', {
decoratorsBeforeExport: true
}],
'doExpressions',
'dynamicImport',
'estree',
'exportDefaultFrom',
'exportNamespaceFrom',
'functionBind',
'functionSent',
'importMeta',
'jsx',
'logicalAssignment',
'nullishCoalescingOperator',
'numericSeparator',
'objectRestSpread',
'optionalCatchBinding',
'optionalChaining',
['pipelineOperator', {
proposal: 'minimal'
}],
'throwExpressions'
],
ranges: true
};
function parse(source, filename, sourceType) {
let ast;
const options = _.defaults({}, parserOptions, {sourceType});
try {
ast = babelParser.parse(source, options);
}
catch (e) {
log.error(`Unable to parse ${filename}: ${e.message}`);
}
return ast;
}
// TODO: docs
class AstBuilder {
// TODO: docs
static build(source, filename, sourceType) {
return parse(source, filename, sourceType);
}
}
exports.AstBuilder = AstBuilder;