@@ -310,8 +310,18 @@ namespace ts.textChanges {
310
310
} ) ;
311
311
}
312
312
313
+ public insertFirstParameter ( sourceFile : SourceFile , parameters : NodeArray < ParameterDeclaration > , newParam : ParameterDeclaration ) : void {
314
+ const p0 = firstOrUndefined ( parameters ) ;
315
+ if ( p0 ) {
316
+ this . insertNodeBefore ( sourceFile , p0 , newParam ) ;
317
+ }
318
+ else {
319
+ this . insertNodeAt ( sourceFile , parameters . pos , newParam ) ;
320
+ }
321
+ }
322
+
313
323
public insertNodeBefore ( sourceFile : SourceFile , before : Node , newNode : Node , blankLineBetween = false ) {
314
- this . insertNodeAt ( sourceFile , getAdjustedStartPosition ( sourceFile , before , { } , Position . Start ) , newNode , this . getOptionsForInsertNodeBefore ( before , blankLineBetween ) ) ;
324
+ this . insertNodeAt ( sourceFile , getAdjustedStartPosition ( sourceFile , before , { } , Position . Start ) , newNode , this . getOptionsForInsertNodeBefore ( before , newNode , blankLineBetween ) ) ;
315
325
}
316
326
317
327
public insertModifierBefore ( sourceFile : SourceFile , modifier : SyntaxKind , before : Node ) : void {
@@ -390,15 +400,15 @@ namespace ts.textChanges {
390
400
this . insertNodesAt ( sourceFile , start , typeParameters , { prefix : "<" , suffix : ">" } ) ;
391
401
}
392
402
393
- private getOptionsForInsertNodeBefore ( before : Node , doubleNewlines : boolean ) : InsertNodeOptions {
403
+ private getOptionsForInsertNodeBefore ( before : Node , inserted : Node , doubleNewlines : boolean ) : InsertNodeOptions {
394
404
if ( isStatement ( before ) || isClassElement ( before ) ) {
395
405
return { suffix : doubleNewlines ? this . newLineCharacter + this . newLineCharacter : this . newLineCharacter } ;
396
406
}
397
407
else if ( isVariableDeclaration ( before ) ) { // insert `x = 1, ` into `const x = 1, y = 2;
398
408
return { suffix : ", " } ;
399
409
}
400
410
else if ( isParameter ( before ) ) {
401
- return { } ;
411
+ return isParameter ( inserted ) ? { suffix : ", " } : { } ;
402
412
}
403
413
else if ( isStringLiteral ( before ) && isImportDeclaration ( before . parent ) || isNamedImports ( before ) ) {
404
414
return { suffix : ", " } ;
@@ -807,7 +817,7 @@ namespace ts.textChanges {
807
817
}
808
818
809
819
/** Note: this may mutate `nodeIn`. */
810
- export function getFormattedTextOfNode ( nodeIn : Node , sourceFile : SourceFile , pos : number , { indentation, prefix, delta } : InsertNodeOptions , newLineCharacter : string , formatContext : formatting . FormatContext , validate : ValidateNonFormattedText | undefined ) : string {
820
+ function getFormattedTextOfNode ( nodeIn : Node , sourceFile : SourceFile , pos : number , { indentation, prefix, delta } : InsertNodeOptions , newLineCharacter : string , formatContext : formatting . FormatContext , validate : ValidateNonFormattedText | undefined ) : string {
811
821
// Emitter doesn't handle JSDoc, so generate that here.
812
822
if ( isJSDocTag ( nodeIn ) ) {
813
823
switch ( nodeIn . kind ) {
0 commit comments