Skip to content

Commit 21d1b62

Browse files
authored
feat(typescript-estree): [TS4.3] support overrides on class members (#3429)
1 parent c3942c9 commit 21d1b62

File tree

115 files changed

+1773
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+1773
-0
lines changed

Diff for: packages/ast-spec/src/base/ClassPropertyBase.ts

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ interface ClassPropertyBase extends BaseNode {
2121
optional?: boolean;
2222
definite?: boolean;
2323
typeAnnotation?: TSTypeAnnotation;
24+
override?: boolean;
2425
}
2526

2627
export interface ClassPropertyComputedNameBase extends ClassPropertyBase {

Diff for: packages/ast-spec/src/base/MethodDefinitionBase.ts

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ interface MethodDefinitionBase extends BaseNode {
2121
decorators?: Decorator[];
2222
accessibility?: Accessibility;
2323
typeParameters?: TSTypeParameterDeclaration;
24+
override?: boolean;
2425
}
2526

2627
export interface MethodDefinitionComputedNameBase extends MethodDefinitionBase {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
abstract class SpecializedComponent extends SomeComponent {
2+
abstract override show();
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
abstract class SpecializedComponent extends SomeComponent {
2+
abstract override foo = 1;
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class SpecializedComponent extends SomeComponent {
2+
override show() {
3+
// ...
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class SpecializedComponent extends SomeComponent {
2+
override foo = 1;
3+
}

Diff for: packages/typescript-estree/src/convert.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,7 @@ export class Converter {
10941094
static: hasModifier(SyntaxKind.StaticKeyword, node),
10951095
readonly: hasModifier(SyntaxKind.ReadonlyKeyword, node) || undefined,
10961096
declare: hasModifier(SyntaxKind.DeclareKeyword, node),
1097+
override: hasModifier(SyntaxKind.OverrideKeyword, node),
10971098
});
10981099

10991100
if (node.type) {
@@ -1209,6 +1210,7 @@ export class Converter {
12091210
computed: isComputedProperty(node.name),
12101211
static: hasModifier(SyntaxKind.StaticKeyword, node),
12111212
kind: 'method',
1213+
override: hasModifier(SyntaxKind.OverrideKeyword, node),
12121214
});
12131215

12141216
if (node.decorators) {
@@ -1295,6 +1297,7 @@ export class Converter {
12951297
computed: false,
12961298
static: isStatic,
12971299
kind: isStatic ? 'method' : 'constructor',
1300+
override: false,
12981301
});
12991302

13001303
const accessibility = getTSNodeAccessibility(node);

Diff for: packages/typescript-estree/tests/ast-alignment/utils.ts

+14
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ export function preprocessBabylonAST(ast: BabelTypes.File): any {
165165
node.type = AST_NODE_TYPES.TSAbstractMethodDefinition;
166166
delete node.abstract;
167167
}
168+
/**
169+
* TS 4.3: overrides on class members
170+
* Babel doesn't ever emit a false override flag
171+
*/
172+
if (node.override == null) {
173+
node.override = false;
174+
}
168175
},
169176
ClassProperty(node) {
170177
/**
@@ -183,6 +190,13 @@ export function preprocessBabylonAST(ast: BabelTypes.File): any {
183190
if (!node.declare) {
184191
node.declare = false;
185192
}
193+
/**
194+
* TS 4.3: overrides on class members
195+
* Babel doesn't ever emit a false override flag
196+
*/
197+
if (node.override == null) {
198+
node.override = false;
199+
}
186200
},
187201
TSExpressionWithTypeArguments(node, parent: any) {
188202
if (parent.type === AST_NODE_TYPES.TSInterfaceDeclaration) {

Diff for: packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.test.ts.snap

+8
Original file line numberDiff line numberDiff line change
@@ -1679,6 +1679,10 @@ exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" e
16791679

16801680
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/abstract-class-with-optional-method.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
16811681

1682+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/abstract-class-with-override-method.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
1683+
1684+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/abstract-class-with-override-property.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
1685+
16821686
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/abstract-interface.src 1`] = `
16831687
TSError {
16841688
"column": 7,
@@ -1800,6 +1804,10 @@ exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" e
18001804

18011805
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/class-with-optional-property-undefined.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
18021806

1807+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/class-with-override-method.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
1808+
1809+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/class-with-override-property.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
1810+
18031811
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/class-with-private-parameter-properties.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
18041812

18051813
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/basics/class-with-property-function.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;

Diff for: packages/typescript-estree/tests/lib/__snapshots__/semanticInfo.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,7 @@ Object {
12861286
"line": 4,
12871287
},
12881288
},
1289+
"override": false,
12891290
"range": Array [
12901291
39,
12911292
56,

Diff for: packages/typescript-estree/tests/snapshots/comments/export-default-anonymous-class.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Object {
3838
"line": 8,
3939
},
4040
},
41+
"override": false,
4142
"range": Array [
4243
103,
4344
119,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-accessor-properties.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
18,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
19,
120122
29,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-computed-static-method.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
23,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-method-named-prototype.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
22,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-method-named-static.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
19,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-method-named-with-space.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
24,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-one-method-super.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 2,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
14,
4243
41,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-one-method.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 2,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
14,
4243
19,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-static-method-named-prototype.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Object {
3838
"line": 1,
3939
},
4040
},
41+
"override": false,
4142
"range": Array [
4243
9,
4344
33,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-static-method-named-static.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
26,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-static-method.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
21,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-static-methods-and-accessor-properties.src.js.shot

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
21,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
22,
120122
38,
@@ -193,6 +195,7 @@ Object {
193195
"line": 1,
194196
},
195197
},
198+
"override": false,
196199
"range": Array [
197200
39,
198201
56,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-computed-static-methods.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
22,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
24,
120122
37,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-methods-computed-constructor.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
26,
@@ -116,6 +117,7 @@ Object {
116117
"line": 1,
117118
},
118119
},
120+
"override": false,
119121
"range": Array [
120122
27,
121123
46,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-methods-semi.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
14,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
15,
120122
20,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-methods-three-semi.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
10,
4243
15,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
16,
120122
21,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-methods-two-semi.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
14,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
15,
120122
20,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-methods.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
14,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
14,
120122
19,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-two-static-methods-named-constructor.src.js.shot

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
31,
@@ -115,6 +116,7 @@ Object {
115116
"line": 1,
116117
},
117118
},
119+
"override": false,
118120
"range": Array [
119121
32,
120122
54,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-with-constructor-parameters.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
32,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-with-constructor-with-space.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
25,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/class-with-constructor.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
9,
4243
24,

Diff for: packages/typescript-estree/tests/snapshots/javascript/classes/invalid-class-setter-declaration.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 1,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
10,
4243
22,

Diff for: packages/typescript-estree/tests/snapshots/javascript/defaultParams/class-constructor.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 2,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
14,
4243
44,

Diff for: packages/typescript-estree/tests/snapshots/javascript/defaultParams/class-method.src.js.shot

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Object {
3737
"line": 2,
3838
},
3939
},
40+
"override": false,
4041
"range": Array [
4142
14,
4243
36,

0 commit comments

Comments
 (0)