diff --git a/src/language-js/print/array.js b/src/language-js/print/array.js index c70f4c887..1f3310e62 100644 --- a/src/language-js/print/array.js +++ b/src/language-js/print/array.js @@ -21,7 +21,7 @@ import { isObjectExpression, isTupleType, } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; +import { shouldPrintTrailingComma } from "../utilities/should-print-trailing-comma.js"; import { printDanglingCommentsInList, printOptionalToken, @@ -92,7 +92,7 @@ function printArray(path, options, print) { ? "" : needsForcedTrailingComma ? "," - : !shouldPrintComma(options) + : !shouldPrintTrailingComma(options) ? "" : shouldUseConciseFormatting ? ifBreak(",", "", { groupId }) diff --git a/src/language-js/print/arrow-function.js b/src/language-js/print/arrow-function.js index f971dd417..e2c7574b9 100644 --- a/src/language-js/print/arrow-function.js +++ b/src/language-js/print/arrow-function.js @@ -25,10 +25,10 @@ import { isJsxElement, isObjectExpression, } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { startsWithNoLookaheadToken } from "../utilities/starts-with-no-lookahead-token.js"; import { printReturnType, shouldPrintParamsWithoutParens } from "./function.js"; import { printFunctionParameters } from "./function-parameters.js"; +import { printTrailingComma } from "./miscellaneous.js"; /** * @import AstPath from "../../common/ast-path.js" @@ -291,8 +291,9 @@ function printArrowFunctionBody( ) { const { node, parent } = path; - const trailingComma = - args.expandLastArg && shouldPrintComma(options, "all") ? ifBreak(",") : ""; + const trailingComma = args.expandLastArg + ? printTrailingComma(options, "all") + : ""; // if the arrow function is expanded as last argument, we are adding a // level of indentation and need to add a softline to align the closing ) diff --git a/src/language-js/print/call-arguments.js b/src/language-js/print/call-arguments.js index 8150c49ea..c8964d72a 100644 --- a/src/language-js/print/call-arguments.js +++ b/src/language-js/print/call-arguments.js @@ -4,7 +4,6 @@ import { conditionalGroup, group, hardline, - ifBreak, indent, line, softline, @@ -34,10 +33,12 @@ import { isRegExpLiteral, isStringLiteral, } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { stripChainElementWrappers } from "../utilities/strip-chain-element-wrappers.js"; import { isConciselyPrintedArray } from "./array.js"; -import { printDanglingCommentsInList } from "./miscellaneous.js"; +import { + printDanglingCommentsInList, + printTrailingComma, +} from "./miscellaneous.js"; /* - `NewExpression` @@ -89,20 +90,19 @@ function printCallArguments(path, options, print) { printedArguments.push(argDoc); }); - const maybeTrailingComma = + const trailingComma = // Angular does not allow trailing comma path.root.type !== "NGRoot" && // Dynamic imports cannot have trailing commas node.type !== "ImportExpression" && node.type !== "TSImportType" && - node.type !== "TSExternalModuleReference" && - shouldPrintComma(options, "all") - ? "," + node.type !== "TSExternalModuleReference" + ? printTrailingComma(options, "all") : ""; function allArgsBrokenOut() { return group( - ["(", indent([line, ...printedArguments]), maybeTrailingComma, line, ")"], + ["(", indent([line, ...printedArguments]), trailingComma, line, ")"], { shouldBreak: true }, ); } @@ -187,7 +187,7 @@ function printCallArguments(path, options, print) { const contents = [ "(", indent([softline, ...printedArguments]), - ifBreak(maybeTrailingComma), + trailingComma, softline, ")", ]; diff --git a/src/language-js/print/class-body.js b/src/language-js/print/class-body.js index bb068099f..c653dff7b 100644 --- a/src/language-js/print/class-body.js +++ b/src/language-js/print/class-body.js @@ -17,8 +17,8 @@ import { } from "../utilities/comments.js"; import { createTypeCheckFunction } from "../utilities/create-type-check-function.js"; import { isNextLineEmpty } from "../utilities/is-next-line-empty.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { shouldHugTheOnlyParameter } from "./function-parameters.js"; +import { printTrailingComma } from "./miscellaneous.js"; /* - `ClassBody` @@ -49,8 +49,8 @@ function printClassBody(path, options, print) { if (parent.inexact || !isLast) { parts.push(","); - } else if (shouldPrintComma(options)) { - parts.push(ifBreak(",")); + } else { + parts.push(printTrailingComma(options)); } } diff --git a/src/language-js/print/function-parameters.js b/src/language-js/print/function-parameters.js index 1acc7bb04..880954573 100644 --- a/src/language-js/print/function-parameters.js +++ b/src/language-js/print/function-parameters.js @@ -2,7 +2,6 @@ import { ArgExpansionBailout } from "../../common/errors.js"; import { group, hardline, - ifBreak, indent, line, removeLines, @@ -25,9 +24,11 @@ import { isObjectExpression, isObjectType, } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { isTestCall } from "../utilities/test-libraries.js"; -import { printDanglingCommentsInList } from "./miscellaneous.js"; +import { + printDanglingCommentsInList, + printTrailingComma, +} from "./miscellaneous.js"; /** @import AstPath from "../../common/ast-path.js" */ @@ -184,11 +185,7 @@ function printFunctionParameters( typeParametersDoc, "(", indent([softline, ...printed]), - ifBreak( - !hasRestParameter(functionNode) && shouldPrintComma(options, "all") - ? "," - : "", - ), + !hasRestParameter(functionNode) ? printTrailingComma(options, "all") : "", softline, ")", ]; diff --git a/src/language-js/print/index-signature.js b/src/language-js/print/index-signature.js index 3f55a853a..27e537fdc 100644 --- a/src/language-js/print/index-signature.js +++ b/src/language-js/print/index-signature.js @@ -1,12 +1,6 @@ -import { - group, - ifBreak, - indent, - join, - softline, -} from "../../document/index.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; +import { group, indent, join, softline } from "../../document/index.js"; import { printClassMemberSemicolon } from "./class.js"; +import { printTrailingComma } from "./miscellaneous.js"; import { printTypeAnnotationProperty } from "./type-annotation.js"; function printIndexSignature(path, options, print) { @@ -16,9 +10,7 @@ function printIndexSignature(path, options, print) { // aren't, this is more like a computed property name than an array. // So we leave off the trailing comma when there's just one parameter. const trailingComma = - node.parameters.length > 1 - ? ifBreak(shouldPrintComma(options) ? "," : "") - : ""; + node.parameters.length > 1 ? printTrailingComma(options) : ""; const parametersGroup = group([ indent([softline, join([", ", softline], path.map(print, "parameters"))]), diff --git a/src/language-js/print/miscellaneous.js b/src/language-js/print/miscellaneous.js index 3ecdbc9e9..7072dc285 100644 --- a/src/language-js/print/miscellaneous.js +++ b/src/language-js/print/miscellaneous.js @@ -1,6 +1,7 @@ import { group, hardline, + ifBreak, indent, line, softline, @@ -12,6 +13,7 @@ import { isCallExpression, isMemberExpression, } from "../utilities/node-types.js"; +import { shouldPrintTrailingComma } from "../utilities/should-print-trailing-comma.js"; /** @import AstPath from "../../common/ast-path.js" @@ -192,6 +194,14 @@ function printDanglingCommentsInList(path, options, filter) { : ""; } +/** + * @param {("es5" | "all")} [level] + * @returns {Doc} + */ +function printTrailingComma(options, level = "es5") { + return shouldPrintTrailingComma(options, level) ? ifBreak(",") : ""; +} + export { adjustClause, printAbstractToken, @@ -201,6 +211,7 @@ export { printIfOrWhileCondition as printDoWhileStatementCondition, printIfOrWhileCondition as printIfStatementCondition, printOptionalToken, + printTrailingComma, printTypeScriptAccessibilityToken, printIfOrWhileCondition as printWhileStatementCondition, }; diff --git a/src/language-js/print/module.js b/src/language-js/print/module.js index a729c62e5..e9e614dda 100644 --- a/src/language-js/print/module.js +++ b/src/language-js/print/module.js @@ -1,7 +1,6 @@ import { group, hardline, - ifBreak, indent, join, line, @@ -18,9 +17,8 @@ import getTextWithoutComments from "../utilities/get-text-without-comments.js"; import { isShorthandSpecifier } from "../utilities/is-shorthand-specifier.js"; import { needsHardlineAfterDanglingComment } from "../utilities/needs-hardline-after-dangling-comment.js"; import { isStringLiteral } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { printDecoratorsBeforeExport } from "./decorators.js"; -import { printDeclareToken } from "./miscellaneous.js"; +import { printDeclareToken, printTrailingComma } from "./miscellaneous.js"; import { printObject } from "./object.js"; /** @@ -211,7 +209,7 @@ function printModuleSpecifiers(path, options, print) { options.bracketSpacing ? line : softline, join([",", line], groupedSpecifiers), ]), - ifBreak(shouldPrintComma(options) ? "," : ""), + printTrailingComma(options), options.bracketSpacing ? line : softline, "}", ]), diff --git a/src/language-js/print/object.js b/src/language-js/print/object.js index ff26c700f..a2c079a58 100644 --- a/src/language-js/print/object.js +++ b/src/language-js/print/object.js @@ -2,7 +2,6 @@ import * as assert from "#universal/assert"; import { group, hardline, - ifBreak, indent, line, softline, @@ -21,11 +20,11 @@ import { createTypeCheckFunction } from "../utilities/create-type-check-function import getTextWithoutComments from "../utilities/get-text-without-comments.js"; import { isNextLineEmpty } from "../utilities/is-next-line-empty.js"; import { isObjectType } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { shouldHugTheOnlyParameter } from "./function-parameters.js"; import { printDanglingCommentsInList, printOptionalToken, + printTrailingComma, } from "./miscellaneous.js"; import { printTypeAnnotationProperty } from "./type-annotation.js"; @@ -149,7 +148,7 @@ function printObject(path, options, print) { content = [ "{", indent([spacing, ...parts]), - ifBreak(canHaveTrailingSeparator && shouldPrintComma(options) ? "," : ""), + canHaveTrailingSeparator ? printTrailingComma(options) : "", spacing, "}", printOptionalToken(path), diff --git a/src/language-js/print/type-parameters.js b/src/language-js/print/type-parameters.js index 8c01b7140..02f79f07c 100644 --- a/src/language-js/print/type-parameters.js +++ b/src/language-js/print/type-parameters.js @@ -1,7 +1,6 @@ import { group, hardline, - ifBreak, indent, indentIfBreak, join, @@ -15,9 +14,9 @@ import { locEnd } from "../loc.js"; import { CommentCheckFlags, hasComment } from "../utilities/comments.js"; import { getFunctionParameters } from "../utilities/function-parameters.js"; import { isObjectType } from "../utilities/node-types.js"; -import { shouldPrintComma } from "../utilities/should-print-comma.js"; import { isTestCall } from "../utilities/test-libraries.js"; import { isArrowFunctionVariableDeclarator } from "./assignment.js"; +import { printTrailingComma } from "./miscellaneous.js"; import { printTypeAnnotationProperty, shouldHugType, @@ -108,9 +107,7 @@ function printTypeParameters(path, options, print, paramsKey) { ? "" : shouldForceTrailingComma(path, options, paramsKey) ? "," - : shouldPrintComma(options) - ? ifBreak(",") - : ""; + : printTrailingComma(options); return group([ "<", diff --git a/src/language-js/utilities/should-print-comma.js b/src/language-js/utilities/should-print-trailing-comma.js similarity index 71% rename from src/language-js/utilities/should-print-comma.js rename to src/language-js/utilities/should-print-trailing-comma.js index ab41332bc..e24e03f2a 100644 --- a/src/language-js/utilities/should-print-comma.js +++ b/src/language-js/utilities/should-print-trailing-comma.js @@ -3,11 +3,11 @@ * @param {("es5" | "all")} [level] * @returns {boolean} */ -function shouldPrintComma(options, level = "es5") { +function shouldPrintTrailingComma(options, level = "es5") { return ( (options.trailingComma === "es5" && level === "es5") || (options.trailingComma === "all" && (level === "all" || level === "es5")) ); } -export { shouldPrintComma }; +export { shouldPrintTrailingComma };