Skip to content

Commit f77cefe

Browse files
committed
Introduce *WithNodes paralleling textChanges.Replace*
1) Take options 2) Return `this` 3) Use adjusted positions
1 parent 80b2c58 commit f77cefe

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

src/services/refactors/extractSymbol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ namespace ts.refactor.extractSymbol {
968968
}
969969

970970
if (isReadonlyArray(range.range)) {
971-
changeTracker.replaceNodesWithNodes(context.file, range.range, newNodes);
971+
changeTracker.replaceNodeRangeWithNodes(context.file, first(range.range), last(range.range), newNodes);
972972
}
973973
else {
974974
changeTracker.replaceNodeWithNodes(context.file, range.range, newNodes);

src/services/textChanges.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ namespace ts.textChanges {
282282
return this;
283283
}
284284

285-
public replaceRange(sourceFile: SourceFile, range: TextRange, newNode: Node, options: InsertNodeOptions = {}) {
285+
public replaceRange(sourceFile: SourceFile, range: TextRange, newNode: Node, options: ChangeNodeOptions = {}) {
286286
this.changes.push({ kind: ChangeKind.ReplaceWithSingleNode, sourceFile, range, options, node: newNode });
287287
return this;
288288
}
@@ -299,23 +299,29 @@ namespace ts.textChanges {
299299
return this.replaceRange(sourceFile, { pos, end }, newNode, options);
300300
}
301301

302-
private replaceWithMultiple(sourceFile: SourceFile, startPosition: number, endPosition: number, newNodes: ReadonlyArray<Node>, options: ChangeMultipleNodesOptions): this {
303-
this.changes.push({
304-
kind: ChangeKind.ReplaceWithMultipleNodes,
305-
sourceFile,
306-
options,
307-
nodes: newNodes,
308-
range: { pos: startPosition, end: endPosition }
309-
});
302+
private getDefaultChangeMultipleNodesOptions(): ChangeMultipleNodesOptions {
303+
return {
304+
nodeSeparator: this.newLineCharacter,
305+
useNonAdjustedStartPosition: true,
306+
useNonAdjustedEndPosition: true,
307+
};
308+
}
309+
310+
public replaceRangeWithNodes(sourceFile: SourceFile, range: TextRange, newNodes: ReadonlyArray<Node>, options: ChangeMultipleNodesOptions = this.getDefaultChangeMultipleNodesOptions()) {
311+
this.changes.push({ kind: ChangeKind.ReplaceWithMultipleNodes, sourceFile, range, options, nodes: newNodes });
310312
return this;
311313
}
312314

313-
public replaceNodeWithNodes(sourceFile: SourceFile, oldNode: Node, newNodes: ReadonlyArray<Node>): void {
314-
this.replaceWithMultiple(sourceFile, oldNode.getStart(sourceFile), oldNode.getEnd(), newNodes, { nodeSeparator: this.newLineCharacter });
315+
public replaceNodeWithNodes(sourceFile: SourceFile, oldNode: Node, newNodes: ReadonlyArray<Node>, options: ChangeMultipleNodesOptions = this.getDefaultChangeMultipleNodesOptions()) {
316+
const pos = getAdjustedStartPosition(sourceFile, oldNode, options, Position.Start);
317+
const end = getAdjustedEndPosition(sourceFile, oldNode, options);
318+
return this.replaceRangeWithNodes(sourceFile, { pos, end }, newNodes, options);
315319
}
316320

317-
public replaceNodesWithNodes(sourceFile: SourceFile, oldNodes: ReadonlyArray<Node>, newNodes: ReadonlyArray<Node>): void {
318-
this.replaceWithMultiple(sourceFile, first(oldNodes).getStart(sourceFile), last(oldNodes).getEnd(), newNodes, { nodeSeparator: this.newLineCharacter });
321+
public replaceNodeRangeWithNodes(sourceFile: SourceFile, startNode: Node, endNode: Node, newNodes: ReadonlyArray<Node>, options: ChangeMultipleNodesOptions = this.getDefaultChangeMultipleNodesOptions()) {
322+
const pos = getAdjustedStartPosition(sourceFile, startNode, options, Position.Start);
323+
const end = getAdjustedEndPosition(sourceFile, endNode, options);
324+
return this.replaceRangeWithNodes(sourceFile, { pos, end }, newNodes, options);
319325
}
320326

321327
private insertNodeAt(sourceFile: SourceFile, pos: number, newNode: Node, options: InsertNodeOptions = {}) {

0 commit comments

Comments
 (0)