From 2b663a8c365eec5aec48ceb85be7ccdda37697a0 Mon Sep 17 00:00:00 2001 From: Orta Date: Wed, 8 Jul 2020 11:14:25 -0400 Subject: [PATCH 1/2] WIP - don't provide a breaking change --- src/services/classifier2020.ts | 4 ++-- src/services/services.ts | 4 ++-- src/services/types.ts | 16 +++++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/services/classifier2020.ts b/src/services/classifier2020.ts index 2d8031e2fe655..694c20acdc7de 100644 --- a/src/services/classifier2020.ts +++ b/src/services/classifier2020.ts @@ -18,12 +18,12 @@ namespace ts.classifier.v2020 { } /** This is mainly used internally for testing */ - export function getSemanticClassifications(program: Program, cancellationToken: CancellationToken, sourceFile: SourceFile, span: TextSpan): ClassifiedSpan[] { + export function getSemanticClassifications(program: Program, cancellationToken: CancellationToken, sourceFile: SourceFile, span: TextSpan): ClassifiedSpan2020[] { const classifications = getEncodedSemanticClassifications(program, cancellationToken, sourceFile, span); Debug.assert(classifications.spans.length % 3 === 0); const dense = classifications.spans; - const result: ClassifiedSpan[] = []; + const result: ClassifiedSpan2020[] = []; for (let i = 0; i < dense.length; i += 3) { result.push({ textSpan: createTextSpan(dense[i], dense[i + 1]), diff --git a/src/services/services.ts b/src/services/services.ts index d7f0dc581af84..026bd68f308a5 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1797,7 +1797,7 @@ namespace ts { return kind === ScriptKind.TS || kind === ScriptKind.TSX; } - function getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] { + function getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): (ClassifiedSpan| ClassifiedSpan2020)[] { if (!isTsOrTsxFile(fileName)) { // do not run semantic classification on non-ts-or-tsx files return []; @@ -1829,7 +1829,7 @@ namespace ts { } } - function getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[] { + function getSyntacticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[] { // doesn't use compiler - no need to synchronize with host return ts.getSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); } diff --git a/src/services/types.ts b/src/services/types.ts index 581b70aef15f2..82dd6faf0afac 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -380,10 +380,15 @@ namespace ts { getCompilerOptionsDiagnostics(): Diagnostic[]; /** @deprecated Use getEncodedSyntacticClassifications instead. */ - getSyntacticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[]; + getSyntacticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.TwentyTwenty): ClassifiedSpan2020[]; + getSyntacticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.Original): ClassifiedSpan[]; + getSyntacticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; /** @deprecated Use getEncodedSemanticClassifications instead. */ - getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[]; + getSemanticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.TwentyTwenty): ClassifiedSpan2020[]; + getSemanticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.Original): ClassifiedSpan[]; + getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; + /** Encoded as triples of [start, length, ClassificationType]. */ getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications; @@ -603,7 +608,12 @@ namespace ts { export interface ClassifiedSpan { textSpan: TextSpan; - classificationType: ClassificationTypeNames | number; + classificationType: ClassificationTypeNames; + } + + export interface ClassifiedSpan2020 { + textSpan: TextSpan; + classificationType: number; } /** From 219c64a5db4c22b56288d2caff2bf1ae19916051 Mon Sep 17 00:00:00 2001 From: Orta Date: Wed, 9 Sep 2020 08:59:48 -0400 Subject: [PATCH 2/2] Fix all build errors --- src/harness/fourslashImpl.ts | 3 +-- src/services/services.ts | 5 +++-- src/services/types.ts | 10 ++++------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/harness/fourslashImpl.ts b/src/harness/fourslashImpl.ts index 628181c8f0f28..3bdfa29203e9d 100644 --- a/src/harness/fourslashImpl.ts +++ b/src/harness/fourslashImpl.ts @@ -2490,7 +2490,7 @@ namespace FourSlash { return [tokenTypes[typeIdx], ...tokenModifiers.filter((_, i) => modSet & 1 << i)].join("."); } - private verifyClassifications(expected: { classificationType: string | number, text?: string; textSpan?: TextSpan }[], actual: ts.ClassifiedSpan[], sourceFileText: string) { + private verifyClassifications(expected: { classificationType: string | number, text?: string; textSpan?: TextSpan }[], actual: (ts.ClassifiedSpan | ts.ClassifiedSpan2020)[] , sourceFileText: string) { if (actual.length !== expected.length) { this.raiseError("verifyClassifications failed - expected total classifications to be " + expected.length + ", but was " + actual.length + @@ -2579,7 +2579,6 @@ namespace FourSlash { public verifySemanticClassifications(format: ts.SemanticClassificationFormat, expected: { classificationType: string | number; text?: string }[]) { const actual = this.languageService.getSemanticClassifications(this.activeFile.fileName, ts.createTextSpan(0, this.activeFile.content.length), format); - this.verifyClassifications(expected, actual, this.activeFile.content); } diff --git a/src/services/services.ts b/src/services/services.ts index 026bd68f308a5..05a41528037a9 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1797,7 +1797,8 @@ namespace ts { return kind === ScriptKind.TS || kind === ScriptKind.TSX; } - function getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): (ClassifiedSpan| ClassifiedSpan2020)[] { + function getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[]; + function getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[] { if (!isTsOrTsxFile(fileName)) { // do not run semantic classification on non-ts-or-tsx files return []; @@ -1829,7 +1830,7 @@ namespace ts { } } - function getSyntacticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[] { + function getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[] { // doesn't use compiler - no need to synchronize with host return ts.getSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); } diff --git a/src/services/types.ts b/src/services/types.ts index 82dd6faf0afac..94151fd0a2c4d 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -380,14 +380,12 @@ namespace ts { getCompilerOptionsDiagnostics(): Diagnostic[]; /** @deprecated Use getEncodedSyntacticClassifications instead. */ - getSyntacticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.TwentyTwenty): ClassifiedSpan2020[]; - getSyntacticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.Original): ClassifiedSpan[]; - getSyntacticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; + getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[]; + getSyntacticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; /** @deprecated Use getEncodedSemanticClassifications instead. */ - getSemanticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.TwentyTwenty): ClassifiedSpan2020[]; - getSemanticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat.Original): ClassifiedSpan[]; - getSemanticClassifications(fileName: string, span: TextSpan, format?: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; + getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[]; + getSemanticClassifications(fileName: string, span: TextSpan, format: SemanticClassificationFormat): ClassifiedSpan[] | ClassifiedSpan2020[]; /** Encoded as triples of [start, length, ClassificationType]. */ getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications;