Skip to content

Commit 16f3b93

Browse files
author
Andy
authored
Simplify TextSpan creation (microsoft#21306)
* Simplify TextSpan creation * Rename 'start' to 'pos' where possible
1 parent 37f15cc commit 16f3b93

12 files changed

Lines changed: 82 additions & 91 deletions

src/harness/fourslash.ts

Lines changed: 43 additions & 47 deletions
Large diffs are not rendered by default.

src/harness/unittests/extractRanges.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace ts {
99
if (!selectionRange) {
1010
throw new Error(`Test ${s} does not specify selection range`);
1111
}
12-
const result = refactor.extractSymbol.getRangeToExtract(file, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
12+
const result = refactor.extractSymbol.getRangeToExtract(file, createTextSpanFromRange(selectionRange));
1313
assert(result.targetRange === undefined, "failure expected");
1414
const sortedErrors = result.errors.map(e => <string>e.messageText).sort();
1515
assert.deepEqual(sortedErrors, expectedErrors.sort(), "unexpected errors");
@@ -23,19 +23,19 @@ namespace ts {
2323
if (!selectionRange) {
2424
throw new Error(`Test ${s} does not specify selection range`);
2525
}
26-
const result = refactor.extractSymbol.getRangeToExtract(f, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
26+
const result = refactor.extractSymbol.getRangeToExtract(f, createTextSpanFromRange(selectionRange));
2727
const expectedRange = t.ranges.get("extracted");
2828
if (expectedRange) {
29-
let start: number, end: number;
29+
let pos: number, end: number;
3030
if (ts.isArray(result.targetRange.range)) {
31-
start = result.targetRange.range[0].getStart(f);
31+
pos = result.targetRange.range[0].getStart(f);
3232
end = ts.lastOrUndefined(result.targetRange.range).getEnd();
3333
}
3434
else {
35-
start = result.targetRange.range.getStart(f);
35+
pos = result.targetRange.range.getStart(f);
3636
end = result.targetRange.range.getEnd();
3737
}
38-
assert.equal(start, expectedRange.start, "incorrect start of range");
38+
assert.equal(pos, expectedRange.pos, "incorrect pos of range");
3939
assert.equal(end, expectedRange.end, "incorrect end of range");
4040
}
4141
else {

src/harness/unittests/extractTestHelpers.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
/// <reference path="tsserverProjectSystem.ts" />
33

44
namespace ts {
5-
export interface Range {
6-
start: number;
5+
interface Range {
6+
pos: number;
77
end: number;
88
name: string;
99
}
1010

11-
export interface Test {
11+
interface Test {
1212
source: string;
1313
ranges: Map<Range>;
1414
}
@@ -34,7 +34,7 @@ namespace ts {
3434
const name = s === e
3535
? source.charCodeAt(saved + 1) === CharacterCodes.hash ? "selection" : "extracted"
3636
: source.substring(s, e);
37-
activeRanges.push({ name, start: text.length, end: undefined });
37+
activeRanges.push({ name, pos: text.length, end: undefined });
3838
lastPos = pos;
3939
continue;
4040
}
@@ -123,12 +123,12 @@ namespace ts {
123123
cancellationToken: { throwIfCancellationRequested: noop, isCancellationRequested: returnFalse },
124124
program,
125125
file: sourceFile,
126-
startPosition: selectionRange.start,
126+
startPosition: selectionRange.pos,
127127
endPosition: selectionRange.end,
128128
host: notImplementedHost,
129129
formatContext: formatting.getFormatContext(testFormatOptions),
130130
};
131-
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
131+
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromRange(selectionRange));
132132
assert.equal(rangeToExtract.errors, undefined, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);
133133
const infos = refactor.extractSymbol.getAvailableActions(context);
134134
const actions = find(infos, info => info.description === description.message).actions;
@@ -186,12 +186,12 @@ namespace ts {
186186
cancellationToken: { throwIfCancellationRequested: noop, isCancellationRequested: returnFalse },
187187
program,
188188
file: sourceFile,
189-
startPosition: selectionRange.start,
189+
startPosition: selectionRange.pos,
190190
endPosition: selectionRange.end,
191191
host: notImplementedHost,
192192
formatContext: formatting.getFormatContext(testFormatOptions),
193193
};
194-
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
194+
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromRange(selectionRange));
195195
assert.isUndefined(rangeToExtract.errors, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);
196196
const infos = refactor.extractSymbol.getAvailableActions(context);
197197
assert.isUndefined(find(infos, info => info.description === description.message));

src/services/goToDefinition.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,7 @@ namespace ts.GoToDefinition {
149149
// Check if position is on triple slash reference.
150150
const comment = findReferenceInPosition(sourceFile.referencedFiles, position) || findReferenceInPosition(sourceFile.typeReferenceDirectives, position);
151151
if (comment) {
152-
return {
153-
definitions,
154-
textSpan: createTextSpanFromBounds(comment.pos, comment.end)
155-
};
152+
return { definitions, textSpan: createTextSpanFromRange(comment) };
156153
}
157154

158155
const node = getTouchingPropertyName(sourceFile, position, /*includeJsDocComment*/ true);
@@ -258,7 +255,7 @@ namespace ts.GoToDefinition {
258255
return createDefinitionInfo(decl, symbolKind, symbolName, containerName);
259256
}
260257

261-
export function findReferenceInPosition(refs: ReadonlyArray<FileReference>, pos: number): FileReference {
258+
export function findReferenceInPosition(refs: ReadonlyArray<FileReference>, pos: number): FileReference | undefined {
262259
for (const ref of refs) {
263260
if (ref.pos <= pos && pos <= ref.end) {
264261
return ref;

src/services/navigationBar.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -632,9 +632,7 @@ namespace ts.NavigationBar {
632632
}
633633

634634
function getNodeSpan(node: Node): TextSpan {
635-
return node.kind === SyntaxKind.SourceFile
636-
? createTextSpanFromBounds(node.getFullStart(), node.getEnd())
637-
: createTextSpanFromNode(node, curSourceFile);
635+
return node.kind === SyntaxKind.SourceFile ? createTextSpanFromRange(node) : createTextSpanFromNode(node, curSourceFile);
638636
}
639637

640638
function getModifiers(node: ts.Node): string {

src/services/textChanges.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ namespace ts.textChanges {
629629
}
630630

631631
private computeSpan(change: Change, _sourceFile: SourceFile): TextSpan {
632-
return createTextSpanFromBounds(change.range.pos, change.range.end);
632+
return createTextSpanFromRange(change.range);
633633
}
634634

635635
private computeNewText(change: Change, sourceFile: SourceFile): string {

tests/cases/fourslash/fourslash.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ declare namespace FourSlashInterface {
102102
}
103103
interface Range {
104104
fileName: string;
105-
start: number;
105+
pos: number;
106106
end: number;
107107
marker?: Marker;
108108
}
@@ -289,7 +289,7 @@ declare namespace FourSlashInterface {
289289
baselineGetEmitOutput(): void;
290290
baselineQuickInfo(): void;
291291
nameOrDottedNameSpanTextIs(text: string): void;
292-
outliningSpansInCurrentFile(spans: TextSpan[]): void;
292+
outliningSpansInCurrentFile(spans: Range[]): void;
293293
todoCommentsInCurrentFile(descriptors: string[]): void;
294294
matchingBracePositionInCurrentFile(bracePosition: number, expectedMatchPosition: number): void;
295295
noMatchingBracePositionInCurrentFile(bracePosition: number): void;

tests/cases/fourslash/getMatchingBraces.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
////}
3939
////const x: Array[|<() => void>|] = [];
4040

41-
test.ranges().forEach((range) => {
42-
verify.matchingBracePositionInCurrentFile(range.start, range.end - 1);
43-
verify.matchingBracePositionInCurrentFile(range.end - 1, range.start);
44-
});
41+
for (const range of test.ranges()) {
42+
verify.matchingBracePositionInCurrentFile(range.pos, range.end - 1);
43+
verify.matchingBracePositionInCurrentFile(range.end - 1, range.pos);
44+
}

tests/cases/fourslash/getMatchingBracesAdjacentBraces.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
// If there is an adjacent opening and closing brace,
66
// then only the opening brace should get highlighted.
7-
test.ranges().forEach(range => {
8-
verify.matchingBracePositionInCurrentFile(range.start, range.end - 1);
9-
});
7+
for (const range of test.ranges()) {
8+
verify.matchingBracePositionInCurrentFile(range.pos, range.end - 1);
9+
}

tests/cases/fourslash/server/brace01.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
//// }
3838
////}
3939

40-
test.ranges().forEach((range) => {
41-
verify.matchingBracePositionInCurrentFile(range.start, range.end - 1);
42-
verify.matchingBracePositionInCurrentFile(range.end - 1, range.start);
43-
});
40+
for (const range of test.ranges()) {
41+
verify.matchingBracePositionInCurrentFile(range.pos, range.end - 1);
42+
verify.matchingBracePositionInCurrentFile(range.end - 1, range.pos);
43+
}

0 commit comments

Comments
 (0)