Skip to content

Commit 016d78b

Browse files
author
Orta Therox
authored
Allow for class static vars to be called static (#44813)
* Allow for class static vars to be called static - re: #41127 * Add the baselines
1 parent 95ef2a5 commit 016d78b

27 files changed

+196
-57
lines changed

src/compiler/parser.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1974,7 +1974,6 @@ namespace ts {
19741974
case SyntaxKind.DefaultKeyword:
19751975
return nextTokenCanFollowDefaultKeyword();
19761976
case SyntaxKind.StaticKeyword:
1977-
return nextTokenIsOnSameLineAndCanFollowModifier();
19781977
case SyntaxKind.GetKeyword:
19791978
case SyntaxKind.SetKeyword:
19801979
nextToken();
@@ -6870,7 +6869,7 @@ namespace ts {
68706869
return list && createNodeArray(list, pos);
68716870
}
68726871

6873-
function tryParseModifier(permitInvalidConstAsModifier?: boolean, stopOnStartOfClassStaticBlock?: boolean): Modifier | undefined {
6872+
function tryParseModifier(permitInvalidConstAsModifier?: boolean, stopOnStartOfClassStaticBlock?: boolean, hasSeenStaticModifier?: boolean): Modifier | undefined {
68746873
const pos = getNodePos();
68756874
const kind = token();
68766875

@@ -6884,6 +6883,9 @@ namespace ts {
68846883
else if (stopOnStartOfClassStaticBlock && token() === SyntaxKind.StaticKeyword && lookAhead(nextTokenIsOpenBrace)) {
68856884
return undefined;
68866885
}
6886+
else if (hasSeenStaticModifier && token() === SyntaxKind.StaticKeyword) {
6887+
return undefined;
6888+
}
68876889
else {
68886890
if (!parseAnyContextualModifier()) {
68896891
return undefined;
@@ -6902,8 +6904,9 @@ namespace ts {
69026904
*/
69036905
function parseModifiers(permitInvalidConstAsModifier?: boolean, stopOnStartOfClassStaticBlock?: boolean): NodeArray<Modifier> | undefined {
69046906
const pos = getNodePos();
6905-
let list, modifier;
6906-
while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
6907+
let list, modifier, hasSeenStatic = false;
6908+
while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock, hasSeenStatic)) {
6909+
if (modifier.kind === SyntaxKind.StaticKeyword) hasSeenStatic = true;
69076910
list = append(list, modifier);
69086911
}
69096912
return list && createNodeArray(list, pos);
Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,15 @@
1-
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(2,9): error TS1028: Accessibility modifier already seen.
2-
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(3,10): error TS1028: Accessibility modifier already seen.
3-
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(4,9): error TS1030: 'static' modifier already seen.
4-
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(5,9): error TS1028: Accessibility modifier already seen.
5-
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(6,10): error TS1028: Accessibility modifier already seen.
1+
tests/cases/compiler/multipleClassPropertyModifiersErrors.ts(4,16): error TS1005: ';' expected.
62

73

8-
==== tests/cases/compiler/multipleClassPropertyModifiersErrors.ts (5 errors) ====
4+
==== tests/cases/compiler/multipleClassPropertyModifiersErrors.ts (1 errors) ====
95
class C {
106
public public p1;
11-
~~~~~~
12-
!!! error TS1028: Accessibility modifier already seen.
137
private private p2;
14-
~~~~~~~
15-
!!! error TS1028: Accessibility modifier already seen.
168
static static p3;
17-
~~~~~~
18-
!!! error TS1030: 'static' modifier already seen.
9+
~~
10+
!!! error TS1005: ';' expected.
1911
public private p4;
20-
~~~~~~~
21-
!!! error TS1028: Accessibility modifier already seen.
2212
private public p5;
23-
~~~~~~
24-
!!! error TS1028: Accessibility modifier already seen.
2513
public static p6;
2614
private static p7;
2715
}

tests/baselines/reference/multipleClassPropertyModifiersErrors.symbols

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ class C {
99
>p2 : Symbol(C.p2, Decl(multipleClassPropertyModifiersErrors.ts, 1, 18))
1010

1111
static static p3;
12-
>p3 : Symbol(C.p3, Decl(multipleClassPropertyModifiersErrors.ts, 2, 20))
12+
>static : Symbol(C.static, Decl(multipleClassPropertyModifiersErrors.ts, 2, 20))
13+
>p3 : Symbol(C.p3, Decl(multipleClassPropertyModifiersErrors.ts, 3, 14))
1314

1415
public private p4;
1516
>p4 : Symbol(C.p4, Decl(multipleClassPropertyModifiersErrors.ts, 3, 18))

tests/baselines/reference/multipleClassPropertyModifiersErrors.types

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class C {
99
>p2 : any
1010

1111
static static p3;
12+
>static : any
1213
>p3 : any
1314

1415
public private p4;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,11): error TS1030: 'static' modifier already seen.
1+
tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,18): error TS1005: ';' expected.
22

33

44
==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts (1 errors) ====
55
class C {
66
static static [x: string]: string;
7-
~~~~~~
8-
!!! error TS1030: 'static' modifier already seen.
7+
~
8+
!!! error TS1005: ';' expected.
99
}

tests/baselines/reference/parserIndexMemberDeclaration10.symbols

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ class C {
33
>C : Symbol(C, Decl(parserIndexMemberDeclaration10.ts, 0, 0))
44

55
static static [x: string]: string;
6+
>static : Symbol(C.static, Decl(parserIndexMemberDeclaration10.ts, 0, 9))
67
>x : Symbol(x, Decl(parserIndexMemberDeclaration10.ts, 1, 18))
78
}

tests/baselines/reference/parserIndexMemberDeclaration10.types

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ class C {
33
>C : C
44

55
static static [x: string]: string;
6+
>static : any
67
>x : string
78
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration8.ts(2,12): error TS1030: 'static' modifier already seen.
1+
tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration8.ts(2,19): error TS1005: ';' expected.
22
tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration8.ts(2,23): error TS2378: A 'get' accessor must return a value.
33

44

55
==== tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration8.ts (2 errors) ====
66
class C {
77
static static get Foo() { }
8-
~~~~~~
9-
!!! error TS1030: 'static' modifier already seen.
8+
~~~
9+
!!! error TS1005: ';' expected.
1010
~~~
1111
!!! error TS2378: A 'get' accessor must return a value.
1212
}

tests/baselines/reference/parserMemberAccessorDeclaration8.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class C {
77
var C = /** @class */ (function () {
88
function C() {
99
}
10-
Object.defineProperty(C, "Foo", {
10+
Object.defineProperty(C.prototype, "Foo", {
1111
get: function () { },
1212
enumerable: false,
1313
configurable: true

tests/baselines/reference/parserMemberAccessorDeclaration8.symbols

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ class C {
33
>C : Symbol(C, Decl(parserMemberAccessorDeclaration8.ts, 0, 0))
44

55
static static get Foo() { }
6-
>Foo : Symbol(C.Foo, Decl(parserMemberAccessorDeclaration8.ts, 0, 9))
6+
>static : Symbol(C.static, Decl(parserMemberAccessorDeclaration8.ts, 0, 9))
7+
>Foo : Symbol(C.Foo, Decl(parserMemberAccessorDeclaration8.ts, 1, 17))
78
}

0 commit comments

Comments
 (0)