diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 13c349892..c9b80c924 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -271,6 +271,7 @@ module.exports = { "prettier-internal-rules/consistent-negative-index-access": "error", "prettier-internal-rules/flat-ast-path-call": "error", "prettier-internal-rules/no-conflicting-comment-check-flags": "error", + "prettier-internal-rules/no-doc-index-import": "error", "prettier-internal-rules/no-doc-builder-concat": "error", "prettier-internal-rules/no-empty-flat-contents-for-if-break": "error", "prettier-internal-rules/no-unnecessary-ast-path-call": "error", diff --git a/commands.md b/commands.md index b1bc31ed0..51c5c56e9 100644 --- a/commands.md +++ b/commands.md @@ -1,4 +1,4 @@ -The core of the algorithm is implemented in `src/document/doc-{printer,builders,utils}.js`. The printer uses the basic formatting abstractions provided to construct a format when printing a node. +The core of the algorithm is implemented in `src/document/{printer,builders,utils}.js`. The printer uses the basic formatting abstractions provided to construct a format when printing a node. ## Prettier's intermediate representation: `Doc` diff --git a/jest.config.mjs b/jest.config.mjs index 894946c98..00f180ae2 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -52,7 +52,7 @@ const config = { collectCoverageFrom: ["/src/**/*.js", "/bin/**/*.js"], coveragePathIgnorePatterns: [ "/src/standalone.js", - "/src/document/doc-debug.js", + "/src/document/debug.js", ], coverageReporters: ["text", "lcov"], moduleNameMapper: { diff --git a/scripts/tools/eslint-plugin-prettier-internal-rules/index.js b/scripts/tools/eslint-plugin-prettier-internal-rules/index.js index 0eafd86c4..29eb5fc1f 100644 --- a/scripts/tools/eslint-plugin-prettier-internal-rules/index.js +++ b/scripts/tools/eslint-plugin-prettier-internal-rules/index.js @@ -10,6 +10,7 @@ module.exports = { "jsx-identifier-case": require("./jsx-identifier-case.js"), "no-conflicting-comment-check-flags": require("./no-conflicting-comment-check-flags.js"), "no-doc-builder-concat": require("./no-doc-builder-concat.js"), + "no-doc-index-import": require("./no-doc-index-import.js"), "no-empty-flat-contents-for-if-break": require("./no-empty-flat-contents-for-if-break.js"), "no-identifier-n": require("./no-identifier-n.js"), "no-legacy-format-test-fixtures": require("./no-legacy-format-test-fixtures.js"), diff --git a/scripts/tools/eslint-plugin-prettier-internal-rules/no-doc-index-import.js b/scripts/tools/eslint-plugin-prettier-internal-rules/no-doc-index-import.js new file mode 100644 index 000000000..c31469b63 --- /dev/null +++ b/scripts/tools/eslint-plugin-prettier-internal-rules/no-doc-index-import.js @@ -0,0 +1,129 @@ +"use strict"; +const path = require("path"); + +const selector = [ + ":matches(ImportDeclaration, ExportNamedDeclaration, ImportExpression)", + " > ", + "Literal.source", +].join(""); + +const messageId = "no-doc-index-import"; +const docIndexFile = path.join(__dirname, "../../../src/document/index.js"); +const ignored = new Set([ + path.join(__dirname, "../../../src/index.js"), + path.join(__dirname, "../../../src/standalone.js"), +]); + +const docProperties = new Set(["builders", "debug", "printer", "utils"]); + +function fix(source, context) { + // only fix `import doc from './document/index.js'` + if ( + !( + source.parent.type === "ImportDeclaration" && + source.parent.specifiers.length === 1 && + source.parent.specifiers[0].type === "ImportDefaultSpecifier" && + source.parent.specifiers[0].local.type === "Identifier" && + source.parent.specifiers[0].local.name === "doc" + ) + ) { + return; + } + + const variables = context.getDeclaredVariables(source.parent); + if (variables.length !== 1 || variables[0].name !== "doc") { + return; + } + + const [{ references }] = variables; + if (references.length !== 1) { + return; + } + + // Only fix `const {builders: {}} = doc` + const [{ identifier }] = references; + + if ( + !( + identifier.parent.type === "VariableDeclarator" && + identifier.parent.init === identifier && + identifier.parent.id.type === "ObjectPattern" && + identifier.parent.id.properties.every( + (property) => + property.type === "Property" && + !property.computed && + property.key.type === "Identifier" && + docProperties.has(property.key.name) + ) && + identifier.parent.parent.type === "VariableDeclaration" && + identifier.parent.parent.kind === "const" && + identifier.parent.parent.declarations.length === 1 && + identifier.parent.parent.declarations[0] === identifier.parent + ) + ) { + return; + } + + return function* (fixer) { + const sourceCode = context.getSourceCode(); + const text = identifier.parent.id.properties + .map((property) => { + const propertyName = property.key.name; + + return `import ${sourceCode.getText( + property.value + )} from "${source.value.replace( + "/document/index.js", + `/document/${propertyName}.js` + )}";`; + }) + .join("\n"); + + yield fixer.replaceText(source.parent, text); + yield fixer.remove(identifier.parent.parent); + }; +} + +module.exports = { + meta: { + type: "suggestion", + docs: { + url: "https://github.com/prettier/prettier/blob/main/scripts/tools/eslint-plugin-prettier-internal-rules/no-doc-index-import.js", + }, + messages: { + [messageId]: "Do not {{type}} document/index.js file", + }, + fixable: "code", + }, + create(context) { + const file = context.getPhysicalFilename(); + if (ignored.has(file)) { + return {}; + } + + const dir = path.dirname(file); + + return { + [selector](node) { + const { value } = node; + + if ( + !value.startsWith(".") || + !value.endsWith("/document/index.js") || + path.join(dir, value) !== docIndexFile + ) { + return; + } + + context.report({ + node, + messageId, + data: { + type: node.parent.type.slice(0, 6).toLowerCase(), + }, + fix: fix(node, context), + }); + }, + }; + }, +}; diff --git a/src/document/doc-builders.js b/src/document/builders.js similarity index 100% rename from src/document/doc-builders.js rename to src/document/builders.js diff --git a/src/document/doc-debug.js b/src/document/debug.js similarity index 98% rename from src/document/doc-debug.js rename to src/document/debug.js index b85f714f8..f3dbdcc2e 100644 --- a/src/document/doc-debug.js +++ b/src/document/debug.js @@ -1,4 +1,4 @@ -import { isConcat, getDocParts } from "./doc-utils.js"; +import { isConcat, getDocParts } from "./utils.js"; function flattenDoc(doc) { if (!doc) { diff --git a/src/document/index.js b/src/document/index.js index 8653e5c64..6b437d927 100644 --- a/src/document/index.js +++ b/src/document/index.js @@ -1,10 +1,10 @@ -import * as builders from "./doc-builders.js"; -import * as printer from "./doc-printer.js"; -import * as utils from "./doc-utils.js"; -import * as debug from "./doc-debug.js"; +import * as builders from "./builders.js"; +import * as printer from "./printer.js"; +import * as utils from "./utils.js"; +import * as debug from "./debug.js"; /** - * @typedef {import("./doc-builders").Doc} Doc + * @typedef {import("./builders").Doc} Doc */ const doc = { diff --git a/src/document/doc-printer.js b/src/document/printer.js similarity index 99% rename from src/document/doc-printer.js rename to src/document/printer.js index 7cdecf5ab..85b385218 100644 --- a/src/document/doc-printer.js +++ b/src/document/printer.js @@ -1,8 +1,8 @@ import { convertEndOfLineToChars } from "../common/end-of-line.js"; import getLast from "../utils/get-last.js"; import getStringWidth from "../utils/get-string-width.js"; -import { fill, cursor, indent } from "./doc-builders.js"; -import { isConcat, getDocParts } from "./doc-utils.js"; +import { fill, cursor, indent } from "./builders.js"; +import { isConcat, getDocParts } from "./utils.js"; /** @type {Record} */ let groupModeMap; diff --git a/src/document/doc-utils.js b/src/document/utils.js similarity index 99% rename from src/document/doc-utils.js rename to src/document/utils.js index d97e59ef1..ed7e4ab3d 100644 --- a/src/document/doc-utils.js +++ b/src/document/utils.js @@ -1,5 +1,5 @@ import getLast from "../utils/get-last.js"; -import { literalline, join } from "./doc-builders.js"; +import { literalline, join } from "./builders.js"; const isConcat = (doc) => Array.isArray(doc) || (doc && doc.type === "concat"); const getDocParts = (doc) => { diff --git a/src/language-css/embed.js b/src/language-css/embed.js index dd8e5a970..f4bb7b80b 100644 --- a/src/language-css/embed.js +++ b/src/language-css/embed.js @@ -1,10 +1,6 @@ -import doc from "../document/index.js"; +import { hardline } from "../document/builders.js"; import printFrontMatter from "../utils/front-matter/print.js"; -const { - builders: { hardline }, -} = doc; - function embed(path, print, textToDoc /*, options */) { const node = path.getValue(); diff --git a/src/language-css/printer-postcss.js b/src/language-css/printer-postcss.js index 8d370770c..75025315c 100644 --- a/src/language-css/printer-postcss.js +++ b/src/language-css/printer-postcss.js @@ -7,7 +7,19 @@ import { isNextLineEmpty, isNonEmptyArray, } from "../common/util.js"; -import doc from "../document/index.js"; +import { + join, + line, + hardline, + softline, + group, + fill, + indent, + dedent, + ifBreak, + breakParent, +} from "../document/builders.js"; +import { removeLines, getDocParts } from "../document/utils.js"; import clean from "./clean.js"; import embed from "./embed.js"; import { insertPragma } from "./pragma.js"; @@ -62,22 +74,6 @@ import { import { locStart, locEnd } from "./loc.js"; import printUnit from "./utils/print-unit.js"; -const { - builders: { - join, - line, - hardline, - softline, - group, - fill, - indent, - dedent, - ifBreak, - breakParent, - }, - utils: { removeLines, getDocParts }, -} = doc; - function shouldPrintComma(options) { return options.trailingComma === "es5" || options.trailingComma === "all"; } diff --git a/src/language-graphql/printer-graphql.js b/src/language-graphql/printer-graphql.js index 3ed524ab4..28054d349 100644 --- a/src/language-graphql/printer-graphql.js +++ b/src/language-graphql/printer-graphql.js @@ -1,12 +1,16 @@ -import doc from "../document/index.js"; +import { + join, + hardline, + line, + softline, + group, + indent, + ifBreak, +} from "../document/builders.js"; import { isNextLineEmpty, isNonEmptyArray } from "../common/util.js"; import { insertPragma } from "./pragma.js"; import { locStart, locEnd } from "./loc.js"; -const { - builders: { join, hardline, line, softline, group, indent, ifBreak }, -} = doc; - function genericPrint(path, options, print) { const node = path.getValue(); if (!node) { diff --git a/src/language-handlebars/printer-glimmer.js b/src/language-handlebars/printer-glimmer.js index b59cab437..9592bc64c 100644 --- a/src/language-handlebars/printer-glimmer.js +++ b/src/language-handlebars/printer-glimmer.js @@ -1,4 +1,15 @@ -import doc from "../document/index.js"; +import { + dedent, + fill, + group, + hardline, + ifBreak, + indent, + join, + line, + softline, +} from "../document/builders.js"; +import { getDocParts, replaceTextEndOfLine } from "../document/utils.js"; import { getPreferredQuote, isNonEmptyArray } from "../common/util.js"; import { locStart, locEnd } from "./loc.js"; import clean from "./clean.js"; @@ -15,21 +26,6 @@ import { isWhitespaceNode, } from "./utils.js"; -const { - builders: { - dedent, - fill, - group, - hardline, - ifBreak, - indent, - join, - line, - softline, - }, - utils: { getDocParts, replaceTextEndOfLine }, -} = doc; - const NEWLINES_TO_PRESERVE_MAX = 2; // Formatter based on @glimmerjs/syntax's built-in test formatter: diff --git a/src/language-html/embed.js b/src/language-html/embed.js index fe68310c0..4d91f1dcf 100644 --- a/src/language-html/embed.js +++ b/src/language-html/embed.js @@ -1,4 +1,13 @@ -import doc from "../document/index.js"; +import { + breakParent, + group, + hardline, + indent, + line, + fill, + softline, +} from "../document/builders.js"; +import { mapDoc, replaceTextEndOfLine } from "../document/utils.js"; import printFrontMatter from "../utils/front-matter/print.js"; import { printClosingTag, @@ -26,11 +35,6 @@ import { } from "./utils/index.js"; import getNodeContent from "./get-node-content.js"; -const { - builders: { breakParent, group, hardline, indent, line, fill, softline }, - utils: { mapDoc, replaceTextEndOfLine }, -} = doc; - function printEmbeddedAttributeValue(node, htmlTextToDoc, options) { const isKeyMatched = (patterns) => new RegExp(patterns.join("|")).test(node.fullName); diff --git a/src/language-html/print/children.js b/src/language-html/print/children.js index 71fa0bd15..2e5bf1e60 100644 --- a/src/language-html/print/children.js +++ b/src/language-html/print/children.js @@ -1,4 +1,12 @@ -import doc from "../../document/index.js"; +import { + breakParent, + group, + ifBreak, + line, + softline, + hardline, +} from "../../document/builders.js"; +import { replaceTextEndOfLine } from "../../document/utils.js"; import { locStart, locEnd } from "../loc.js"; import { forceBreakChildren, @@ -17,11 +25,6 @@ import { needsToBorrowParentClosingTagStartMarker, } from "./tag.js"; -const { - builders: { breakParent, group, ifBreak, line, softline, hardline }, - utils: { replaceTextEndOfLine }, -} = doc; - function printChild(childPath, options, print) { const child = childPath.getValue(); diff --git a/src/language-html/print/element.js b/src/language-html/print/element.js index 2ba2f475e..0894227ea 100644 --- a/src/language-html/print/element.js +++ b/src/language-html/print/element.js @@ -1,4 +1,14 @@ -import doc from "../../document/index.js"; +import { + breakParent, + dedentToRoot, + group, + ifBreak, + indentIfBreak, + indent, + line, + softline, +} from "../../document/builders.js"; +import { replaceTextEndOfLine } from "../../document/utils.js"; import getNodeContent from "../get-node-content.js"; import { shouldPreserveContent, @@ -17,20 +27,6 @@ import { } from "./tag.js"; import { printChildren } from "./children.js"; -const { - builders: { - breakParent, - dedentToRoot, - group, - ifBreak, - indentIfBreak, - indent, - line, - softline, - }, - utils: { replaceTextEndOfLine }, -} = doc; - function printElement(path, options, print) { const node = path.getValue(); diff --git a/src/language-html/print/tag.js b/src/language-html/print/tag.js index 1685ed541..eb280186a 100644 --- a/src/language-html/print/tag.js +++ b/src/language-html/print/tag.js @@ -4,7 +4,14 @@ import assert from "node:assert"; import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + indent, + join, + line, + softline, + hardline, +} from "../../document/builders.js"; +import { replaceTextEndOfLine } from "../../document/utils.js"; import { locStart, locEnd } from "../loc.js"; import { isTextLikeNode, @@ -14,11 +21,6 @@ import { shouldPreserveContent, } from "../utils/index.js"; -const { - builders: { indent, join, line, softline, hardline }, - utils: { replaceTextEndOfLine }, -} = doc; - function printClosingTag(node, options) { return [ node.isSelfClosing ? "" : printClosingTagStart(node, options), diff --git a/src/language-html/printer-html.js b/src/language-html/printer-html.js index d485e7bfc..f2c2833f1 100644 --- a/src/language-html/printer-html.js +++ b/src/language-html/printer-html.js @@ -2,7 +2,13 @@ * @typedef {import("../document").Doc} Doc */ -import doc from "../document/index.js"; +import { fill, group, hardline, literalline } from "../document/builders.js"; +import { + cleanDoc, + getDocParts, + isConcat, + replaceTextEndOfLine, +} from "../document/utils.js"; import clean from "./clean.js"; import { countChars, @@ -22,11 +28,6 @@ import { import { printElement } from "./print/element.js"; import { printChildren } from "./print/children.js"; -const { - builders: { fill, group, hardline, literalline }, - utils: { cleanDoc, getDocParts, isConcat, replaceTextEndOfLine }, -} = doc; - function genericPrint(path, options, print) { const node = path.getValue(); diff --git a/src/language-html/syntax-attribute.js b/src/language-html/syntax-attribute.js index 26fe534c6..1e35ce0ce 100644 --- a/src/language-html/syntax-attribute.js +++ b/src/language-html/syntax-attribute.js @@ -1,9 +1,5 @@ import parseSrcset from "parse-srcset"; -import doc from "../document/index.js"; - -const { - builders: { ifBreak, join, line }, -} = doc; +import { ifBreak, join, line } from "../document/builders.js"; function printImgSrcset(value) { const srcset = parseSrcset(value, { diff --git a/src/language-html/syntax-vue.js b/src/language-html/syntax-vue.js index 2504e492a..82395f889 100644 --- a/src/language-html/syntax-vue.js +++ b/src/language-html/syntax-vue.js @@ -1,7 +1,4 @@ -import doc from "../document/index.js"; -const { - builders: { group }, -} = doc; +import { group } from "../document/builders.js"; /** * v-for="... in ..." diff --git a/src/language-html/utils/index.js b/src/language-html/utils/index.js index c511b33d7..540531df5 100644 --- a/src/language-html/utils/index.js +++ b/src/language-html/utils/index.js @@ -3,7 +3,8 @@ */ import { inferParserByLanguage, isFrontMatterNode } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { line, hardline, join } from "../../document/builders.js"; +import { getDocParts, replaceTextEndOfLine } from "../../document/utils.js"; import { CSS_DISPLAY_TAGS, CSS_DISPLAY_DEFAULT, @@ -12,11 +13,6 @@ import { } from "../constants.evaluate.js"; import isUnknownNamespace from "./is-unknown-namespace.js"; -const { - builders: { line, hardline, join }, - utils: { getDocParts, replaceTextEndOfLine }, -} = doc; - // https://infra.spec.whatwg.org/#ascii-whitespace const HTML_WHITESPACE = new Set(["\t", "\n", "\f", "\r", " "]); const htmlTrimStart = (string) => string.replace(/^[\t\n\f\r ]+/, ""); diff --git a/src/language-js/embed/css.js b/src/language-js/embed/css.js index 09c9867cd..8f1c1a1e5 100644 --- a/src/language-js/embed/css.js +++ b/src/language-js/embed/css.js @@ -1,12 +1,8 @@ import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { indent, hardline, softline } from "../../document/builders.js"; +import { mapDoc, replaceEndOfLine, cleanDoc } from "../../document/utils.js"; import { printTemplateExpressions } from "../print/template-literal.js"; -const { - builders: { indent, hardline, softline }, - utils: { mapDoc, replaceEndOfLine, cleanDoc }, -} = doc; - function format(path, print, textToDoc) { const node = path.getValue(); diff --git a/src/language-js/embed/graphql.js b/src/language-js/embed/graphql.js index c70b374d0..d8a484341 100644 --- a/src/language-js/embed/graphql.js +++ b/src/language-js/embed/graphql.js @@ -1,13 +1,9 @@ -import doc from "../../document/index.js"; +import { indent, join, hardline } from "../../document/builders.js"; import { escapeTemplateCharacters, printTemplateExpressions, } from "../print/template-literal.js"; -const { - builders: { indent, join, hardline }, -} = doc; - function format(path, print, textToDoc) { const node = path.getValue(); diff --git a/src/language-js/embed/html.js b/src/language-js/embed/html.js index 50e9f5560..e2b9e4028 100644 --- a/src/language-js/embed/html.js +++ b/src/language-js/embed/html.js @@ -1,14 +1,10 @@ -import doc from "../../document/index.js"; +import { indent, line, hardline, group } from "../../document/builders.js"; +import { mapDoc } from "../../document/utils.js"; import { printTemplateExpressions, uncookTemplateElementValue, } from "../print/template-literal.js"; -const { - builders: { indent, line, hardline, group }, - utils: { mapDoc }, -} = doc; - // The counter is needed to distinguish nested embeds. let htmlTemplateLiteralCounter = 0; function format(path, print, textToDoc, options, { parser }) { diff --git a/src/language-js/embed/markdown.js b/src/language-js/embed/markdown.js index 8d551a071..636ffda39 100644 --- a/src/language-js/embed/markdown.js +++ b/src/language-js/embed/markdown.js @@ -1,10 +1,11 @@ -import doc from "../../document/index.js"; +import { + indent, + softline, + literalline, + dedentToRoot, +} from "../../document/builders.js"; import { escapeTemplateCharacters } from "../print/template-literal.js"; -const { - builders: { indent, softline, literalline, dedentToRoot }, -} = doc; - function format(path, print, textToDoc) { const node = path.getValue(); let text = node.quasis[0].value.raw.replace( diff --git a/src/language-js/print/angular.js b/src/language-js/print/angular.js index 85f5c10dd..8cb4fe5c6 100644 --- a/src/language-js/print/angular.js +++ b/src/language-js/print/angular.js @@ -1,11 +1,7 @@ -import doc from "../../document/index.js"; +import { join, line, group } from "../../document/builders.js"; import { hasNode, hasComment, getComments } from "../utils/index.js"; import { printBinaryishExpression } from "./binaryish.js"; -const { - builders: { join, line, group }, -} = doc; - /** @typedef {import("../../common/ast-path.js").default} AstPath */ function printAngular(path, options, print) { diff --git a/src/language-js/print/array.js b/src/language-js/print/array.js index 03ea33fff..ccce6305a 100644 --- a/src/language-js/print/array.js +++ b/src/language-js/print/array.js @@ -1,5 +1,13 @@ import { printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + line, + softline, + hardline, + group, + indent, + ifBreak, + fill, +} from "../../document/builders.js"; import { getLast, hasNewline } from "../../common/util.js"; import { shouldPrintComma, @@ -13,10 +21,6 @@ import { locStart } from "../loc.js"; import { printOptionalToken, printTypeAnnotation } from "./misc.js"; -const { - builders: { line, softline, hardline, group, indent, ifBreak, fill }, -} = doc; - /** @typedef {import("../../document").Doc} Doc */ function printArray(path, options, print) { diff --git a/src/language-js/print/assignment.js b/src/language-js/print/assignment.js index e1ad497c1..0fd328078 100644 --- a/src/language-js/print/assignment.js +++ b/src/language-js/print/assignment.js @@ -1,5 +1,12 @@ import { isNonEmptyArray, getStringWidth } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + line, + group, + indent, + indentIfBreak, + lineSuffixBoundary, +} from "../../document/builders.js"; +import { cleanDoc, willBreak, canBreak } from "../../document/utils.js"; import { hasLeadingOwnLineComment, isBinaryish, @@ -17,11 +24,6 @@ import { import { shouldInlineLogicalExpression } from "./binaryish.js"; import { printCallExpression } from "./call-expression.js"; -const { - builders: { line, group, indent, indentIfBreak, lineSuffixBoundary }, - utils: { cleanDoc, willBreak, canBreak }, -} = doc; - function printAssignment( path, options, diff --git a/src/language-js/print/binaryish.js b/src/language-js/print/binaryish.js index 54fcf66ad..0c52435ef 100644 --- a/src/language-js/print/binaryish.js +++ b/src/language-js/print/binaryish.js @@ -1,6 +1,16 @@ import { printComments } from "../../main/comments.js"; import { getLast } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + join, + line, + softline, + group, + indent, + align, + ifBreak, + indentIfBreak, +} from "../../document/builders.js"; +import { cleanDoc, getDocParts, isConcat } from "../../document/utils.js"; import { hasLeadingOwnLineComment, isBinaryish, @@ -14,20 +24,6 @@ import { isEnabledHackPipeline, } from "../utils/index.js"; -const { - builders: { - join, - line, - softline, - group, - indent, - align, - ifBreak, - indentIfBreak, - }, - utils: { cleanDoc, getDocParts, isConcat }, -} = doc; - /** @typedef {import("../../document").Doc} Doc */ let uid = 0; diff --git a/src/language-js/print/block.js b/src/language-js/print/block.js index d5c5b2673..d7f2ca692 100644 --- a/src/language-js/print/block.js +++ b/src/language-js/print/block.js @@ -1,6 +1,6 @@ import { printDanglingComments } from "../../main/comments.js"; import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { hardline, indent } from "../../document/builders.js"; import { hasComment, CommentCheckFlags, @@ -10,10 +10,6 @@ import { printHardlineAfterHeritage } from "./class.js"; import { printBody } from "./statement.js"; -const { - builders: { hardline, indent }, -} = doc; - /** @typedef {import("../../document").Doc} Doc */ function printBlock(path, options, print) { diff --git a/src/language-js/print/call-arguments.js b/src/language-js/print/call-arguments.js index bcd8bbe93..1b977abbd 100644 --- a/src/language-js/print/call-arguments.js +++ b/src/language-js/print/call-arguments.js @@ -16,25 +16,21 @@ import { isObjectProperty, } from "../utils/index.js"; -import doc from "../../document/index.js"; +import { + line, + hardline, + softline, + group, + indent, + conditionalGroup, + ifBreak, + breakParent, +} from "../../document/builders.js"; +import { willBreak } from "../../document/utils.js"; import { ArgExpansionBailout } from "../../common/errors.js"; import { isConciselyPrintedArray } from "./array.js"; -const { - builders: { - line, - hardline, - softline, - group, - indent, - conditionalGroup, - ifBreak, - breakParent, - }, - utils: { willBreak }, -} = doc; - function printCallArguments(path, options, print) { const node = path.getValue(); const isDynamicImport = node.type === "ImportExpression"; diff --git a/src/language-js/print/call-expression.js b/src/language-js/print/call-expression.js index 491748d51..4b210a085 100644 --- a/src/language-js/print/call-expression.js +++ b/src/language-js/print/call-expression.js @@ -1,4 +1,4 @@ -import doc from "../../document/index.js"; +import { join, group } from "../../document/builders.js"; import pathNeedsParens from "../needs-parens.js"; import { getCallArguments, @@ -14,10 +14,6 @@ import printMemberChain from "./member-chain.js"; import printCallArguments from "./call-arguments.js"; import { printOptionalToken, printFunctionTypeParameters } from "./misc.js"; -const { - builders: { join, group }, -} = doc; - function printCallExpression(path, options, print) { const node = path.getValue(); const parentNode = path.getParentNode(); diff --git a/src/language-js/print/class.js b/src/language-js/print/class.js index 36e1b7c8b..4c181954c 100644 --- a/src/language-js/print/class.js +++ b/src/language-js/print/class.js @@ -1,6 +1,14 @@ import { isNonEmptyArray, createGroupIdMapper } from "../../common/util.js"; import { printComments, printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + join, + line, + hardline, + softline, + group, + indent, + ifBreak, +} from "../../document/builders.js"; import { hasComment, CommentCheckFlags } from "../utils/index.js"; import { getTypeParametersGroupId } from "./type-parameters.js"; import { printMethod } from "./function.js"; @@ -13,10 +21,6 @@ import { printPropertyKey } from "./property.js"; import { printAssignment } from "./assignment.js"; import { printClassMemberDecorators } from "./decorators.js"; -const { - builders: { join, line, hardline, softline, group, indent, ifBreak }, -} = doc; - function printClass(path, options, print) { const node = path.getValue(); const parts = []; diff --git a/src/language-js/print/comment.js b/src/language-js/print/comment.js index c96e53064..034c51d49 100644 --- a/src/language-js/print/comment.js +++ b/src/language-js/print/comment.js @@ -1,15 +1,11 @@ import { hasNewline } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { join, hardline } from "../../document/builders.js"; +import { replaceTextEndOfLine } from "../../document/utils.js"; import { isLineComment } from "../utils/index.js"; import { locStart, locEnd } from "../loc.js"; import isBlockComment from "../utils/is-block-comment.js"; -const { - builders: { join, hardline }, - utils: { replaceTextEndOfLine }, -} = doc; - function printComment(commentPath, options) { const comment = commentPath.getValue(); diff --git a/src/language-js/print/decorators.js b/src/language-js/print/decorators.js index 24e06cc42..23f72f562 100644 --- a/src/language-js/print/decorators.js +++ b/src/language-js/print/decorators.js @@ -1,12 +1,14 @@ import { isNonEmptyArray, hasNewline } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + line, + hardline, + join, + breakParent, + group, +} from "../../document/builders.js"; import { locStart, locEnd } from "../loc.js"; import { getParentExportDeclaration } from "../utils/index.js"; -const { - builders: { line, hardline, join, breakParent, group }, -} = doc; - function printClassMemberDecorators(path, options, print) { const node = path.getValue(); return group([ diff --git a/src/language-js/print/flow.js b/src/language-js/print/flow.js index 3a45c1c2e..fac6973fe 100644 --- a/src/language-js/print/flow.js +++ b/src/language-js/print/flow.js @@ -3,7 +3,7 @@ import assert from "node:assert"; import { printDanglingComments } from "../../main/comments.js"; import { printString, printNumber } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { hardline, softline, group, indent } from "../../document/builders.js"; import { getParentExportDeclaration, isFunctionNotation, @@ -34,10 +34,6 @@ import { printRestSpread, } from "./misc.js"; -const { - builders: { hardline, softline, group, indent }, -} = doc; - function printFlow(path, options, print) { const node = path.getValue(); const semi = options.semi ? ";" : ""; diff --git a/src/language-js/print/function-parameters.js b/src/language-js/print/function-parameters.js index 231d89df7..d7ac5872c 100644 --- a/src/language-js/print/function-parameters.js +++ b/src/language-js/print/function-parameters.js @@ -1,6 +1,14 @@ import { getNextNonSpaceNonCommentCharacter } from "../../common/util.js"; import { printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + line, + hardline, + softline, + group, + indent, + ifBreak, +} from "../../document/builders.js"; +import { removeLines, willBreak } from "../../document/utils.js"; import { getFunctionParameters, iterateFunctionParametersPath, @@ -18,11 +26,6 @@ import { locEnd } from "../loc.js"; import { ArgExpansionBailout } from "../../common/errors.js"; import { printFunctionTypeParameters } from "./misc.js"; -const { - builders: { line, hardline, softline, group, indent, ifBreak }, - utils: { removeLines, willBreak }, -} = doc; - function printFunctionParameters( path, print, diff --git a/src/language-js/print/function.js b/src/language-js/print/function.js index 2283946d2..eb5268a53 100644 --- a/src/language-js/print/function.js +++ b/src/language-js/print/function.js @@ -1,4 +1,4 @@ -/** @typedef {import("../../document/doc-builders").Doc} Doc */ +/** @typedef {import("../../document/builders").Doc} Doc */ import assert from "node:assert"; import { @@ -7,7 +7,17 @@ import { } from "../../main/comments.js"; import getLast from "../../utils/get-last.js"; import { getNextNonSpaceNonCommentCharacterIndex } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + line, + softline, + group, + indent, + ifBreak, + hardline, + join, + indentIfBreak, +} from "../../document/builders.js"; +import { removeLines, willBreak } from "../../document/utils.js"; import { ArgExpansionBailout } from "../../common/errors.js"; import { getFunctionParameters, @@ -36,20 +46,6 @@ import { import { printPropertyKey } from "./property.js"; import { printFunctionTypeParameters } from "./misc.js"; -const { - builders: { - line, - softline, - group, - indent, - ifBreak, - hardline, - join, - indentIfBreak, - }, - utils: { removeLines, willBreak }, -} = doc; - function printFunction(path, print, options, args) { const node = path.getValue(); diff --git a/src/language-js/print/html-binding.js b/src/language-js/print/html-binding.js index 530e018b2..8180b754e 100644 --- a/src/language-js/print/html-binding.js +++ b/src/language-js/print/html-binding.js @@ -1,8 +1,10 @@ -import doc from "../../document/index.js"; - -const { - builders: { join, line, group, softline, indent }, -} = doc; +import { + join, + line, + group, + softline, + indent, +} from "../../document/builders.js"; function printHtmlBinding(path, options, print) { const node = path.getValue(); diff --git a/src/language-js/print/interface.js b/src/language-js/print/interface.js index 6e4e7d0d3..3354109dd 100644 --- a/src/language-js/print/interface.js +++ b/src/language-js/print/interface.js @@ -1,13 +1,9 @@ import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { join, line, group, indent, ifBreak } from "../../document/builders.js"; import { hasComment, identity, CommentCheckFlags } from "../utils/index.js"; import { getTypeParametersGroupId } from "./type-parameters.js"; import { printTypeScriptModifiers } from "./misc.js"; -const { - builders: { join, line, group, indent, ifBreak }, -} = doc; - function printInterface(path, options, print) { const node = path.getValue(); const parts = []; diff --git a/src/language-js/print/jsx.js b/src/language-js/print/jsx.js index 3ad204bc4..9d6bebe23 100644 --- a/src/language-js/print/jsx.js +++ b/src/language-js/print/jsx.js @@ -1,5 +1,17 @@ import { printComments, printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + line, + hardline, + softline, + group, + indent, + conditionalGroup, + fill, + ifBreak, + lineSuffixBoundary, + join, +} from "../../document/builders.js"; +import { willBreak } from "../../document/utils.js"; import { getLast, getPreferredQuote } from "../../common/util.js"; import { @@ -16,22 +28,6 @@ import { import pathNeedsParens from "../needs-parens.js"; import { willPrintOwnComments } from "../comments.js"; -const { - builders: { - line, - hardline, - softline, - group, - indent, - conditionalGroup, - fill, - ifBreak, - lineSuffixBoundary, - join, - }, - utils: { willBreak }, -} = doc; - const isEmptyStringOrAnyLine = (doc) => doc === "" || doc === line || doc === hardline || doc === softline; diff --git a/src/language-js/print/member-chain.js b/src/language-js/print/member-chain.js index 96f0c782c..5a8235cdf 100644 --- a/src/language-js/print/member-chain.js +++ b/src/language-js/print/member-chain.js @@ -19,7 +19,16 @@ import { } from "../utils/index.js"; import { locEnd } from "../loc.js"; -import doc from "../../document/index.js"; +import { + join, + hardline, + group, + indent, + conditionalGroup, + breakParent, + label, +} from "../../document/builders.js"; +import { willBreak } from "../../document/utils.js"; import printCallArguments from "./call-arguments.js"; import { printMemberLookup } from "./member.js"; import { @@ -28,19 +37,6 @@ import { printBindExpressionCallee, } from "./misc.js"; -const { - builders: { - join, - hardline, - group, - indent, - conditionalGroup, - breakParent, - label, - }, - utils: { willBreak }, -} = doc; - // We detect calls on member expressions specially to format a // common pattern better. The pattern we are looking for is this: // diff --git a/src/language-js/print/member.js b/src/language-js/print/member.js index e997379d4..c19a39030 100644 --- a/src/language-js/print/member.js +++ b/src/language-js/print/member.js @@ -1,4 +1,4 @@ -import doc from "../../document/index.js"; +import { softline, group, indent, label } from "../../document/builders.js"; import { isNumericLiteral, isMemberExpression, @@ -6,10 +6,6 @@ import { } from "../utils/index.js"; import { printOptionalToken } from "./misc.js"; -const { - builders: { softline, group, indent, label }, -} = doc; - function printMemberExpression(path, options, print) { const node = path.getValue(); diff --git a/src/language-js/print/misc.js b/src/language-js/print/misc.js index bde9e6f2a..06a5e39e9 100644 --- a/src/language-js/print/misc.js +++ b/src/language-js/print/misc.js @@ -1,11 +1,7 @@ import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { indent, join, line } from "../../document/builders.js"; import { isFlowAnnotationComment } from "../utils/index.js"; -const { - builders: { indent, join, line }, -} = doc; - function printOptionalToken(path) { const node = path.getValue(); if ( diff --git a/src/language-js/print/module.js b/src/language-js/print/module.js index 5fe351992..c3b5d882f 100644 --- a/src/language-js/print/module.js +++ b/src/language-js/print/module.js @@ -1,5 +1,13 @@ import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + softline, + group, + indent, + join, + line, + ifBreak, + hardline, +} from "../../document/builders.js"; import { printDanglingComments } from "../../main/comments.js"; import { @@ -16,10 +24,6 @@ import { printDecoratorsBeforeExport, } from "./decorators.js"; -const { - builders: { softline, group, indent, join, line, ifBreak, hardline }, -} = doc; - /** * @typedef {import("../../document").Doc} Doc */ diff --git a/src/language-js/print/object.js b/src/language-js/print/object.js index e133ef71f..638aca61e 100644 --- a/src/language-js/print/object.js +++ b/src/language-js/print/object.js @@ -1,5 +1,12 @@ import { printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + line, + softline, + group, + indent, + ifBreak, + hardline, +} from "../../document/builders.js"; import { getLast, hasNewlineInRange, @@ -20,10 +27,6 @@ import { shouldHugFunctionParameters } from "./function-parameters.js"; import { shouldHugType } from "./type-annotation.js"; import { printHardlineAfterHeritage } from "./class.js"; -const { - builders: { line, softline, group, indent, ifBreak, hardline }, -} = doc; - /** @typedef {import("../../document").Doc} Doc */ function printObject(path, options, print) { diff --git a/src/language-js/print/statement.js b/src/language-js/print/statement.js index 4d5c7de3f..6b1bf4fbc 100644 --- a/src/language-js/print/statement.js +++ b/src/language-js/print/statement.js @@ -1,4 +1,4 @@ -import doc from "../../document/index.js"; +import { hardline } from "../../document/builders.js"; import pathNeedsParens from "../needs-parens.js"; import { getLeftSidePathName, @@ -11,10 +11,6 @@ import { } from "../utils/index.js"; import { shouldPrintParamsWithoutParens } from "./function.js"; -const { - builders: { hardline }, -} = doc; - /** * @typedef {import("../../document").Doc} Doc * @typedef {import("../../common/ast-path")} AstPath diff --git a/src/language-js/print/template-literal.js b/src/language-js/print/template-literal.js index 8347b3502..f5aacd5cc 100644 --- a/src/language-js/print/template-literal.js +++ b/src/language-js/print/template-literal.js @@ -1,6 +1,17 @@ import getLast from "../../utils/get-last.js"; import { getStringWidth, getIndentSize } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + join, + hardline, + softline, + group, + indent, + align, + lineSuffixBoundary, + addAlignmentToDoc, +} from "../../document/builders.js"; +import { printDocToString } from "../../document/printer.js"; +import { mapDoc } from "../../document/utils.js"; import { isBinaryish, isJestEachTemplateLiteral, @@ -9,21 +20,6 @@ import { isMemberExpression, } from "../utils/index.js"; -const { - builders: { - join, - hardline, - softline, - group, - indent, - align, - lineSuffixBoundary, - addAlignmentToDoc, - }, - printer: { printDocToString }, - utils: { mapDoc }, -} = doc; - function printTemplateLiteral(path, print, options) { const node = path.getValue(); const isTemplateLiteral = node.type === "TemplateLiteral"; diff --git a/src/language-js/print/ternary.js b/src/language-js/print/ternary.js index 44b1943b2..08beae383 100644 --- a/src/language-js/print/ternary.js +++ b/src/language-js/print/ternary.js @@ -7,20 +7,16 @@ import { } from "../utils/index.js"; import { locStart, locEnd } from "../loc.js"; import isBlockComment from "../utils/is-block-comment.js"; -import doc from "../../document/index.js"; - -const { - builders: { - line, - softline, - group, - indent, - align, - ifBreak, - dedent, - breakParent, - }, -} = doc; +import { + line, + softline, + group, + indent, + align, + ifBreak, + dedent, + breakParent, +} from "../../document/builders.js"; /** * @typedef {import("../../document").Doc} Doc diff --git a/src/language-js/print/type-annotation.js b/src/language-js/print/type-annotation.js index 8efb15cea..574d4158d 100644 --- a/src/language-js/print/type-annotation.js +++ b/src/language-js/print/type-annotation.js @@ -1,6 +1,14 @@ import { printComments, printDanglingComments } from "../../main/comments.js"; import { isNonEmptyArray } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + group, + join, + line, + softline, + indent, + align, + ifBreak, +} from "../../document/builders.js"; import pathNeedsParens from "../needs-parens.js"; import { locStart } from "../loc.js"; import { @@ -17,10 +25,6 @@ import { } from "./function-parameters.js"; import { printArrayItems } from "./array.js"; -const { - builders: { group, join, line, softline, indent, align, ifBreak }, -} = doc; - function shouldHugType(node) { if (isSimpleType(node) || isObjectType(node)) { return true; diff --git a/src/language-js/print/type-parameters.js b/src/language-js/print/type-parameters.js index fd63a0c46..16ce59202 100644 --- a/src/language-js/print/type-parameters.js +++ b/src/language-js/print/type-parameters.js @@ -1,5 +1,13 @@ import { printDanglingComments } from "../../main/comments.js"; -import doc from "../../document/index.js"; +import { + join, + line, + hardline, + softline, + group, + indent, + ifBreak, +} from "../../document/builders.js"; import { isTestCall, hasComment, @@ -13,10 +21,6 @@ import { createGroupIdMapper } from "../../common/util.js"; import { shouldHugType } from "./type-annotation.js"; import { isArrowFunctionVariableDeclarator } from "./assignment.js"; -const { - builders: { join, line, hardline, softline, group, indent, ifBreak }, -} = doc; - const getTypeParametersGroupId = createGroupIdMapper("typeParameters"); function printTypeParameters(path, options, print, paramsKey) { diff --git a/src/language-js/print/typescript.js b/src/language-js/print/typescript.js index d1431c49e..7bf802c4f 100644 --- a/src/language-js/print/typescript.js +++ b/src/language-js/print/typescript.js @@ -1,6 +1,15 @@ import { printDanglingComments } from "../../main/comments.js"; import { hasNewlineInRange } from "../../common/util.js"; -import doc from "../../document/index.js"; +import { + join, + line, + hardline, + softline, + group, + indent, + conditionalGroup, + ifBreak, +} from "../../document/builders.js"; import { isLiteral, getTypeScriptMappedTypeModifier, @@ -35,19 +44,6 @@ import { printIndexedAccessType, } from "./type-annotation.js"; -const { - builders: { - join, - line, - hardline, - softline, - group, - indent, - conditionalGroup, - ifBreak, - }, -} = doc; - function printTypescript(path, options, print) { const node = path.getValue(); diff --git a/src/language-js/printer-estree-json.js b/src/language-js/printer-estree-json.js index a379daf7a..423758509 100644 --- a/src/language-js/printer-estree-json.js +++ b/src/language-js/printer-estree-json.js @@ -1,10 +1,6 @@ -import doc from "../document/index.js"; +import { hardline, indent, join } from "../document/builders.js"; import preprocess from "./print-preprocess.js"; -const { - builders: { hardline, indent, join }, -} = doc; - function genericPrint(path, options, print) { const node = path.getValue(); switch (node.type) { diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 3bf466210..64dd23990 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -3,7 +3,15 @@ // TODO(azz): anything that imports from main shouldn't be in a `language-*` dir. import { printDanglingComments } from "../main/comments.js"; import { hasNewline } from "../common/util.js"; -import doc from "../document/index.js"; +import { + join, + line, + hardline, + softline, + group, + indent, +} from "../document/builders.js"; +import { replaceTextEndOfLine } from "../document/utils.js"; import embed from "./embed.js"; import clean from "./clean.js"; import { insertPragma } from "./pragma.js"; @@ -79,11 +87,6 @@ import { printComment } from "./print/comment.js"; import { printLiteral } from "./print/literal.js"; import { printDecorators } from "./print/decorators.js"; -const { - builders: { join, line, hardline, softline, group, indent }, - utils: { replaceTextEndOfLine }, -} = doc; - function genericPrint(path, options, print, args) { const printed = printPathNoParens(path, options, print, args); if (!printed) { diff --git a/src/language-markdown/embed.js b/src/language-markdown/embed.js index 7b93fd158..1e19f5121 100644 --- a/src/language-markdown/embed.js +++ b/src/language-markdown/embed.js @@ -2,15 +2,11 @@ import { inferParserByLanguage, getMaxContinuousCount, } from "../common/util.js"; -import doc from "../document/index.js"; +import { hardline, markAsRoot } from "../document/builders.js"; +import { replaceEndOfLine } from "../document/utils.js"; import printFrontMatter from "../utils/front-matter/print.js"; import { getFencedCodeBlockValue } from "./utils.js"; -const { - builders: { hardline, markAsRoot }, - utils: { replaceEndOfLine }, -} = doc; - function embed(path, print, textToDoc, options) { const node = path.getValue(); diff --git a/src/language-markdown/printer-markdown.js b/src/language-markdown/printer-markdown.js index 48975d1bc..da0a91555 100644 --- a/src/language-markdown/printer-markdown.js +++ b/src/language-markdown/printer-markdown.js @@ -5,7 +5,23 @@ import { getStringWidth, isNonEmptyArray, } from "../common/util.js"; -import doc from "../document/index.js"; +import { + breakParent, + join, + line, + literalline, + markAsRoot, + hardline, + softline, + ifBreak, + fill, + align, + indent, + group, + hardlineWithoutBreakParent, +} from "../document/builders.js"; +import { normalizeDoc, replaceTextEndOfLine } from "../document/utils.js"; +import { printDocToString } from "../document/printer.js"; import embed from "./embed.js"; import { insertPragma } from "./pragma.js"; import { locStart, locEnd } from "./loc.js"; @@ -21,26 +37,6 @@ import { isAutolink, } from "./utils.js"; -const { - builders: { - breakParent, - join, - line, - literalline, - markAsRoot, - hardline, - softline, - ifBreak, - fill, - align, - indent, - group, - hardlineWithoutBreakParent, - }, - utils: { normalizeDoc, replaceTextEndOfLine }, - printer: { printDocToString }, -} = doc; - /** * @typedef {import("../document").Doc} Doc */ diff --git a/src/language-yaml/print/block.js b/src/language-yaml/print/block.js index 3147d3180..92849ce03 100644 --- a/src/language-yaml/print/block.js +++ b/src/language-yaml/print/block.js @@ -1,6 +1,16 @@ /** @typedef {import("../../document").Doc} Doc */ -import doc from "../../document/index.js"; +import { + dedent, + dedentToRoot, + fill, + hardline, + join, + line, + literalline, + markAsRoot, +} from "../../document/builders.js"; +import { getDocParts } from "../../document/utils.js"; import { getAncestorCount, getBlockValueLineContents, @@ -10,20 +20,6 @@ import { } from "../utils.js"; import { alignWithSpaces } from "./misc.js"; -const { - builders: { - dedent, - dedentToRoot, - fill, - hardline, - join, - line, - literalline, - markAsRoot, - }, - utils: { getDocParts }, -} = doc; - function printBlock(path, print, options) { const node = path.getValue(); const parentIndent = getAncestorCount(path, (ancestorNode) => diff --git a/src/language-yaml/print/flow-mapping-sequence.js b/src/language-yaml/print/flow-mapping-sequence.js index c353e1869..183587a2c 100644 --- a/src/language-yaml/print/flow-mapping-sequence.js +++ b/src/language-yaml/print/flow-mapping-sequence.js @@ -1,11 +1,13 @@ -import doc from "../../document/index.js"; +import { + ifBreak, + line, + softline, + hardline, + join, +} from "../../document/builders.js"; import { isEmptyNode, getLast, hasEndComments } from "../utils.js"; import { printNextEmptyLine, alignWithSpaces } from "./misc.js"; -const { - builders: { ifBreak, line, softline, hardline, join }, -} = doc; - function printFlowMapping(path, print, options) { const node = path.getValue(); const isMapping = node.type === "flowMapping"; diff --git a/src/language-yaml/print/mapping-item.js b/src/language-yaml/print/mapping-item.js index 4a6e20b08..384270edc 100644 --- a/src/language-yaml/print/mapping-item.js +++ b/src/language-yaml/print/mapping-item.js @@ -1,6 +1,13 @@ /** @typedef {import("../../document").Doc} Doc */ -import doc from "../../document/index.js"; +import { + conditionalGroup, + group, + hardline, + ifBreak, + join, + line, +} from "../../document/builders.js"; import { hasLeadingComments, hasMiddleComments, @@ -12,10 +19,6 @@ import { } from "../utils.js"; import { alignWithSpaces } from "./misc.js"; -const { - builders: { conditionalGroup, group, hardline, ifBreak, join, line }, -} = doc; - function printMappingItem(node, parentNode, path, print, options) { const { key, value } = node; diff --git a/src/language-yaml/print/misc.js b/src/language-yaml/print/misc.js index b4ea90ed8..632473fd4 100644 --- a/src/language-yaml/print/misc.js +++ b/src/language-yaml/print/misc.js @@ -1,10 +1,6 @@ -import doc from "../../document/index.js"; +import { softline, align } from "../../document/builders.js"; import { hasEndComments, isNextLineEmpty, isNode } from "../utils.js"; -const { - builders: { softline, align }, -} = doc; - const printedEmptyLineCache = new WeakMap(); function printNextEmptyLine(path, originalText) { const node = path.getValue(); diff --git a/src/language-yaml/printer-yaml.js b/src/language-yaml/printer-yaml.js index 18ecfed72..6be72b399 100644 --- a/src/language-yaml/printer-yaml.js +++ b/src/language-yaml/printer-yaml.js @@ -1,6 +1,16 @@ /** @typedef {import("../document").Doc} Doc */ -import doc from "../document/index.js"; +import { + breakParent, + fill, + group, + hardline, + join, + line, + lineSuffix, + literalline, +} from "../document/builders.js"; +import { getDocParts, replaceTextEndOfLine } from "../document/utils.js"; import { isPreviousLineEmpty } from "../common/util.js"; import { insertPragma, isPragma } from "./pragma.js"; import { locStart } from "./loc.js"; @@ -30,20 +40,6 @@ import { import printMappingItem from "./print/mapping-item.js"; import printBlock from "./print/block.js"; -const { - builders: { - breakParent, - fill, - group, - hardline, - join, - line, - lineSuffix, - literalline, - }, - utils: { getDocParts, replaceTextEndOfLine }, -} = doc; - function genericPrint(path, options, print) { const node = path.getValue(); /** @type {Doc[]} */ diff --git a/src/main/ast-to-doc.js b/src/main/ast-to-doc.js index c8f2280e3..589435d10 100644 --- a/src/main/ast-to-doc.js +++ b/src/main/ast-to-doc.js @@ -1,13 +1,9 @@ import AstPath from "../common/ast-path.js"; -import doc from "../document/index.js"; +import { hardline, addAlignmentToDoc } from "../document/builders.js"; +import { propagateBreaks } from "../document/utils.js"; import { printComments } from "./comments.js"; import { printSubtree } from "./multiparser.js"; -const { - builders: { hardline, addAlignmentToDoc }, - utils: { propagateBreaks }, -} = doc; - /** * Takes an abstract syntax tree (AST) and recursively converts it to a * document (series of printing primitives). diff --git a/src/main/comments.js b/src/main/comments.js index ee31a373a..375cb5248 100644 --- a/src/main/comments.js +++ b/src/main/comments.js @@ -1,6 +1,14 @@ import assert from "node:assert"; -import doc from "../document/index.js"; +import { + line, + hardline, + breakParent, + indent, + lineSuffix, + join, + cursor, +} from "../document/builders.js"; import { hasNewline, @@ -12,10 +20,6 @@ import { addTrailingComment, } from "../common/util.js"; -const { - builders: { line, hardline, breakParent, indent, lineSuffix, join, cursor }, -} = doc; - const childNodesCache = new WeakMap(); function getSortedChildNodes(node, options, resultArray) { if (!node) { diff --git a/src/main/core.js b/src/main/core.js index 2bd635f8e..0f2fa24e5 100644 --- a/src/main/core.js +++ b/src/main/core.js @@ -1,6 +1,7 @@ import { diffArrays } from "diff"; -import doc from "../document/index.js"; +import { printDocToString } from "../document/printer.js"; +import { printDocToDebug } from "../document/debug.js"; import { getAlignmentSize } from "../common/util.js"; import { guessEndOfLine, @@ -15,11 +16,6 @@ import { parse, resolveParser } from "./parser.js"; import printAstToDoc from "./ast-to-doc.js"; import { calculateRange, findNodeAtOffset } from "./range-util.js"; -const { - printer: { printDocToString }, - debug: { printDocToDebug }, -} = doc; - const BOM = "\uFEFF"; const CURSOR = Symbol("cursor"); diff --git a/src/main/multiparser.js b/src/main/multiparser.js index dab8bc33e..44eec89e5 100644 --- a/src/main/multiparser.js +++ b/src/main/multiparser.js @@ -1,12 +1,8 @@ -import doc from "../document/index.js"; +import { stripTrailingHardline } from "../document/utils.js"; import { normalize } from "./options.js"; import { ensureAllCommentsPrinted, attach } from "./comments.js"; import { parse } from "./parser.js"; -const { - utils: { stripTrailingHardline }, -} = doc; - function printSubtree(path, print, options, printAstToDoc) { if (options.printer.embed && options.embeddedLanguageFormatting === "auto") { return options.printer.embed( @@ -59,7 +55,7 @@ function textToDoc( ensureAllCommentsPrinted(astComments); if (shouldStripTrailingHardline) { - // TODO: move this to `stripTrailingHardline` function in `/src/document/doc-utils.js` + // TODO: move this to `stripTrailingHardline` function in `/src/document/utils.js` if (typeof doc === "string") { return doc.replace(/(?:\r?\n)*$/, ""); } diff --git a/src/utils/front-matter/print.js b/src/utils/front-matter/print.js index 2e69868a4..fad3f94be 100644 --- a/src/utils/front-matter/print.js +++ b/src/utils/front-matter/print.js @@ -1,8 +1,4 @@ -import doc from "../../document/index.js"; - -const { - builders: { hardline, markAsRoot }, -} = doc; +import { hardline, markAsRoot } from "../../document/builders.js"; function print(node, textToDoc) { if (node.lang === "yaml") {