diff --git a/crates/swc_ecma_ast/src/class.rs b/crates/swc_ecma_ast/src/class.rs index 99b47a136f53..79c34e0af38a 100644 --- a/crates/swc_ecma_ast/src/class.rs +++ b/crates/swc_ecma_ast/src/class.rs @@ -332,6 +332,9 @@ pub struct AutoAccessor { #[cfg_attr(feature = "serde-impl", serde(default))] pub accessibility: Option, + #[cfg_attr(feature = "serde-impl", serde(default))] + pub is_abstract: bool, + #[cfg_attr(feature = "serde-impl", serde(default))] pub is_override: bool, @@ -349,6 +352,7 @@ impl Take for AutoAccessor { is_static: false, decorators: Take::dummy(), accessibility: None, + is_abstract: false, is_override: false, definite: false, } diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index 752bbd9b4331..3ef445fd5272 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -1384,6 +1384,11 @@ where space!(); } + if n.is_abstract { + keyword!("abstract"); + space!(); + } + if n.is_override { keyword!("override"); space!(); diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js index c3c20abba303..d547e3dd35aa 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js @@ -15,5 +15,6 @@ class MyClass extends Base { public prop13: string; private static prop14: string; protected override accessor prop15 = 5; + abstract accessor abstractAccessor: string; [value]?: string[]; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js index c3c20abba303..d547e3dd35aa 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js @@ -15,5 +15,6 @@ class MyClass extends Base { public prop13: string; private static prop14: string; protected override accessor prop15 = 5; + abstract accessor abstractAccessor: string; [value]?: string[]; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js index 58f4f301b48b..2b9b1553bec3 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js @@ -1 +1 @@ -class MyClass extends Base{prop1?: string;prop2!: string;#prop3?: string;#prop4?: string="test";#privateOptionalNoType?;static readonly prop5!: string;readonly #prop6="asdf";public abstract override readonly prop7=5;override readonly #prop8=5;declare public static readonly prop9: string;accessor prop10!: string="";public accessor prop11="";public static accessor prop12="";public prop13: string;private static prop14: string;protected override accessor prop15=5;[value]?: string[]} +class MyClass extends Base{prop1?: string;prop2!: string;#prop3?: string;#prop4?: string="test";#privateOptionalNoType?;static readonly prop5!: string;readonly #prop6="asdf";public abstract override readonly prop7=5;override readonly #prop8=5;declare public static readonly prop9: string;accessor prop10!: string="";public accessor prop11="";public static accessor prop12="";public prop13: string;private static prop14: string;protected override accessor prop15=5;abstract accessor abstractAccessor: string;[value]?: string[]} diff --git a/crates/swc_ecma_parser/src/parser/class_and_fn.rs b/crates/swc_ecma_parser/src/parser/class_and_fn.rs index dd016afc2e08..83573ecbcfc7 100644 --- a/crates/swc_ecma_parser/src/parser/class_and_fn.rs +++ b/crates/swc_ecma_parser/src/parser/class_and_fn.rs @@ -1094,6 +1094,7 @@ impl Parser { is_static, decorators, accessibility, + is_abstract, is_override, definite, })); diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor1.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor1.json index 1aae0883a373..295de4c0846b 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor1.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor1.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -98,6 +99,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -139,6 +141,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -173,6 +176,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor10.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor10.json index ab0b274daaa4..711ca12119b1 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor10.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor10.json @@ -57,6 +57,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -162,6 +163,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -302,6 +304,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -436,6 +439,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -497,6 +501,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor11.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor11.json index 1ec3c23e25bb..9f95fd4c70a3 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor11.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor11.json @@ -222,6 +222,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor2.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor2.json index 43f627f7b32a..87c06bc2b7cc 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor2.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor2.json @@ -72,6 +72,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -114,6 +115,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -163,6 +165,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -205,6 +208,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor3.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor3.json index 49b35a600ab8..44478e7899c5 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor3.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor3.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -98,6 +99,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -139,6 +141,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -173,6 +176,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor4.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor4.json index 8093d48f0ac2..96e70edb1692 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor4.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor4.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -98,6 +99,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -139,6 +141,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -173,6 +176,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor6.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor6.json index ca29c7d28c64..ba1cc3ef0417 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor6.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor6.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor7.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor7.json index 778ed91d6a31..aea5d3545b97 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor7.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor7.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": true, "isOverride": false, "definite": false } @@ -125,6 +126,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor8.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor8.json index 1000d62a29ef..e86f5a9ff1f7 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor8.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor8.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -105,6 +106,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -173,6 +175,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -214,6 +217,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -310,6 +314,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -351,6 +356,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessor9.json b/crates/swc_ecma_parser/tests/tsc/autoAccessor9.json index 75918a349602..8bc64234ec88 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessor9.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessor9.json @@ -57,6 +57,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -156,6 +157,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -299,6 +301,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -551,6 +554,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -650,6 +654,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -749,6 +754,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessorAllowedModifiers.json b/crates/swc_ecma_parser/tests/tsc/autoAccessorAllowedModifiers.json index ffcdb6125067..198104ba783c 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessorAllowedModifiers.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessorAllowedModifiers.json @@ -64,6 +64,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -105,6 +106,7 @@ "isStatic": false, "decorators": [], "accessibility": "public", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -146,6 +148,7 @@ "isStatic": false, "decorators": [], "accessibility": "private", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -187,6 +190,7 @@ "isStatic": false, "decorators": [], "accessibility": "protected", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -228,6 +232,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": true, "isOverride": false, "definite": false }, @@ -269,6 +274,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -310,6 +316,7 @@ "isStatic": true, "decorators": [], "accessibility": "public", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -351,6 +358,7 @@ "isStatic": true, "decorators": [], "accessibility": "private", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -392,6 +400,7 @@ "isStatic": true, "decorators": [], "accessibility": "protected", + "isAbstract": false, "isOverride": false, "definite": false }, @@ -441,6 +450,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -482,6 +492,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -523,6 +534,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -572,6 +584,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -613,6 +626,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": true } @@ -681,6 +695,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": true, "definite": false }, @@ -722,6 +737,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": true, "definite": false } @@ -799,6 +815,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/autoAccessorNoUseDefineForClassFields.json b/crates/swc_ecma_parser/tests/tsc/autoAccessorNoUseDefineForClassFields.json index d876c7286bc9..45bded8f8690 100644 --- a/crates/swc_ecma_parser/tests/tsc/autoAccessorNoUseDefineForClassFields.json +++ b/crates/swc_ecma_parser/tests/tsc/autoAccessorNoUseDefineForClassFields.json @@ -57,6 +57,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -126,6 +127,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -195,6 +197,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -237,6 +240,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -298,6 +302,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -367,6 +372,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -474,6 +480,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -543,6 +550,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-classThisReference.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-classThisReference.json index c94083414573..13153f0b4409 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-classThisReference.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-classThisReference.json @@ -225,6 +225,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-commentPreservation.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-commentPreservation.json index 2342e1a5064c..607d8dc21af2 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-commentPreservation.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-commentPreservation.json @@ -560,6 +560,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -1049,6 +1050,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticAccessor.json index b7806681d38d..223b6210231f 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticAccessor.json @@ -191,6 +191,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -276,6 +277,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -361,6 +363,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticPrivateAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticPrivateAccessor.json index 5ff144240518..d96be098edac 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticPrivateAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-nonStaticPrivateAccessor.json @@ -133,6 +133,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticAccessor.json index 2a01f24438a7..3e7550e3b385 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticAccessor.json @@ -191,6 +191,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -276,6 +277,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -361,6 +363,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -441,6 +444,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticPrivateAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticPrivateAccessor.json index fcbb685fad3e..20c59f4e7970 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticPrivateAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-fields-staticPrivateAccessor.json @@ -133,6 +133,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } @@ -221,6 +222,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-nonStaticPrivateAutoAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-nonStaticPrivateAutoAccessor.json index 1f61ed1d6761..e28ea6e2835b 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-nonStaticPrivateAutoAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-nonStaticPrivateAutoAccessor.json @@ -152,6 +152,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-staticPrivateAutoAccessor.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-staticPrivateAutoAccessor.json index 20dab0248188..8cdf44245410 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-staticPrivateAutoAccessor.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-missingEmitHelpers-staticPrivateAutoAccessor.json @@ -152,6 +152,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-sourceMap.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-sourceMap.json index eec2ab2e1e0c..6ccf35553096 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-sourceMap.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classDeclaration-sourceMap.json @@ -560,6 +560,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -1049,6 +1050,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-classExpression-commentPreservation.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-classExpression-commentPreservation.json index 102cfee5097a..b4d2dcc37e82 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-classExpression-commentPreservation.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-classExpression-commentPreservation.json @@ -573,6 +573,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -1062,6 +1063,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/esDecorators-contextualTypes.json b/crates/swc_ecma_parser/tests/tsc/esDecorators-contextualTypes.json index d7e9226b6e3e..22090686625a 100644 --- a/crates/swc_ecma_parser/tests/tsc/esDecorators-contextualTypes.json +++ b/crates/swc_ecma_parser/tests/tsc/esDecorators-contextualTypes.json @@ -869,6 +869,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -965,6 +966,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -1947,6 +1949,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -2043,6 +2046,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, diff --git a/crates/swc_ecma_parser/tests/tsc/staticAutoAccessors.json b/crates/swc_ecma_parser/tests/tsc/staticAutoAccessors.json index 6973d3be99b7..efbf7ef77503 100644 --- a/crates/swc_ecma_parser/tests/tsc/staticAutoAccessors.json +++ b/crates/swc_ecma_parser/tests/tsc/staticAutoAccessors.json @@ -57,6 +57,7 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -91,6 +92,7 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/tsc/staticAutoAccessorsWithDecorators.json b/crates/swc_ecma_parser/tests/tsc/staticAutoAccessorsWithDecorators.json index 0c3b88cac765..b386d439d48c 100644 --- a/crates/swc_ecma_parser/tests/tsc/staticAutoAccessorsWithDecorators.json +++ b/crates/swc_ecma_parser/tests/tsc/staticAutoAccessorsWithDecorators.json @@ -111,6 +111,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, @@ -199,6 +200,7 @@ } ], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false } diff --git a/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts b/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts index 6bfbd0142bcd..ced0767df0f8 100644 --- a/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts +++ b/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts @@ -1,3 +1,6 @@ +abstract class B { + abstract accessor i: number; +} class C1 extends B { accessor a: any; accessor b = 1; diff --git a/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts.json b/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts.json index 4bf764ad9213..9203c745578a 100644 --- a/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts.json +++ b/crates/swc_ecma_parser/tests/typescript/class/auto-accessor/input.ts.json @@ -2,7 +2,7 @@ "type": "Script", "span": { "start": 1, - "end": 291, + "end": 345, "ctxt": 0 }, "body": [ @@ -11,17 +11,86 @@ "identifier": { "type": "Identifier", "span": { - "start": 7, - "end": 9, + "start": 16, + "end": 17, "ctxt": 0 }, - "value": "C1", + "value": "B", "optional": false }, "declare": false, "span": { "start": 1, - "end": 291, + "end": 54, + "ctxt": 0 + }, + "decorators": [], + "body": [ + { + "type": "AutoAccessor", + "span": { + "start": 24, + "end": 52, + "ctxt": 0 + }, + "key": { + "type": "Identifier", + "span": { + "start": 42, + "end": 43, + "ctxt": 0 + }, + "value": "i", + "optional": false + }, + "value": null, + "typeAnnotation": { + "type": "TsTypeAnnotation", + "span": { + "start": 43, + "end": 51, + "ctxt": 0 + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 45, + "end": 51, + "ctxt": 0 + }, + "kind": "number" + } + }, + "isStatic": false, + "decorators": [], + "accessibility": null, + "isAbstract": true, + "isOverride": false, + "definite": false + } + ], + "superClass": null, + "isAbstract": true, + "typeParams": null, + "superTypeParams": null, + "implements": [] + }, + { + "type": "ClassDeclaration", + "identifier": { + "type": "Identifier", + "span": { + "start": 61, + "end": 63, + "ctxt": 0 + }, + "value": "C1", + "optional": false + }, + "declare": false, + "span": { + "start": 55, + "end": 345, "ctxt": 0 }, "decorators": [], @@ -29,15 +98,15 @@ { "type": "AutoAccessor", "span": { - "start": 26, - "end": 42, + "start": 80, + "end": 96, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 35, - "end": 36, + "start": 89, + "end": 90, "ctxt": 0 }, "value": "a", @@ -47,15 +116,15 @@ "typeAnnotation": { "type": "TsTypeAnnotation", "span": { - "start": 36, - "end": 41, + "start": 90, + "end": 95, "ctxt": 0 }, "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 38, - "end": 41, + "start": 92, + "end": 95, "ctxt": 0 }, "kind": "any" @@ -64,21 +133,22 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 47, - "end": 62, + "start": 101, + "end": 116, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 56, - "end": 57, + "start": 110, + "end": 111, "ctxt": 0 }, "value": "b", @@ -87,8 +157,8 @@ "value": { "type": "NumericLiteral", "span": { - "start": 60, - "end": 61, + "start": 114, + "end": 115, "ctxt": 0 }, "value": 1.0, @@ -98,21 +168,22 @@ "isStatic": false, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 67, - "end": 90, + "start": 121, + "end": 144, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 83, - "end": 84, + "start": 137, + "end": 138, "ctxt": 0 }, "value": "c", @@ -122,15 +193,15 @@ "typeAnnotation": { "type": "TsTypeAnnotation", "span": { - "start": 84, - "end": 89, + "start": 138, + "end": 143, "ctxt": 0 }, "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 86, - "end": 89, + "start": 140, + "end": 143, "ctxt": 0 }, "kind": "any" @@ -139,21 +210,22 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 95, - "end": 117, + "start": 149, + "end": 171, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 111, - "end": 112, + "start": 165, + "end": 166, "ctxt": 0 }, "value": "d", @@ -162,8 +234,8 @@ "value": { "type": "NumericLiteral", "span": { - "start": 115, - "end": 116, + "start": 169, + "end": 170, "ctxt": 0 }, "value": 2.0, @@ -173,21 +245,22 @@ "isStatic": true, "decorators": [], "accessibility": null, + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 122, - "end": 151, + "start": 176, + "end": 205, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 145, - "end": 146, + "start": 199, + "end": 200, "ctxt": 0 }, "value": "e", @@ -196,8 +269,8 @@ "value": { "type": "NumericLiteral", "span": { - "start": 149, - "end": 150, + "start": 203, + "end": 204, "ctxt": 0 }, "value": 4.0, @@ -207,21 +280,22 @@ "isStatic": true, "decorators": [], "accessibility": "public", + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 156, - "end": 192, + "start": 210, + "end": 246, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 182, - "end": 183, + "start": 236, + "end": 237, "ctxt": 0 }, "value": "f", @@ -231,15 +305,15 @@ "typeAnnotation": { "type": "TsTypeAnnotation", "span": { - "start": 183, - "end": 191, + "start": 237, + "end": 245, "ctxt": 0 }, "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 185, - "end": 191, + "start": 239, + "end": 245, "ctxt": 0 }, "kind": "number" @@ -248,21 +322,22 @@ "isStatic": true, "decorators": [], "accessibility": "protected", + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 197, - "end": 225, + "start": 251, + "end": 279, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 214, - "end": 215, + "start": 268, + "end": 269, "ctxt": 0 }, "value": "g", @@ -272,15 +347,15 @@ "typeAnnotation": { "type": "TsTypeAnnotation", "span": { - "start": 216, - "end": 224, + "start": 270, + "end": 278, "ctxt": 0 }, "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 218, - "end": 224, + "start": 272, + "end": 278, "ctxt": 0 }, "kind": "string" @@ -289,21 +364,22 @@ "isStatic": false, "decorators": [], "accessibility": "private", + "isAbstract": false, "isOverride": false, "definite": true }, { "type": "AutoAccessor", "span": { - "start": 230, - "end": 252, + "start": 284, + "end": 306, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 246, - "end": 247, + "start": 300, + "end": 301, "ctxt": 0 }, "value": "h", @@ -312,8 +388,8 @@ "value": { "type": "NumericLiteral", "span": { - "start": 250, - "end": 251, + "start": 304, + "end": 305, "ctxt": 0 }, "value": 1.0, @@ -323,21 +399,22 @@ "isStatic": false, "decorators": [], "accessibility": "public", + "isAbstract": false, "isOverride": false, "definite": false }, { "type": "AutoAccessor", "span": { - "start": 257, - "end": 289, + "start": 311, + "end": 343, "ctxt": 0 }, "key": { "type": "Identifier", "span": { - "start": 282, - "end": 283, + "start": 336, + "end": 337, "ctxt": 0 }, "value": "i", @@ -346,8 +423,8 @@ "value": { "type": "NumericLiteral", "span": { - "start": 286, - "end": 288, + "start": 340, + "end": 342, "ctxt": 0 }, "value": 10.0, @@ -357,6 +434,7 @@ "isStatic": false, "decorators": [], "accessibility": "public", + "isAbstract": false, "isOverride": true, "definite": false } @@ -364,8 +442,8 @@ "superClass": { "type": "Identifier", "span": { - "start": 18, - "end": 19, + "start": 72, + "end": 73, "ctxt": 0 }, "value": "B", diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index a8b502b67f01..17bd35f76ce8 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -34,6 +34,7 @@ impl VisitMut for StripType { n.accessibility = None; n.definite = false; n.is_override = false; + n.is_abstract = false; n.visit_mut_children_with(self); } @@ -64,7 +65,10 @@ impl VisitMut for StripType { | ClassProp { is_abstract: true, .. }, - ) => false, + ) + | ClassMember::AutoAccessor(AutoAccessor { + is_abstract: true, .. + }) => false, _ => true, }); diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/input.ts b/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/input.ts index 4f4cd98ead30..ecb0af0e3361 100644 --- a/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/input.ts +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/input.ts @@ -1,3 +1,6 @@ +abstract class B { + abstract accessor b: string; +} class Test extends B { accessor a!: string; public override accessor b: string = ""; diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/output.js b/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/output.js index e3746715bd53..ff42bd3f7a50 100644 --- a/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/output.js +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/auto-accessor/output.js @@ -1,3 +1,5 @@ +class B { +} class Test extends B { accessor a; accessor b = ""; diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index fb922ea7f829..8287239570df 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -1906,6 +1906,7 @@ define!({ pub is_static: bool, pub decorators: Vec, pub accessibility: Option, + pub is_abstract: bool, pub is_override: bool, pub definite: bool, }