@@ -28,21 +28,25 @@ namespace ts.codefix {
28
28
29
29
function doChanges ( changes : textChanges . ChangeTracker , sourceFile : SourceFile , extendsToken : Node , heritageClauses : ReadonlyArray < HeritageClause > ) : void {
30
30
changes . replaceRange ( sourceFile , { pos : extendsToken . getStart ( ) , end : extendsToken . end } , createToken ( SyntaxKind . ImplementsKeyword ) ) ;
31
- // We replace existing keywords with commas.
32
- for ( let i = 1 ; i < heritageClauses . length ; i ++ ) {
33
- const keywordToken = heritageClauses [ i ] . getFirstToken ( ) ! ;
34
- const keywordFullStart = keywordToken . getFullStart ( ) ;
35
- changes . replaceRange ( sourceFile , { pos : keywordFullStart , end : keywordFullStart } , createToken ( SyntaxKind . CommaToken ) ) ;
31
+
32
+ // If there is already an implements clause, replace the implements keyword with a comma.
33
+ if ( heritageClauses . length === 2 &&
34
+ heritageClauses [ 0 ] . token === SyntaxKind . ExtendsKeyword &&
35
+ heritageClauses [ 1 ] . token === SyntaxKind . ImplementsKeyword ) {
36
+
37
+ const implementsToken = heritageClauses [ 1 ] . getFirstToken ( ) ! ;
38
+ const implementsFullStart = implementsToken . getFullStart ( ) ;
39
+ changes . replaceRange ( sourceFile , { pos : implementsFullStart , end : implementsFullStart } , createToken ( SyntaxKind . CommaToken ) ) ;
36
40
37
41
// Rough heuristic: delete trailing whitespace after keyword so that it's not excessive.
38
42
// (Trailing because leading might be indentation, which is more sensitive.)
39
43
const text = sourceFile . text ;
40
- let end = keywordToken . end ;
44
+ let end = implementsToken . end ;
41
45
while ( end < text . length && ts . isWhiteSpaceSingleLine ( text . charCodeAt ( end ) ) ) {
42
46
end ++ ;
43
47
}
44
48
45
- changes . deleteRange ( sourceFile , { pos : keywordToken . getStart ( ) , end } ) ;
49
+ changes . deleteRange ( sourceFile , { pos : implementsToken . getStart ( ) , end } ) ;
46
50
}
47
51
}
48
52
}
0 commit comments