52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
const recast = require("recast");
|
|
const babylon = require("babylon");
|
|
const Printer = require("./src/printer").Printer;
|
|
const flowParser = require("flow-parser");
|
|
|
|
var babylonOptions = {
|
|
sourceType: 'module',
|
|
allowImportExportEverywhere: false,
|
|
allowReturnOutsideFunction: false,
|
|
plugins: [
|
|
'asyncFunctions',
|
|
'asyncGenerators',
|
|
'classConstructorCall',
|
|
'classProperties',
|
|
'decorators',
|
|
'doExpressions',
|
|
'exponentiationOperator',
|
|
'exportExtensions',
|
|
'flow',
|
|
'functionSent',
|
|
'functionBind',
|
|
'jsx',
|
|
'objectRestSpread',
|
|
'trailingFunctionCommas'
|
|
]
|
|
};
|
|
|
|
module.exports = {
|
|
format: function(text, opts={}) {
|
|
let { tabWidth = 2, printWidth = 80 } = opts;
|
|
|
|
// const ast = recast.parse(text, {
|
|
// parser: {
|
|
// parse: function(source) {
|
|
// return babylon.parse(source, babylonOptions);
|
|
// }
|
|
// }
|
|
// });
|
|
const ast = flowParser.parse(text);
|
|
if(ast.errors.length > 0) {
|
|
let msg = ast.errors[0].message + " on line " + ast.errors[0].loc.start.line
|
|
if(opts.filename) {
|
|
msg += " in file " + opts.filename;
|
|
}
|
|
throw new Error(msg);
|
|
}
|
|
|
|
const printer = new Printer({ tabWidth, wrapColumn: printWidth });
|
|
return printer.printGenerically(ast).code;
|
|
}
|
|
};
|