From ca68cbe7317765472a87c5e9e5f4e2c251249153 Mon Sep 17 00:00:00 2001 From: Cyrille David Date: Sat, 22 Aug 2020 05:35:51 +0200 Subject: [PATCH] Refactor and inline handlebars' postprocess file in parser file (#9021) --- src/language-handlebars/parser-glimmer.js | 24 +++++++++++++---- src/language-handlebars/postprocess.js | 33 ----------------------- 2 files changed, 19 insertions(+), 38 deletions(-) delete mode 100644 src/language-handlebars/postprocess.js diff --git a/src/language-handlebars/parser-glimmer.js b/src/language-handlebars/parser-glimmer.js index 007717e3c..d336a5c81 100644 --- a/src/language-handlebars/parser-glimmer.js +++ b/src/language-handlebars/parser-glimmer.js @@ -1,13 +1,27 @@ "use strict"; const createError = require("../common/parser-create-error"); -const postprocess = require("./postprocess"); -function parse(text, parsers, options) { - const { preprocess: glimmer, traverse } = require("@glimmer/syntax"); +/* from the following template: `non-escaped mustache \\{{helper}}` + * glimmer parser will produce an AST missing a backslash + * so here we add it back + * */ +function addBackslash(/* options*/) { + return { + name: "addBackslash", + visitor: { + TextNode(node) { + node.chars = node.chars.replace(/\\/, "\\\\"); + }, + }, + }; +} + +function parse(text) { + const { preprocess: glimmer } = require("@glimmer/syntax"); let ast; try { - ast = glimmer(text, { mode: "codemod" }); + ast = glimmer(text, { mode: "codemod", plugins: { ast: [addBackslash] } }); } catch (error) { const matches = error.message.match(/on line (\d+)/); /* istanbul ignore else */ @@ -20,7 +34,7 @@ function parse(text, parsers, options) { } } - return postprocess(ast, options, traverse); + return ast; } module.exports = { diff --git a/src/language-handlebars/postprocess.js b/src/language-handlebars/postprocess.js deleted file mode 100644 index 19dbd0ac0..000000000 --- a/src/language-handlebars/postprocess.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -/** @type {Array<(any) => any>} */ -const PIPELINE = [addBackslash]; - -/* VISITORS */ - -/* - */ -function addBackslash(/* options*/) { - return { - TextNode(node) { - /* from the following template: `non-escaped mustache \\{{helper}}` - * glimmer parser will produce an AST missing a backslash - * so here we add it back - * */ - if (node.chars.includes("\\")) { - node.chars = node.chars.replace(/\\/, "\\\\"); - } - }, - }; -} - -function postprocess(ast, options, traverse) { - for (const fn of PIPELINE) { - const visitor = fn(options); - traverse(ast, visitor); - } - - return ast; -} - -module.exports = postprocess;