diff --git a/changelog_unreleased/javascript/14409.md b/changelog_unreleased/javascript/14409.md new file mode 100644 index 000000000..b589336b7 --- /dev/null +++ b/changelog_unreleased/javascript/14409.md @@ -0,0 +1,23 @@ +#### Remove unnecessary parentheses around class expression (#14409 by @fisker) + + +```jsx +// Input +call( + @dec class {} +); + +// Prettier stable +call( + ( + @dec + class {} + ) +); + +// Prettier main +call( + @dec + class {}, +); +``` diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 304bf67c3..9316a5a0d 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -155,7 +155,8 @@ function needsParens(path, options) { node.type === "UnaryExpression" || node.type === "UpdateExpression" || node.type === "YieldExpression" || - node.type === "TSNonNullExpression") + node.type === "TSNonNullExpression" || + (node.type === "ClassExpression" && isNonEmptyArray(node.decorators))) ) { return true; } @@ -766,10 +767,6 @@ function needsParens(path, options) { } case "ClassExpression": - if (isNonEmptyArray(node.decorators)) { - return true; - } - switch (parent.type) { case "NewExpression": return key === "callee"; diff --git a/tests/format/js/decorators/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/decorators/__snapshots__/jsfmt.spec.js.snap index 74e16e8f4..03dcdd68a 100644 --- a/tests/format/js/decorators/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/decorators/__snapshots__/jsfmt.spec.js.snap @@ -51,20 +51,16 @@ export class Bar {} export default class Baz {} const foo = - ( - @deco - class { - // - } - ); + @deco + class { + // + }; const bar = - ( - @deco - class { - // - } - ); + @deco + class { + // + }; ================================================================================ `; @@ -293,18 +289,14 @@ printWidth: 80 @(decorators["first"]) method() {} }, - ( - @(decorators[first]) - class { - method() {} - } - ), - ( - @(decorators[0]) - class { - method() {} - } - ), + @(decorators[first]) + class { + method() {} + }, + @(decorators[0]) + class { + method() {} + }, ]; ================================================================================ diff --git a/tests/format/js/decorators/class-expression/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/decorators/class-expression/__snapshots__/jsfmt.spec.js.snap index 9c555e0ed..447b6b7af 100644 --- a/tests/format/js/decorators/class-expression/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/decorators/class-expression/__snapshots__/jsfmt.spec.js.snap @@ -76,16 +76,12 @@ console.log(@deco class {}) =====================================output===================================== console.log( - ( - @deco - class Foo {} - ), + @deco + class Foo {}, ) console.log( - ( - @deco - class {} - ), + @deco + class {}, ) ================================================================================ @@ -102,16 +98,12 @@ console.log(@deco class {}) =====================================output===================================== console.log( - ( - @deco - class Foo {} - ), + @deco + class Foo {}, ); console.log( - ( - @deco - class {} - ), + @deco + class {}, ); ================================================================================ @@ -213,15 +205,11 @@ const b2 = [] =====================================output===================================== const a1 = - ( - @deco - class Foo {} - ) + @deco + class Foo {} const a2 = - ( - @deco - class {} - ) + @deco + class {} ;( @deco @@ -274,15 +262,11 @@ const b2 = [] =====================================output===================================== const a1 = - ( - @deco - class Foo {} - ); + @deco + class Foo {}; const a2 = - ( - @deco - class {} - ); + @deco + class {}; ( @deco