Skip to content

Commit cae4bc5

Browse files
author
Andy
authored
Move createTextChange to services/utilities.ts (#21416)
* Move createTextChange to services/utilities.ts * Use separate functions instead of overloads
1 parent f0ba16c commit cae4bc5

File tree

6 files changed

+18
-25
lines changed

6 files changed

+18
-25
lines changed

src/services/codefixes/disableJsDiagnostics.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,9 @@ namespace ts.codefix {
2424
},
2525
{
2626
description: getLocaleSpecificMessage(Diagnostics.Disable_checking_for_this_file),
27-
changes: [createFileTextChanges(sourceFile.fileName, [{
28-
span: {
29-
start: sourceFile.checkJsDirective ? sourceFile.checkJsDirective.pos : 0,
30-
length: sourceFile.checkJsDirective ? sourceFile.checkJsDirective.end - sourceFile.checkJsDirective.pos : 0
31-
},
32-
newText: `// @ts-nocheck${newLineCharacter}`
33-
}])],
27+
changes: [createFileTextChanges(sourceFile.fileName, [
28+
createTextChange(sourceFile.checkJsDirective ? createTextSpanFromBounds(sourceFile.checkJsDirective.pos, sourceFile.checkJsDirective.end) : createTextSpan(0, 0), `// @ts-nocheck${newLineCharacter}`),
29+
])],
3430
// fixId unnecessary because adding `// @ts-nocheck` even once will ignore every error in the file.
3531
fixId: undefined,
3632
}];
@@ -62,15 +58,11 @@ namespace ts.codefix {
6258
const token = getTouchingToken(sourceFile, startPosition, /*includeJsDocComment*/ false);
6359
const tokenLeadingComments = getLeadingCommentRangesOfNode(token, sourceFile);
6460
if (!tokenLeadingComments || !tokenLeadingComments.length || tokenLeadingComments[0].pos >= startPosition) {
65-
return { lineNumber, change: createTextChange(startPosition, 0, `// @ts-ignore${newLineCharacter}`) };
61+
return { lineNumber, change: createTextChangeFromStartLength(startPosition, 0, `// @ts-ignore${newLineCharacter}`) };
6662
}
6763
}
6864

6965
// If all fails, add an extra new line immediately before the error span.
70-
return { lineNumber, change: createTextChange(position, 0, `${position === startPosition ? "" : newLineCharacter}// @ts-ignore${newLineCharacter}`) };
71-
}
72-
73-
function createTextChange(start: number, length: number, newText: string): TextChange {
74-
return { span: { start, length }, newText };
66+
return { lineNumber, change: createTextChangeFromStartLength(position, 0, `${position === startPosition ? "" : newLineCharacter}// @ts-ignore${newLineCharacter}`) };
7567
}
7668
}

src/services/codefixes/fixJSDocTypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace ts.codefix {
5050
}
5151

5252
function createChange(declaration: TypeNode, sourceFile: SourceFile, newText: string): TextChange {
53-
return { span: createTextSpanFromBounds(declaration.getStart(sourceFile), declaration.getEnd()), newText };
53+
return createTextChange(createTextSpanFromNode(declaration, sourceFile), newText);
5454
}
5555

5656
function typeString(type: Type, checker: TypeChecker): string {

src/services/codefixes/inferFromUsage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ namespace ts.codefix {
191191

192192
function makeChange(declaration: Declaration, start: number, type: Type | undefined, program: Program): TextChange | undefined {
193193
const typeString = type && typeToString(type, declaration, program.getTypeChecker());
194-
return typeString === undefined ? undefined : { span: createTextSpan(start, 0), newText: `: ${typeString}` };
194+
return typeString === undefined ? undefined : createTextChangeFromStartLength(start, 0, `: ${typeString}`);
195195
}
196196

197197
function getReferences(token: PropertyName | Token<SyntaxKind.ConstructorKeyword>, sourceFile: SourceFile, program: Program, cancellationToken: CancellationToken): Identifier[] {

src/services/formatting/formatting.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,19 +1078,15 @@ namespace ts.formatting {
10781078
trimTrailingWhitespacesForLines(startLine, endLine + 1, previousRange);
10791079
}
10801080

1081-
function newTextChange(start: number, len: number, newText: string): TextChange {
1082-
return { span: createTextSpan(start, len), newText };
1083-
}
1084-
10851081
function recordDelete(start: number, len: number) {
10861082
if (len) {
1087-
edits.push(newTextChange(start, len, ""));
1083+
edits.push(createTextChangeFromStartLength(start, len, ""));
10881084
}
10891085
}
10901086

10911087
function recordReplace(start: number, len: number, newText: string) {
10921088
if (len || newText) {
1093-
edits.push(newTextChange(start, len, newText));
1089+
edits.push(createTextChangeFromStartLength(start, len, newText));
10941090
}
10951091
}
10961092

src/services/textChanges.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -620,10 +620,7 @@ namespace ts.textChanges {
620620
const sourceFile = changesInFile[0].sourceFile;
621621
const fileTextChanges: FileTextChanges = { fileName: sourceFile.fileName, textChanges: [] };
622622
for (const c of ChangeTracker.normalize(changesInFile)) {
623-
fileTextChanges.textChanges.push({
624-
span: this.computeSpan(c, sourceFile),
625-
newText: this.computeNewText(c, sourceFile)
626-
});
623+
fileTextChanges.textChanges.push(createTextChange(this.computeSpan(c, sourceFile), this.computeNewText(c, sourceFile)));
627624
}
628625
fileChangesList.push(fileTextChanges);
629626
});

src/services/utilities.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,14 @@ namespace ts {
10671067
return createTextSpanFromBounds(range.pos, range.end);
10681068
}
10691069

1070+
export function createTextChangeFromStartLength(start: number, length: number, newText: string): TextChange {
1071+
return createTextChange(createTextSpan(start, length), newText);
1072+
}
1073+
1074+
export function createTextChange(span: TextSpan, newText: string): TextChange {
1075+
return { span, newText };
1076+
}
1077+
10701078
export const typeKeywords: ReadonlyArray<SyntaxKind> = [
10711079
SyntaxKind.AnyKeyword,
10721080
SyntaxKind.BooleanKeyword,

0 commit comments

Comments
 (0)