@@ -28,21 +28,25 @@ namespace ts.codefix {
2828
2929 function doChanges ( changes : textChanges . ChangeTracker , sourceFile : SourceFile , extendsToken : Node , heritageClauses : ReadonlyArray < HeritageClause > ) : void {
3030 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 ) ) ;
3640
3741 // Rough heuristic: delete trailing whitespace after keyword so that it's not excessive.
3842 // (Trailing because leading might be indentation, which is more sensitive.)
3943 const text = sourceFile . text ;
40- let end = keywordToken . end ;
44+ let end = implementsToken . end ;
4145 while ( end < text . length && ts . isWhiteSpaceSingleLine ( text . charCodeAt ( end ) ) ) {
4246 end ++ ;
4347 }
4448
45- changes . deleteRange ( sourceFile , { pos : keywordToken . getStart ( ) , end } ) ;
49+ changes . deleteRange ( sourceFile , { pos : implementsToken . getStart ( ) , end } ) ;
4650 }
4751 }
4852}
0 commit comments