diff --git a/src/language-js/comments.js b/src/language-js/comments.js index 584b6d8dcc3d..db830e2c6cd5 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -24,6 +24,7 @@ const { getCallArguments, isCallExpression, isMemberExpression, + isObjectProperty, } = require("./utils"); const { locStart, locEnd } = require("./loc"); @@ -360,9 +361,7 @@ function handleObjectPropertyAssignment({ enclosingNode, }) { if ( - enclosingNode && - (enclosingNode.type === "ObjectProperty" || - enclosingNode.type === "Property") && + isObjectProperty(enclosingNode) && enclosingNode.shorthand && enclosingNode.key === precedingNode && enclosingNode.value.type === "AssignmentPattern" @@ -689,11 +688,7 @@ function handleUnionTypeComments({ } function handlePropertyComments({ comment, enclosingNode }) { - if ( - enclosingNode && - (enclosingNode.type === "Property" || - enclosingNode.type === "ObjectProperty") - ) { + if (isObjectProperty(enclosingNode)) { addLeadingComment(enclosingNode, comment); return true; } diff --git a/src/language-js/embed.js b/src/language-js/embed.js index 3058e7868dc8..6b185e594ebc 100644 --- a/src/language-js/embed.js +++ b/src/language-js/embed.js @@ -1,6 +1,6 @@ "use strict"; -const { hasComment, CommentCheckFlags } = require("./utils"); +const { hasComment, CommentCheckFlags, isObjectProperty } = require("./utils"); const formatMarkdown = require("./embed/markdown"); const formatCss = require("./embed/css"); const formatGraphql = require("./embed/graphql"); @@ -135,7 +135,7 @@ function isAngularComponentStyles(path) { (node) => node.type === "TemplateLiteral", (node, name) => node.type === "ArrayExpression" && name === "elements", (node, name) => - (node.type === "Property" || node.type === "ObjectProperty") && + isObjectProperty(node) && node.key.type === "Identifier" && node.key.name === "styles" && name === "value", @@ -146,7 +146,7 @@ function isAngularComponentTemplate(path) { return path.match( (node) => node.type === "TemplateLiteral", (node, name) => - (node.type === "Property" || node.type === "ObjectProperty") && + isObjectProperty(node) && node.key.type === "Identifier" && node.key.name === "template" && name === "value", diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index c629fa304afd..00066faaee1f 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -13,6 +13,7 @@ const { getPrecedence, isCallExpression, isMemberExpression, + isObjectProperty, } = require("./utils"); function needsParens(path, options) { @@ -762,9 +763,8 @@ function needsParens(path, options) { parent.type !== "JSXExpressionContainer" && parent.type !== "JSXFragment" && parent.type !== "LogicalExpression" && - parent.type !== "ObjectProperty" && !isCallExpression(parent) && - parent.type !== "Property" && + !isObjectProperty(parent) && parent.type !== "ReturnStatement" && parent.type !== "ThrowStatement" && parent.type !== "TypeCastExpression" && diff --git a/src/language-js/print/assignment.js b/src/language-js/print/assignment.js index 95828da79994..31d73ade1046 100644 --- a/src/language-js/print/assignment.js +++ b/src/language-js/print/assignment.js @@ -17,6 +17,7 @@ const { rawText, hasComment, isSignedNumericLiteral, + isObjectProperty, } = require("../utils"); const { shouldInlineLogicalExpression } = require("./binaryish"); const { printCallExpression } = require("./call-expression"); @@ -229,8 +230,7 @@ function isComplexDestructuring(node) { leftNode.properties.length > 2 && leftNode.properties.some( (property) => - (property.type === "ObjectProperty" || - property.type === "Property") && + isObjectProperty(property) && (!property.shorthand || (property.value && property.value.type === "AssignmentPattern")) ) @@ -396,7 +396,7 @@ function isLoneShortArgument(node, { printWidth }) { } function isObjectPropertyWithShortKey(node, keyDoc, options) { - if (node.type !== "ObjectProperty" && node.type !== "Property") { + if (!isObjectProperty(node)) { return false; } // TODO: for performance, it might make sense to use a more lightweight diff --git a/src/language-js/print/binaryish.js b/src/language-js/print/binaryish.js index 632b14829360..402bf2e6ff60 100644 --- a/src/language-js/print/binaryish.js +++ b/src/language-js/print/binaryish.js @@ -24,6 +24,7 @@ const { CommentCheckFlags, isCallExpression, isMemberExpression, + isObjectProperty, } = require("../utils"); /** @typedef {import("../../document").Doc} Doc */ @@ -106,8 +107,7 @@ function printBinaryishExpression(path, options, print) { parent.type === "PropertyDefinition" || parent.type === "TSAbstractClassProperty" || parent.type === "ClassPrivateProperty" || - parent.type === "ObjectProperty" || - parent.type === "Property"; + isObjectProperty(parent); const samePrecedenceSubExpression = isBinaryish(node.left) && shouldFlatten(node.operator, node.left.operator); diff --git a/src/language-js/print/call-arguments.js b/src/language-js/print/call-arguments.js index d7b32d8f0955..c415e836ebf1 100644 --- a/src/language-js/print/call-arguments.js +++ b/src/language-js/print/call-arguments.js @@ -15,6 +15,7 @@ const { isNextLineEmpty, isCallExpression, isStringLiteral, + isObjectProperty, } = require("../utils"); const { @@ -294,8 +295,7 @@ function isTypeModuleObjectExpression(node) { return ( node.type === "ObjectExpression" && node.properties.length === 1 && - (node.properties[0].type === "ObjectProperty" || - node.properties[0].type === "Property") && + isObjectProperty(node.properties[0]) && node.properties[0].key.type === "Identifier" && node.properties[0].key.name === "type" && isStringLiteral(node.properties[0].value) && diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 0a33562fd73f..1ff8b7f459d5 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1320,6 +1320,14 @@ function isCallLikeExpression(node) { ); } +function isObjectProperty(node) { + return ( + node && + (node.type === "ObjectProperty" || + (node.type === "Property" && !node.method && node.kind === "init")) + ); +} + module.exports = { getFunctionParameters, iterateFunctionParametersPath, @@ -1358,6 +1366,7 @@ module.exports = { isMemberish, isNumericLiteral, isSignedNumericLiteral, + isObjectProperty, isObjectType, isObjectTypePropertyAFunction, isSimpleType,