From 82687f1c02ee2c8cbb5202bf40519b0f8d28dee2 Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Tue, 15 Jun 2021 15:28:31 +0900 Subject: [PATCH] Print override modifier for parameter property (#11074) * Install new typescript-estree * Print override modifier for parameter property * Add tests * Add changelog * Fix by Prettier * Update babel-parser * Update snapshot * Update snapshots --- changelog_unreleased/typescript/11074.md | 26 +++++++++++++++ package.json | 4 +-- src/language-js/print/typescript.js | 3 ++ .../__snapshots__/jsfmt.spec.js.snap | 12 +++---- .../__snapshots__/jsfmt.spec.js.snap | 22 +++++++++++++ .../override-modifiers/parameter-property.ts | 5 +++ yarn.lock | 33 ++++++++++++++++++- 7 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 changelog_unreleased/typescript/11074.md create mode 100644 tests/format/typescript/override-modifiers/parameter-property.ts diff --git a/changelog_unreleased/typescript/11074.md b/changelog_unreleased/typescript/11074.md new file mode 100644 index 000000000..f85d8eefa --- /dev/null +++ b/changelog_unreleased/typescript/11074.md @@ -0,0 +1,26 @@ +#### Print override modifiers for parameter property (#11074 by @sosukesuzuki) + + +```ts +// Input +class D extends B { + constructor(override foo: string) { + super(); + } +} + +// Prettier stable +class D extends B { + constructor(foo: string) { + super(); + } +} + +// Prettier main +class D extends B { + constructor(override foo: string) { + super(); + } +} + +``` diff --git a/package.json b/package.json index 229910641..d8b67ba8b 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,10 @@ "dependencies": { "@angular/compiler": "12.0.4", "@babel/code-frame": "7.14.5", - "@babel/parser": "7.14.5", + "@babel/parser": "7.14.6", "@glimmer/syntax": "0.79.3", "@iarna/toml": "2.2.5", - "@typescript-eslint/typescript-estree": "4.26.1", + "@typescript-eslint/typescript-estree": "4.27.0", "angular-estree-parser": "2.4.0", "angular-html-parser": "1.8.0", "camelcase": "6.2.0", diff --git a/src/language-js/print/typescript.js b/src/language-js/print/typescript.js index 7ef36edb3..3e7f1b88e 100644 --- a/src/language-js/print/typescript.js +++ b/src/language-js/print/typescript.js @@ -190,6 +190,9 @@ function printTypescript(path, options, print) { if (node.static) { parts.push("static "); } + if (node.override) { + parts.push("override "); + } if (node.readonly) { parts.push("readonly "); } diff --git a/tests/format/typescript/conformance/classes/constructorDeclarations/constructorParameters/__snapshots__/jsfmt.spec.js.snap b/tests/format/typescript/conformance/classes/constructorDeclarations/constructorParameters/__snapshots__/jsfmt.spec.js.snap index 823cf5106..9af9892ee 100644 --- a/tests/format/typescript/conformance/classes/constructorDeclarations/constructorParameters/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/typescript/conformance/classes/constructorDeclarations/constructorParameters/__snapshots__/jsfmt.spec.js.snap @@ -441,11 +441,11 @@ class E extends D { `; exports[`readonlyInConstructorParameters.ts [babel-ts] format 1`] = ` -"Unexpected token, expected \\",\\" (7:33) +"'public' modifier must precede 'readonly' modifier. (7:26) 5 | 6 | class E { > 7 | constructor(readonly public x: number) {} - | ^ + | ^ 8 | } 9 | 10 | class F {" @@ -489,11 +489,11 @@ new F(1).x; `; exports[`readonlyReadonly.ts [babel-ts] format 1`] = ` -"Unexpected token, expected \\",\\" (3:35) +"Duplicate modifier: 'readonly'. (2:14) 1 | class C { - 2 | readonly readonly x: number; -> 3 | constructor(readonly readonly y: number) {} - | ^ +> 2 | readonly readonly x: number; + | ^ + 3 | constructor(readonly readonly y: number) {} 4 | }" `; diff --git a/tests/format/typescript/override-modifiers/__snapshots__/jsfmt.spec.js.snap b/tests/format/typescript/override-modifiers/__snapshots__/jsfmt.spec.js.snap index 92a627425..a3b1b9509 100644 --- a/tests/format/typescript/override-modifiers/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/typescript/override-modifiers/__snapshots__/jsfmt.spec.js.snap @@ -27,3 +27,25 @@ class MyClass extends BaseClass { ================================================================================ `; + +exports[`parameter-property.ts format 1`] = ` +====================================options===================================== +parsers: ["typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +class D extends B { + constructor(override foo: string) { + super(); + } +} + +=====================================output===================================== +class D extends B { + constructor(override foo: string) { + super(); + } +} + +================================================================================ +`; diff --git a/tests/format/typescript/override-modifiers/parameter-property.ts b/tests/format/typescript/override-modifiers/parameter-property.ts new file mode 100644 index 000000000..e32ed0d86 --- /dev/null +++ b/tests/format/typescript/override-modifiers/parameter-property.ts @@ -0,0 +1,5 @@ +class D extends B { + constructor(override foo: string) { + super(); + } +} diff --git a/yarn.lock b/yarn.lock index 406b99ec7..6fd2c825a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -281,7 +281,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@7.14.5", "@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.7.2": +"@babel/parser@7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" + integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.7.2": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829" integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg== @@ -1674,6 +1679,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== +"@typescript-eslint/types@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" + integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== + "@typescript-eslint/typescript-estree@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" @@ -1687,6 +1697,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" + integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g== + dependencies: + "@typescript-eslint/types" "4.27.0" + "@typescript-eslint/visitor-keys" "4.27.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" @@ -1695,6 +1718,14 @@ "@typescript-eslint/types" "4.26.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" + integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg== + dependencies: + "@typescript-eslint/types" "4.27.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f"