diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index b75468adc642f..7ddafb36f7ea6 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -464,8 +464,6 @@ export function transformClassFields(context: TransformationContext): (x: Source } switch (node.kind) { - case SyntaxKind.AccessorKeyword: - return Debug.fail("Use `modifierVisitor` instead."); case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node as ClassDeclaration); case SyntaxKind.ClassExpression: diff --git a/tests/baselines/reference/autoAccessorDisallowedModifiers.errors.txt b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=es2017).errors.txt similarity index 100% rename from tests/baselines/reference/autoAccessorDisallowedModifiers.errors.txt rename to tests/baselines/reference/autoAccessorDisallowedModifiers(target=es2017).errors.txt diff --git a/tests/baselines/reference/autoAccessorDisallowedModifiers(target=es2017).js b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=es2017).js new file mode 100644 index 0000000000000..e6630cf661abb --- /dev/null +++ b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=es2017).js @@ -0,0 +1,107 @@ +//// [tests/cases/conformance/classes/propertyMemberDeclarations/autoAccessorDisallowedModifiers.ts] //// + +//// [autoAccessorDisallowedModifiers.ts] +abstract class C1 { + accessor accessor a: any; + readonly accessor b: any; + declare accessor c: any; + accessor public d: any; + accessor private e: any; + accessor protected f: any; + accessor abstract g: any; + accessor static h: any; + accessor i() {} + accessor get j() { return false; } + accessor set k(v: any) {} + accessor constructor() {} + accessor l?: any; + accessor readonly m: any; + accessor declare n: any; +} + +class C2 extends C1 { + accessor override g: any; +} + +interface I1 { + accessor a: number; +} + +accessor class C3 {} +accessor interface I2 {} +accessor namespace N1 {} +accessor enum E1 {} +accessor var V1: any; +accessor type T1 = never; +accessor function F1() {} +accessor import "x"; +accessor import {} from "x"; +accessor export { V1 }; +accessor export default V1; +accessor import N2 = N1; + + +//// [autoAccessorDisallowedModifiers.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _a, _C1_a_accessor_storage, _C1_b_accessor_storage, _C1_d_accessor_storage, _C1_e_accessor_storage, _C1_f_accessor_storage, _C1_h_accessor_storage, _C1_l_accessor_storage, _C1_m_accessor_storage, _C2_g_accessor_storage; +class C1 { + get a() { return __classPrivateFieldGet(this, _C1_a_accessor_storage, "f"); } + set a(value) { __classPrivateFieldSet(this, _C1_a_accessor_storage, value, "f"); } + get b() { return __classPrivateFieldGet(this, _C1_b_accessor_storage, "f"); } + set b(value) { __classPrivateFieldSet(this, _C1_b_accessor_storage, value, "f"); } + get d() { return __classPrivateFieldGet(this, _C1_d_accessor_storage, "f"); } + set d(value) { __classPrivateFieldSet(this, _C1_d_accessor_storage, value, "f"); } + get e() { return __classPrivateFieldGet(this, _C1_e_accessor_storage, "f"); } + set e(value) { __classPrivateFieldSet(this, _C1_e_accessor_storage, value, "f"); } + get f() { return __classPrivateFieldGet(this, _C1_f_accessor_storage, "f"); } + set f(value) { __classPrivateFieldSet(this, _C1_f_accessor_storage, value, "f"); } + static get h() { return __classPrivateFieldGet(_a, _a, "f", _C1_h_accessor_storage); } + static set h(value) { __classPrivateFieldSet(_a, _a, value, "f", _C1_h_accessor_storage); } + i() { } + get j() { return false; } + set k(v) { } + constructor() { + _C1_a_accessor_storage.set(this, void 0); + _C1_b_accessor_storage.set(this, void 0); + _C1_d_accessor_storage.set(this, void 0); + _C1_e_accessor_storage.set(this, void 0); + _C1_f_accessor_storage.set(this, void 0); + _C1_l_accessor_storage.set(this, void 0); + _C1_m_accessor_storage.set(this, void 0); + } + get l() { return __classPrivateFieldGet(this, _C1_l_accessor_storage, "f"); } + set l(value) { __classPrivateFieldSet(this, _C1_l_accessor_storage, value, "f"); } + get m() { return __classPrivateFieldGet(this, _C1_m_accessor_storage, "f"); } + set m(value) { __classPrivateFieldSet(this, _C1_m_accessor_storage, value, "f"); } +} +_a = C1, _C1_a_accessor_storage = new WeakMap(), _C1_b_accessor_storage = new WeakMap(), _C1_d_accessor_storage = new WeakMap(), _C1_e_accessor_storage = new WeakMap(), _C1_f_accessor_storage = new WeakMap(), _C1_l_accessor_storage = new WeakMap(), _C1_m_accessor_storage = new WeakMap(); +_C1_h_accessor_storage = { value: void 0 }; +class C2 extends C1 { + constructor() { + super(...arguments); + _C2_g_accessor_storage.set(this, void 0); + } + get g() { return __classPrivateFieldGet(this, _C2_g_accessor_storage, "f"); } + set g(value) { __classPrivateFieldSet(this, _C2_g_accessor_storage, value, "f"); } +} +_C2_g_accessor_storage = new WeakMap(); +class C3 { +} +accessor var E1; +(function (E1) { +})(E1 || (E1 = {})); +accessor var V1; +accessor function F1() { } +accessor import "x"; +export { V1 }; +export default V1; diff --git a/tests/baselines/reference/autoAccessorDisallowedModifiers(target=esnext).errors.txt b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=esnext).errors.txt new file mode 100644 index 0000000000000..d9b841ee69892 --- /dev/null +++ b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=esnext).errors.txt @@ -0,0 +1,132 @@ +autoAccessorDisallowedModifiers.ts(2,14): error TS1030: 'accessor' modifier already seen. +autoAccessorDisallowedModifiers.ts(3,14): error TS1243: 'accessor' modifier cannot be used with 'readonly' modifier. +autoAccessorDisallowedModifiers.ts(4,13): error TS1243: 'accessor' modifier cannot be used with 'declare' modifier. +autoAccessorDisallowedModifiers.ts(5,14): error TS1029: 'public' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(6,14): error TS1029: 'private' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(7,14): error TS1029: 'protected' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(8,14): error TS1029: 'abstract' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(9,14): error TS1029: 'static' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(10,5): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(11,5): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(12,5): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(13,5): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(14,15): error TS1276: An 'accessor' property cannot be declared optional. +autoAccessorDisallowedModifiers.ts(15,14): error TS1243: 'readonly' modifier cannot be used with 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(16,14): error TS1243: 'declare' modifier cannot be used with 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(20,14): error TS1029: 'override' modifier must precede 'accessor' modifier. +autoAccessorDisallowedModifiers.ts(24,5): error TS1070: 'accessor' modifier cannot appear on a type member. +autoAccessorDisallowedModifiers.ts(27,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(28,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(29,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(30,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(31,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(32,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(33,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(34,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(35,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(35,25): error TS2792: Cannot find module 'x'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option? +autoAccessorDisallowedModifiers.ts(36,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(37,1): error TS1275: 'accessor' modifier can only appear on a property declaration. +autoAccessorDisallowedModifiers.ts(38,1): error TS1275: 'accessor' modifier can only appear on a property declaration. + + +==== autoAccessorDisallowedModifiers.ts (30 errors) ==== + abstract class C1 { + accessor accessor a: any; + ~~~~~~~~ +!!! error TS1030: 'accessor' modifier already seen. + readonly accessor b: any; + ~~~~~~~~ +!!! error TS1243: 'accessor' modifier cannot be used with 'readonly' modifier. + declare accessor c: any; + ~~~~~~~~ +!!! error TS1243: 'accessor' modifier cannot be used with 'declare' modifier. + accessor public d: any; + ~~~~~~ +!!! error TS1029: 'public' modifier must precede 'accessor' modifier. + accessor private e: any; + ~~~~~~~ +!!! error TS1029: 'private' modifier must precede 'accessor' modifier. + accessor protected f: any; + ~~~~~~~~~ +!!! error TS1029: 'protected' modifier must precede 'accessor' modifier. + accessor abstract g: any; + ~~~~~~~~ +!!! error TS1029: 'abstract' modifier must precede 'accessor' modifier. + accessor static h: any; + ~~~~~~ +!!! error TS1029: 'static' modifier must precede 'accessor' modifier. + accessor i() {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor get j() { return false; } + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor set k(v: any) {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor constructor() {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor l?: any; + ~ +!!! error TS1276: An 'accessor' property cannot be declared optional. + accessor readonly m: any; + ~~~~~~~~ +!!! error TS1243: 'readonly' modifier cannot be used with 'accessor' modifier. + accessor declare n: any; + ~~~~~~~ +!!! error TS1243: 'declare' modifier cannot be used with 'accessor' modifier. + } + + class C2 extends C1 { + accessor override g: any; + ~~~~~~~~ +!!! error TS1029: 'override' modifier must precede 'accessor' modifier. + } + + interface I1 { + accessor a: number; + ~~~~~~~~ +!!! error TS1070: 'accessor' modifier cannot appear on a type member. + } + + accessor class C3 {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor interface I2 {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor namespace N1 {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor enum E1 {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor var V1: any; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor type T1 = never; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor function F1() {} + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor import "x"; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor import {} from "x"; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + ~~~ +!!! error TS2792: Cannot find module 'x'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option? + accessor export { V1 }; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor export default V1; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + accessor import N2 = N1; + ~~~~~~~~ +!!! error TS1275: 'accessor' modifier can only appear on a property declaration. + \ No newline at end of file diff --git a/tests/baselines/reference/autoAccessorDisallowedModifiers.js b/tests/baselines/reference/autoAccessorDisallowedModifiers(target=esnext).js similarity index 100% rename from tests/baselines/reference/autoAccessorDisallowedModifiers.js rename to tests/baselines/reference/autoAccessorDisallowedModifiers(target=esnext).js diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/autoAccessorDisallowedModifiers.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/autoAccessorDisallowedModifiers.ts index ba188a70dc25e..c40816c14c086 100644 --- a/tests/cases/conformance/classes/propertyMemberDeclarations/autoAccessorDisallowedModifiers.ts +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/autoAccessorDisallowedModifiers.ts @@ -1,4 +1,4 @@ -// @target: esnext +// @target: esnext,es2017 // @noTypesAndSymbols: true abstract class C1 {