From f52c881ab1fe8319bbcfaeef26041fc8ef1b31d8 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 25 Jun 2018 12:41:12 -0700 Subject: [PATCH] Improve verify.renameLocations (#25192) --- src/harness/fourslash.ts | 39 ++++++--------------------------------- src/services/services.ts | 3 ++- 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index d2b5368b623..50bf29339c6 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1388,17 +1388,8 @@ Actual: ${stringify(fullActual)}`); } } - public verifyRenameLocations(startRanges: ArrayOrSingle, options: Range[] | { findInStrings?: boolean, findInComments?: boolean, ranges: Range[] }) { - let findInStrings: boolean, findInComments: boolean, ranges: Range[]; - if (ts.isArray(options)) { - findInStrings = findInComments = false; - ranges = options; - } - else { - findInStrings = !!options.findInStrings; - findInComments = !!options.findInComments; - ranges = options.ranges; - } + public verifyRenameLocations(startRanges: ArrayOrSingle, options: ReadonlyArray | { findInStrings?: boolean, findInComments?: boolean, ranges: ReadonlyArray }) { + const { findInStrings = false, findInComments = false, ranges = this.getRanges() } = ts.isArray(options) ? { findInStrings: false, findInComments: false, ranges: options } : options; for (const startRange of toArray(startRanges)) { this.goToRangeStart(startRange); @@ -1409,30 +1400,12 @@ Actual: ${stringify(fullActual)}`); break; } - let references = this.languageService.findRenameLocations( + const references = this.languageService.findRenameLocations( this.activeFile.fileName, this.currentCaretPosition, findInStrings, findInComments); - ranges = ranges || this.getRanges(); - - if (!references) { - if (ranges.length !== 0) { - this.raiseError(`Expected ${ranges.length} rename locations; got none.`); - } - return; - } - - if (ranges.length !== references.length) { - this.raiseError("Rename location count does not match result.\n\nExpected: " + stringify(ranges) + "\n\nActual:" + stringify(references)); - } - - ranges = ranges.sort((r1, r2) => r1.pos - r2.pos); - references = references.sort((r1, r2) => r1.textSpan.start - r2.textSpan.start); - - ts.zipWith(references, ranges, (reference, range) => { - if (reference.textSpan.start !== range.pos || ts.textSpanEnd(reference.textSpan) !== range.end) { - this.raiseError("Rename location results do not match.\n\nExpected: " + stringify(ranges) + "\n\nActual:" + stringify(references)); - } - }); + const sort = (locations: ReadonlyArray | undefined) => + locations && ts.sort(locations, (r1, r2) => ts.compareStringsCaseSensitive(r1.fileName, r2.fileName) || r1.textSpan.start - r2.textSpan.start); + assert.deepEqual(sort(references), sort(ranges.map((r): ts.RenameLocation => ({ fileName: r.fileName, textSpan: ts.createTextSpanFromRange(r) })))); } } diff --git a/src/services/services.ts b/src/services/services.ts index 67241270e9e..29b3a4988bd 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1697,7 +1697,8 @@ namespace ts { } function findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[] | undefined { - return getReferences(fileName, position, { findInStrings, findInComments, isForRename: true }); + const refs = getReferences(fileName, position, { findInStrings, findInComments, isForRename: true }); + return refs && refs.map(({ fileName, textSpan }): RenameLocation => ({ fileName, textSpan })); } function getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[] | undefined {