From 6c9b2d9de91bdae20186b609a9b293ca22afd6e4 Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Tue, 23 Jan 2018 15:48:48 -0800 Subject: [PATCH 1/2] Check syntax kind in isDeclarationNameOrImportPropertyName Otherwise, keywords are accepted. Assert was ``` fail (e:\ts_gh\src\compiler\core.ts:2867) assert (e:\ts_gh\src\compiler\core.ts:2837) isExportSpecifierAlias (e:\ts_gh\src\services\findAllReferences.ts:931) getLocalSymbolForExportSpecifier (e:\ts_gh\src\services\findAllReferences.ts:926) skipPastExportOrImportSpecifierOrUnion (e:\ts_gh\src\services\findAllReferences.ts:411) getReferencedSymbolsForSymbol (e:\ts_gh\src\services\findAllReferences.ts:359) getReferencedSymbolsForNode (e:\ts_gh\src\services\findAllReferences.ts:271) getReferenceEntriesForNode (e:\ts_gh\src\services\findAllReferences.ts:91) getSemanticDocumentHighlights (e:\ts_gh\src\services\documentHighlights.ts:25) getDocumentHighlights (e:\ts_gh\src\services\documentHighlights.ts:13) getDocumentHighlights (e:\ts_gh\src\services\services.ts:1584) getOccurrencesAtPositionCore (e:\ts_gh\src\services\services.ts:1588) getOccurrencesAtPosition (e:\ts_gh\src\services\services.ts:1567) Session.getOccurrences (e:\ts_gh\src\server\session.ts:718) Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (e:\ts_gh\src\server\session.ts:1999) (anonymous function) (e:\ts_gh\src\server\session.ts:2079) Session.executeWithRequestId (e:\ts_gh\src\server\session.ts:2069) Session.executeCommand (e:\ts_gh\src\server\session.ts:2079) Session.onMessage (e:\ts_gh\src\server\session.ts:2101) (anonymous function) (e:\ts_gh\src\server\server.ts:593) ``` --- src/compiler/checker.ts | 2 +- src/harness/fourslash.ts | 13 +++++++++++++ tests/cases/fourslash/documentHighlightInExport1.ts | 11 +++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/documentHighlightInExport1.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 01b3a047d1d..c58b69252fc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26580,7 +26580,7 @@ namespace ts { switch (name.parent.kind) { case SyntaxKind.ImportSpecifier: case SyntaxKind.ExportSpecifier: - return true; + return isIdentifier(name); default: return isDeclarationName(name); } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index bf5f46de248..79ddf0ace40 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2876,6 +2876,15 @@ Actual: ${stringify(fullActual)}`); } } + public verifyNoDocumentHighlights(startRange: Range) { + this.goToRangeStart(startRange); + const documentHighlights = this.getDocumentHighlightsAtCurrentPosition([this.activeFile.fileName]); + const numHighlights = ts.length(documentHighlights); + if (numHighlights > 0) { + this.raiseError(`verifyNoDocumentHighlights failed - unexpectedly got ${numHighlights} highlights`); + } + } + private verifyDocumentHighlights(expectedRanges: Range[], fileNames: string[] = [this.activeFile.fileName]) { const documentHighlights = this.getDocumentHighlightsAtCurrentPosition(fileNames) || []; @@ -4284,6 +4293,10 @@ namespace FourSlashInterface { this.state.verifyDocumentHighlightsOf(startRange, ranges); } + public noDocumentHighlights(startRange: FourSlash.Range) { + this.state.verifyNoDocumentHighlights(startRange); + } + public completionEntryDetailIs(entryName: string, text: string, documentation?: string, kind?: string, tags?: ts.JSDocTagInfo[]) { this.state.verifyCompletionEntryDetails(entryName, text, documentation, kind, tags); } diff --git a/tests/cases/fourslash/documentHighlightInExport1.ts b/tests/cases/fourslash/documentHighlightInExport1.ts new file mode 100644 index 00000000000..16b5261c5e0 --- /dev/null +++ b/tests/cases/fourslash/documentHighlightInExport1.ts @@ -0,0 +1,11 @@ +/// + +// @Filename: file1.ts +//// class [|C|] {} +//// [|export|] { [|C|] [|as|] [|D|] }; + +const [classRange, exportKeywordRange, propertyNameRange, asKeywordRange, nameRange] = test.ranges(); +verify.noDocumentHighlights(exportKeywordRange); +verify.documentHighlightsOf(propertyNameRange, [classRange, propertyNameRange, nameRange]); +verify.noDocumentHighlights(asKeywordRange); +verify.documentHighlightsOf(nameRange, [nameRange]); From cd0000110d0c13ed3a38f022204421289f97dbc7 Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Wed, 31 Jan 2018 11:12:09 -0800 Subject: [PATCH 2/2] Add FAR test --- tests/cases/fourslash/documentHighlightInExport1.ts | 1 - tests/cases/fourslash/findAllRefsInExport1.ts | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/findAllRefsInExport1.ts diff --git a/tests/cases/fourslash/documentHighlightInExport1.ts b/tests/cases/fourslash/documentHighlightInExport1.ts index 16b5261c5e0..bf5bc7cfa94 100644 --- a/tests/cases/fourslash/documentHighlightInExport1.ts +++ b/tests/cases/fourslash/documentHighlightInExport1.ts @@ -1,6 +1,5 @@ /// -// @Filename: file1.ts //// class [|C|] {} //// [|export|] { [|C|] [|as|] [|D|] }; diff --git a/tests/cases/fourslash/findAllRefsInExport1.ts b/tests/cases/fourslash/findAllRefsInExport1.ts new file mode 100644 index 00000000000..02ec901177f --- /dev/null +++ b/tests/cases/fourslash/findAllRefsInExport1.ts @@ -0,0 +1,10 @@ +/// + +//// class C {} +//// /*1*/export { C /*2*/as D }; + +goTo.marker("1"); +verify.noReferences(); + +goTo.marker("2"); +verify.noReferences(); \ No newline at end of file