@@ -17,37 +17,81 @@ namespace ts.codefix {
17
17
Diagnostics . This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class . code ,
18
18
Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 . code ,
19
19
Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 . code ,
20
- Diagnostics . This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 . code
20
+ Diagnostics . This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 . code ,
21
+ Diagnostics . This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code ,
22
+ Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class . code ,
23
+ Diagnostics . This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code ,
24
+ Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 . code ,
21
25
] ;
22
26
23
- const errorCodeFixIdMap : Record < number , [ DiagnosticMessage , string | undefined , DiagnosticMessage | undefined ] > = {
24
- [ Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 . code ] : [
25
- Diagnostics . Add_override_modifier , fixAddOverrideId , Diagnostics . Add_all_missing_override_modifiers ,
26
- ] ,
27
- [ Diagnostics . This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class . code ] : [
28
- Diagnostics . Remove_override_modifier , fixRemoveOverrideId , Diagnostics . Remove_all_unnecessary_override_modifiers
29
- ] ,
30
- [ Diagnostics . This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 . code ] : [
31
- Diagnostics . Add_override_modifier , fixAddOverrideId , Diagnostics . Add_all_missing_override_modifiers ,
32
- ] ,
33
- [ Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 . code ] : [
34
- Diagnostics . Add_override_modifier , fixAddOverrideId , Diagnostics . Remove_all_unnecessary_override_modifiers
35
- ] ,
36
- [ Diagnostics . This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 . code ] : [
37
- Diagnostics . Remove_override_modifier , fixRemoveOverrideId , Diagnostics . Remove_all_unnecessary_override_modifiers
38
- ]
27
+ interface ErrorCodeFixInfo {
28
+ descriptions : DiagnosticMessage ;
29
+ fixId ?: string | undefined ;
30
+ fixAllDescriptions ?: DiagnosticMessage | undefined ;
31
+ }
32
+
33
+ const errorCodeFixIdMap : Record < number , ErrorCodeFixInfo > = {
34
+ // case #1:
35
+ [ Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 . code ] : {
36
+ descriptions : Diagnostics . Add_override_modifier ,
37
+ fixId : fixAddOverrideId ,
38
+ fixAllDescriptions : Diagnostics . Add_all_missing_override_modifiers ,
39
+ } ,
40
+ [ Diagnostics . This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code ] : {
41
+ descriptions : Diagnostics . Add_override_modifier ,
42
+ fixId : fixAddOverrideId ,
43
+ fixAllDescriptions : Diagnostics . Add_all_missing_override_modifiers
44
+ } ,
45
+ // case #2:
46
+ [ Diagnostics . This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class . code ] : {
47
+ descriptions : Diagnostics . Remove_override_modifier ,
48
+ fixId : fixRemoveOverrideId ,
49
+ fixAllDescriptions : Diagnostics . Remove_all_unnecessary_override_modifiers ,
50
+ } ,
51
+ [ Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class . code ] : {
52
+ descriptions : Diagnostics . Remove_override_modifier ,
53
+ fixId : fixRemoveOverrideId ,
54
+ fixAllDescriptions : Diagnostics . Remove_override_modifier
55
+ } ,
56
+ // case #3:
57
+ [ Diagnostics . This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 . code ] : {
58
+ descriptions : Diagnostics . Add_override_modifier ,
59
+ fixId : fixAddOverrideId ,
60
+ fixAllDescriptions : Diagnostics . Add_all_missing_override_modifiers ,
61
+ } ,
62
+ [ Diagnostics . This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code ] : {
63
+ descriptions : Diagnostics . Add_override_modifier ,
64
+ fixId : fixAddOverrideId ,
65
+ fixAllDescriptions : Diagnostics . Add_all_missing_override_modifiers ,
66
+ } ,
67
+ // case #4:
68
+ [ Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 . code ] : {
69
+ descriptions : Diagnostics . Add_override_modifier ,
70
+ fixId : fixAddOverrideId ,
71
+ fixAllDescriptions : Diagnostics . Remove_all_unnecessary_override_modifiers ,
72
+ } ,
73
+ // case #5:
74
+ [ Diagnostics . This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 . code ] : {
75
+ descriptions : Diagnostics . Remove_override_modifier ,
76
+ fixId : fixRemoveOverrideId ,
77
+ fixAllDescriptions : Diagnostics . Remove_all_unnecessary_override_modifiers ,
78
+ } ,
79
+ [ Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 . code ] : {
80
+ descriptions : Diagnostics . Remove_override_modifier ,
81
+ fixId : fixRemoveOverrideId ,
82
+ fixAllDescriptions : Diagnostics . Remove_all_unnecessary_override_modifiers ,
83
+ }
39
84
} ;
40
85
41
86
registerCodeFix ( {
42
87
errorCodes,
43
88
getCodeActions : context => {
44
- const { errorCode, span, sourceFile } = context ;
89
+ const { errorCode, span } = context ;
45
90
46
91
const info = errorCodeFixIdMap [ errorCode ] ;
47
92
if ( ! info ) return emptyArray ;
48
93
49
- const [ descriptions , fixId , fixAllDescriptions ] = info ;
50
- if ( isSourceFileJS ( sourceFile ) ) return emptyArray ;
94
+ const { descriptions, fixId, fixAllDescriptions } = info ;
51
95
const changes = textChanges . ChangeTracker . with ( context , changes => dispatchChanges ( changes , context , errorCode , span . start ) ) ;
52
96
53
97
return [
@@ -57,9 +101,9 @@ namespace ts.codefix {
57
101
fixIds : [ fixName , fixAddOverrideId , fixRemoveOverrideId ] ,
58
102
getAllCodeActions : context =>
59
103
codeFixAll ( context , errorCodes , ( changes , diag ) => {
60
- const { code, start, file } = diag ;
104
+ const { code, start } = diag ;
61
105
const info = errorCodeFixIdMap [ code ] ;
62
- if ( ! info || info [ 1 ] !== context . fixId || isSourceFileJS ( file ) ) {
106
+ if ( ! info || info . fixId !== context . fixId ) {
63
107
return ;
64
108
}
65
109
@@ -74,11 +118,15 @@ namespace ts.codefix {
74
118
pos : number ) {
75
119
switch ( errorCode ) {
76
120
case Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 . code :
121
+ case Diagnostics . This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code :
77
122
case Diagnostics . This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 . code :
78
123
case Diagnostics . This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 . code :
124
+ case Diagnostics . This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 . code :
79
125
return doAddOverrideModifierChange ( changeTracker , context . sourceFile , pos ) ;
80
126
case Diagnostics . This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 . code :
127
+ case Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 . code :
81
128
case Diagnostics . This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class . code :
129
+ case Diagnostics . This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class . code :
82
130
return doRemoveOverrideModifierChange ( changeTracker , context . sourceFile , pos ) ;
83
131
default :
84
132
Debug . fail ( "Unexpected error code: " + errorCode ) ;
@@ -87,6 +135,10 @@ namespace ts.codefix {
87
135
88
136
function doAddOverrideModifierChange ( changeTracker : textChanges . ChangeTracker , sourceFile : SourceFile , pos : number ) {
89
137
const classElement = findContainerClassElementLike ( sourceFile , pos ) ;
138
+ if ( isSourceFileJS ( sourceFile ) ) {
139
+ changeTracker . addJSDocTags ( sourceFile , classElement , [ factory . createJSDocOverrideTag ( factory . createIdentifier ( "override" ) ) ] ) ;
140
+ return ;
141
+ }
90
142
const modifiers = classElement . modifiers || emptyArray ;
91
143
const staticModifier = find ( modifiers , isStaticModifier ) ;
92
144
const abstractModifier = find ( modifiers , isAbstractModifier ) ;
@@ -101,6 +153,10 @@ namespace ts.codefix {
101
153
102
154
function doRemoveOverrideModifierChange ( changeTracker : textChanges . ChangeTracker , sourceFile : SourceFile , pos : number ) {
103
155
const classElement = findContainerClassElementLike ( sourceFile , pos ) ;
156
+ if ( isSourceFileJS ( sourceFile ) ) {
157
+ changeTracker . filterJSDocTags ( sourceFile , classElement , not ( isJSDocOverrideTag ) ) ;
158
+ return ;
159
+ }
104
160
const overrideModifier = classElement . modifiers && find ( classElement . modifiers , modifier => modifier . kind === SyntaxKind . OverrideKeyword ) ;
105
161
Debug . assertIsDefined ( overrideModifier ) ;
106
162
0 commit comments