UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

65 lines (59 loc) 7.47 kB
import { original, source } from '../util/symbols.mjs' export default function reprint(generator, node) { const { CodeGenerator, default: generate } = generator const gen = new CodeGenerator(node) if (gen._generator instanceof Object) { const Generator = gen._generator.constructor class Reprinter extends Generator { constructor(ast, opts = {}, code) { super(ast, opts, code) } print( node, parent, noLineTerminatorAfter, trailingCommentsLineOffset, forceParens ) { // Nodes with typeAnnotations are screwy in Babel... if (node && !node.typeAnnotation) { const orig = node[original] const src = node[source] if (orig && src) { const { start, end } = orig if (Number.isInteger(start) && Number.isInteger(end)) { const origPrintMethod = this[node.type] try { // massive hack to override the node printing with // the original source formatting, // while letting @babel/generator decide if it needs // to wrap in parens etc this[node.type] = () => this._append(src.substring(start, end), false) super.print( node, parent, noLineTerminatorAfter, trailingCommentsLineOffset, forceParens ) return } finally { this[node.type] = origPrintMethod } } } } super.print( node, parent, noLineTerminatorAfter, trailingCommentsLineOffset, forceParens ) } } return new Reprinter(node).generate(node) } return generate(node) } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcmlnaW5hbCIsInNvdXJjZSIsInJlcHJpbnQiLCJnZW5lcmF0b3IiLCJub2RlIiwiQ29kZUdlbmVyYXRvciIsImRlZmF1bHQiLCJnZW5lcmF0ZSIsImdlbiIsIl9nZW5lcmF0b3IiLCJPYmplY3QiLCJHZW5lcmF0b3IiLCJjb25zdHJ1Y3RvciIsIlJlcHJpbnRlciIsImFzdCIsIm9wdHMiLCJjb2RlIiwicHJpbnQiLCJwYXJlbnQiLCJub0xpbmVUZXJtaW5hdG9yQWZ0ZXIiLCJ0cmFpbGluZ0NvbW1lbnRzTGluZU9mZnNldCIsImZvcmNlUGFyZW5zIiwidHlwZUFubm90YXRpb24iLCJvcmlnIiwic3JjIiwic3RhcnQiLCJlbmQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJvcmlnUHJpbnRNZXRob2QiLCJ0eXBlIiwiX2FwcGVuZCIsInN1YnN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYWJlbC9yZXByaW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJhYmVsR2VuZXJhdG9yIGZyb20gJ0BiYWJlbC9nZW5lcmF0b3InXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBvcmlnaW5hbCwgc291cmNlIH0gZnJvbSAnLi4vdXRpbC9zeW1ib2xzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXByaW50KFxuICBnZW5lcmF0b3I6IHR5cGVvZiBiYWJlbEdlbmVyYXRvcixcbiAgbm9kZTogTm9kZVxuKTogeyBjb2RlOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHsgQ29kZUdlbmVyYXRvciwgZGVmYXVsdDogZ2VuZXJhdGUgfSA9IGdlbmVyYXRvclxuICBjb25zdCBnZW46IGFueSA9IG5ldyBDb2RlR2VuZXJhdG9yKG5vZGUgYXMgYW55KVxuICBpZiAoZ2VuLl9nZW5lcmF0b3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBjb25zdCBHZW5lcmF0b3IgPSBnZW4uX2dlbmVyYXRvci5jb25zdHJ1Y3RvclxuICAgIGNsYXNzIFJlcHJpbnRlciBleHRlbmRzIEdlbmVyYXRvciB7XG4gICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYXN0OiBOb2RlLFxuICAgICAgICBvcHRzOiBhbnkgPSB7fSxcbiAgICAgICAgY29kZT86IHN0cmluZyB8IHsgW2ZpbGVuYW1lOiBzdHJpbmddOiBzdHJpbmcgfVxuICAgICAgKSB7XG4gICAgICAgIHN1cGVyKGFzdCwgb3B0cywgY29kZSlcbiAgICAgIH1cbiAgICAgIHByaW50KFxuICAgICAgICBub2RlOiBOb2RlIHwgbnVsbCxcbiAgICAgICAgcGFyZW50PzogTm9kZSxcbiAgICAgICAgbm9MaW5lVGVybWluYXRvckFmdGVyPzogYm9vbGVhbixcbiAgICAgICAgdHJhaWxpbmdDb21tZW50c0xpbmVPZmZzZXQ/OiBudW1iZXIsXG4gICAgICAgIGZvcmNlUGFyZW5zPzogYm9vbGVhblxuICAgICAgKSB7XG4gICAgICAgIC8vIE5vZGVzIHdpdGggdHlwZUFubm90YXRpb25zIGFyZSBzY3Jld3kgaW4gQmFiZWwuLi5cbiAgICAgICAgaWYgKG5vZGUgJiYgIShub2RlIGFzIGFueSkudHlwZUFubm90YXRpb24pIHtcbiAgICAgICAgICBjb25zdCBvcmlnID0gKG5vZGUgYXMgYW55KVtvcmlnaW5hbF1cbiAgICAgICAgICBjb25zdCBzcmMgPSAobm9kZSBhcyBhbnkpW3NvdXJjZV1cbiAgICAgICAgICBpZiAob3JpZyAmJiBzcmMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gb3JpZ1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoc3RhcnQpICYmIE51bWJlci5pc0ludGVnZXIoZW5kKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmlnUHJpbnRNZXRob2QgPSB0aGlzW25vZGUudHlwZV1cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBtYXNzaXZlIGhhY2sgdG8gb3ZlcnJpZGUgdGhlIG5vZGUgcHJpbnRpbmcgd2l0aFxuICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBzb3VyY2UgZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAvLyB3aGlsZSBsZXR0aW5nIEBiYWJlbC9nZW5lcmF0b3IgZGVjaWRlIGlmIGl0IG5lZWRzXG4gICAgICAgICAgICAgICAgLy8gdG8gd3JhcCBpbiBwYXJlbnMgZXRjXG4gICAgICAgICAgICAgICAgdGhpc1tub2RlLnR5cGVdID0gKCkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChzcmMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCBmYWxzZSlcbiAgICAgICAgICAgICAgICBzdXBlci5wcmludChcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICBub0xpbmVUZXJtaW5hdG9yQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzTGluZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgIGZvcmNlUGFyZW5zXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpc1tub2RlLnR5cGVdID0gb3JpZ1ByaW50TWV0aG9kXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIucHJpbnQoXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgbm9MaW5lVGVybWluYXRvckFmdGVyLFxuICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHNMaW5lT2Zmc2V0LFxuICAgICAgICAgIGZvcmNlUGFyZW5zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXByaW50ZXIobm9kZSkuZ2VuZXJhdGUobm9kZSlcbiAgfVxuICByZXR1cm4gZ2VuZXJhdGUobm9kZSBhcyBhbnkpXG59XG4iXSwibWFwcGluZ3MiOiI7O0FBRUEsU0FBU0EsUUFBVCxFQUFtQkMsTUFBbkIsUUFBaUMsaUJBQWpDOztBQUVBLGVBQWUsU0FBU0MsT0FBVDtBQUNiQyxTQURhO0FBRWJDLElBRmE7QUFHSztFQUNsQixNQUFNLEVBQUVDLGFBQUYsRUFBaUJDLE9BQU8sRUFBRUMsUUFBMUIsS0FBdUNKLFNBQTdDO0VBQ0EsTUFBTUssR0FBUSxHQUFHLElBQUlILGFBQUosQ0FBa0JELElBQWxCLENBQWpCO0VBQ0EsSUFBSUksR0FBRyxDQUFDQyxVQUFKLFlBQTBCQyxNQUE5QixFQUFzQztJQUNwQyxNQUFNQyxTQUFTLEdBQUdILEdBQUcsQ0FBQ0MsVUFBSixDQUFlRyxXQUFqQztJQUNBLE1BQU1DLFNBQU4sU0FBd0JGLFNBQXhCLENBQWtDO01BQ2hDQyxXQUFXO01BQ1RFLEdBRFM7TUFFVEMsSUFBUyxHQUFHLEVBRkg7TUFHVEMsSUFIUztNQUlUO1FBQ0EsTUFBTUYsR0FBTixFQUFXQyxJQUFYLEVBQWlCQyxJQUFqQjtNQUNEO01BQ0RDLEtBQUs7TUFDSGIsSUFERztNQUVIYyxNQUZHO01BR0hDLHFCQUhHO01BSUhDLDBCQUpHO01BS0hDLFdBTEc7TUFNSDtRQUNBO1FBQ0EsSUFBSWpCLElBQUksSUFBSSxDQUFFQSxJQUFELENBQWNrQixjQUEzQixFQUEyQztVQUN6QyxNQUFNQyxJQUFJLEdBQUluQixJQUFELENBQWNKLFFBQWQsQ0FBYjtVQUNBLE1BQU13QixHQUFHLEdBQUlwQixJQUFELENBQWNILE1BQWQsQ0FBWjtVQUNBLElBQUlzQixJQUFJLElBQUlDLEdBQVosRUFBaUI7WUFDZixNQUFNLEVBQUVDLEtBQUYsRUFBU0MsR0FBVCxLQUFpQkgsSUFBdkI7WUFDQSxJQUFJSSxNQUFNLENBQUNDLFNBQVAsQ0FBaUJILEtBQWpCLEtBQTJCRSxNQUFNLENBQUNDLFNBQVAsQ0FBaUJGLEdBQWpCLENBQS9CLEVBQXNEO2NBQ3BELE1BQU1HLGVBQWUsR0FBRyxLQUFLekIsSUFBSSxDQUFDMEIsSUFBVixDQUF4QjtjQUNBLElBQUk7Z0JBQ0Y7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0EsS0FBSzFCLElBQUksQ0FBQzBCLElBQVYsSUFBa0I7Z0JBQ2hCLEtBQUtDLE9BQUwsQ0FBYVAsR0FBRyxDQUFDUSxTQUFKLENBQWNQLEtBQWQsRUFBcUJDLEdBQXJCLENBQWIsRUFBd0MsS0FBeEMsQ0FERjtnQkFFQSxNQUFNVCxLQUFOO2dCQUNFYixJQURGO2dCQUVFYyxNQUZGO2dCQUdFQyxxQkFIRjtnQkFJRUMsMEJBSkY7Z0JBS0VDLFdBTEY7OztnQkFRQTtjQUNELENBaEJELFNBZ0JVO2dCQUNSLEtBQUtqQixJQUFJLENBQUMwQixJQUFWLElBQWtCRCxlQUFsQjtjQUNEO1lBQ0Y7VUFDRjtRQUNGO1FBQ0QsTUFBTVosS0FBTjtRQUNFYixJQURGO1FBRUVjLE1BRkY7UUFHRUMscUJBSEY7UUFJRUMsMEJBSkY7UUFLRUMsV0FMRjs7TUFPRCxDQXBEK0I7O0lBc0RsQyxPQUFPLElBQUlSLFNBQUosQ0FBY1QsSUFBZCxFQUFvQkcsUUFBcEIsQ0FBNkJILElBQTdCLENBQVA7RUFDRDtFQUNELE9BQU9HLFFBQVEsQ0FBQ0gsSUFBRCxDQUFmO0FBQ0QifQ==