Check all doc types in mapDoc (#13344)

This commit is contained in:
fisker Cheung authored and GitHub committed 2022-08-23 09:49:45 +08:00
1 parent 3cae07c9df
commit 4959b7c113
3 files changed
+50 -26

No files matched your search

+1 -1
View File
@@ -16,7 +16,7 @@ import {
DOC_TYPE_LABEL,
DOC_TYPE_BREAK_PARENT,
} from "./constants.js";
import { getDocType } from "./utils.js";
import getDocType from "./utils/get-doc-type.js";
const VALID_OBJECT_DOC_TYPE_VALUES = [
DOC_TYPE_CURSOR,
+34 -25
View File
@@ -2,18 +2,23 @@ import getLast from "../utils/get-last.js";
import {
DOC_TYPE_STRING,
DOC_TYPE_ARRAY,
DOC_TYPE_CURSOR,
DOC_TYPE_INDENT,
DOC_TYPE_ALIGN,
DOC_TYPE_TRIM,
DOC_TYPE_GROUP,
DOC_TYPE_FILL,
DOC_TYPE_IF_BREAK,
DOC_TYPE_INDENT_IF_BREAK,
DOC_TYPE_LINE_SUFFIX,
DOC_TYPE_LINE_SUFFIX_BOUNDARY,
DOC_TYPE_LINE,
DOC_TYPE_LABEL,
DOC_TYPE_BREAK_PARENT,
} from "./constants.js";
import { literalline, join } from "./builders.js";
import getDocType from "./utils/get-doc-type.js";
import InvalidDocError from "./invalid-doc-error.js";
const getDocParts = (doc) => {
if (Array.isArray(doc)) {
@@ -110,30 +115,46 @@ function mapDoc(doc, cb) {
switch (getDocType(doc)) {
case DOC_TYPE_ARRAY:
return cb(doc.map(rec));
case DOC_TYPE_FILL:
return cb({ ...doc, parts: doc.parts.map(rec) });
case DOC_TYPE_IF_BREAK: {
const breakContents = doc.breakContents && rec(doc.breakContents);
const flatContents = doc.flatContents && rec(doc.flatContents);
let { breakContents, flatContents } = doc;
breakContents = breakContents && rec(breakContents);
flatContents = flatContents && rec(flatContents);
return cb({ ...doc, breakContents, flatContents });
}
case DOC_TYPE_GROUP: {
let { expandedStates, contents } = doc;
if (doc.expandedStates) {
const expandedStates = doc.expandedStates.map(rec);
const contents = expandedStates[0];
return cb({ ...doc, contents, expandedStates });
expandedStates = doc.expandedStates.map(rec);
contents = expandedStates[0];
} else {
contents = rec(contents);
}
break;
return cb({ ...doc, contents, expandedStates });
}
}
if (doc.contents) {
const contents = rec(doc.contents);
return cb({ ...doc, contents });
}
case DOC_TYPE_ALIGN:
case DOC_TYPE_INDENT:
case DOC_TYPE_INDENT_IF_BREAK:
case DOC_TYPE_LABEL:
case DOC_TYPE_LINE_SUFFIX:
return cb({ ...doc, contents: rec(doc.contents) });
return cb(doc);
case DOC_TYPE_STRING:
case DOC_TYPE_CURSOR:
case DOC_TYPE_TRIM:
case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
case DOC_TYPE_LINE:
case DOC_TYPE_BREAK_PARENT:
return cb(doc);
default:
throw new InvalidDocError(doc);
}
}
}
@@ -432,18 +453,6 @@ function canBreak(doc) {
return findInDoc(doc, canBreakFn, false);
}
function getDocType(doc) {
if (typeof doc === "string") {
return DOC_TYPE_STRING;
}
if (Array.isArray(doc)) {
return DOC_TYPE_ARRAY;
}
return doc?.type;
}
export {
getDocParts,
willBreak,
+15
View File
@@ -0,0 +1,15 @@
import { DOC_TYPE_STRING, DOC_TYPE_ARRAY } from "../constants.js";
function getDocType(doc) {
if (typeof doc === "string") {
return DOC_TYPE_STRING;
}
if (Array.isArray(doc)) {
return DOC_TYPE_ARRAY;
}
return doc?.type;
}
export default getDocType;