From 522ad371323642dc03ceb793da381dea1f0ca565 Mon Sep 17 00:00:00 2001 From: Ika Date: Fri, 13 Apr 2018 17:36:13 +0800 Subject: [PATCH] refactor: remove duplicate mapDoc --- src/common/util-shared.js | 3 ++- src/common/util.js | 15 --------------- src/doc/doc-utils.js | 21 +++++++++------------ src/language-js/embed.js | 3 +-- src/language-markdown/embed.js | 3 ++- src/language-markdown/printer-markdown.js | 3 ++- 6 files changed, 16 insertions(+), 32 deletions(-) diff --git a/src/common/util-shared.js b/src/common/util-shared.js index f4463fa0d257..d4a16947ee46 100644 --- a/src/common/util-shared.js +++ b/src/common/util-shared.js @@ -1,6 +1,7 @@ "use strict"; const util = require("./util"); +const docUtils = require("../doc/doc-utils"); function isNextLineEmpty(text, node, options) { return util.isNextLineEmpty(text, node, options.locEnd); @@ -18,7 +19,7 @@ module.exports = { isNextLineEmpty, isNextLineEmptyAfterIndex: util.isNextLineEmptyAfterIndex, getNextNonSpaceNonCommentCharacterIndex, - mapDoc: util.mapDoc, + mapDoc: docUtils.mapDoc, // TODO: remove in 2.0, we already exposed it in docUtils makeString: util.makeString, addLeadingComment: util.addLeadingComment, addDanglingComment: util.addDanglingComment, diff --git a/src/common/util.js b/src/common/util.js index c336472d9d44..16b789a5b8d7 100644 --- a/src/common/util.js +++ b/src/common/util.js @@ -600,20 +600,6 @@ function getMaxContinuousCount(str, target) { ); } -function mapDoc(doc, callback) { - if (doc.parts) { - const parts = doc.parts.map(part => mapDoc(part, callback)); - return callback(Object.assign({}, doc, { parts })); - } - - if (doc.contents) { - const contents = mapDoc(doc.contents, callback); - return callback(Object.assign({}, doc, { contents })); - } - - return callback(doc); -} - /** * split text into whitespaces and words * @param {string} text @@ -795,7 +781,6 @@ module.exports = { punctuationCharRange, getStringWidth, splitText, - mapDoc, getMaxContinuousCount, getPrecedence, shouldFlatten, diff --git a/src/doc/doc-utils.js b/src/doc/doc-utils.js index 14a664bb7dd5..8a81f98c6132 100644 --- a/src/doc/doc-utils.js +++ b/src/doc/doc-utils.js @@ -40,22 +40,19 @@ function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { traverseDocRec(doc); } -function mapDoc(doc, func) { - doc = func(doc); - +function mapDoc(doc, cb) { if (doc.type === "concat" || doc.type === "fill") { - return Object.assign({}, doc, { - parts: doc.parts.map(d => mapDoc(d, func)) - }); + const parts = doc.parts.map(part => mapDoc(part, cb)); + return cb(Object.assign({}, doc, { parts })); } else if (doc.type === "if-break") { - return Object.assign({}, doc, { - breakContents: doc.breakContents && mapDoc(doc.breakContents, func), - flatContents: doc.flatContents && mapDoc(doc.flatContents, func) - }); + const breakContents = doc.breakContents && mapDoc(doc.breakContents, cb); + const flatContents = doc.flatContents && mapDoc(doc.flatContents, cb); + return cb(Object.assign({}, doc, { breakContents, flatContents })); } else if (doc.contents) { - return Object.assign({}, doc, { contents: mapDoc(doc.contents, func) }); + const contents = mapDoc(doc.contents, cb); + return cb(Object.assign({}, doc, { contents })); } - return doc; + return cb(doc); } function findInDoc(doc, fn, defaultValue) { diff --git a/src/language-js/embed.js b/src/language-js/embed.js index 04fc769ca0b7..cc1ba34cc175 100644 --- a/src/language-js/embed.js +++ b/src/language-js/embed.js @@ -1,6 +1,5 @@ "use strict"; -const util = require("../common/util"); const doc = require("../doc"); const docUtils = doc.utils; const docBuilders = doc.builders; @@ -199,7 +198,7 @@ function getIndentation(str) { } function escapeBackticks(doc) { - return util.mapDoc(doc, currentDoc => { + return docUtils.mapDoc(doc, currentDoc => { if (!currentDoc.parts) { return currentDoc; } diff --git a/src/language-markdown/embed.js b/src/language-markdown/embed.js index ee8f25e9147c..f09f64871f5c 100644 --- a/src/language-markdown/embed.js +++ b/src/language-markdown/embed.js @@ -1,5 +1,6 @@ "use strict"; +const docUtils = require("../doc/doc-utils"); const util = require("../common/util"); const support = require("../common/support"); const doc = require("../doc"); @@ -55,7 +56,7 @@ function embed(path, print, textToDoc, options) { } function replaceNewlinesWithLiterallines(doc) { - return util.mapDoc( + return docUtils.mapDoc( doc, currentDoc => typeof currentDoc === "string" && currentDoc.includes("\n") diff --git a/src/language-markdown/printer-markdown.js b/src/language-markdown/printer-markdown.js index 17de2b3ac25a..0844a5c0b3b1 100644 --- a/src/language-markdown/printer-markdown.js +++ b/src/language-markdown/printer-markdown.js @@ -1,5 +1,6 @@ "use strict"; +const docUtils = require("../doc/doc-utils"); const privateUtil = require("../common/util"); const embed = require("./embed"); const pragma = require("./pragma"); @@ -719,7 +720,7 @@ function shouldRemainTheSameContent(path) { } function normalizeDoc(doc) { - return privateUtil.mapDoc(doc, currentDoc => { + return docUtils.mapDoc(doc, currentDoc => { if (!currentDoc.parts) { return currentDoc; }