Skip to content

Commit ce6c04e

Browse files
committed
Merge branch 'master' into inferToUnionTypes
2 parents 1c9fe44 + 32b44ac commit ce6c04e

20 files changed

+761
-872
lines changed

src/compiler/checker.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12693,10 +12693,11 @@ namespace ts {
1269312693
else if (source.flags & TypeFlags.Conditional) {
1269412694
if (target.flags & TypeFlags.Conditional) {
1269512695
// Two conditional types 'T1 extends U1 ? X1 : Y1' and 'T2 extends U2 ? X2 : Y2' are related if
12696-
// one of T1 and T2 is related to the other, U1 and U2 are identical types, X1 is related to X2,
12697-
// and Y1 is related to Y2.
12698-
if (isTypeIdenticalTo((<ConditionalType>source).extendsType, (<ConditionalType>target).extendsType) &&
12699-
(isRelatedTo((<ConditionalType>source).checkType, (<ConditionalType>target).checkType) || isRelatedTo((<ConditionalType>target).checkType, (<ConditionalType>source).checkType))) {
12696+
// they have the same distributivity, T1 and T2 are identical types, U1 and U2 are identical
12697+
// types, X1 is related to X2, and Y1 is related to Y2.
12698+
if ((<ConditionalType>source).root.isDistributive === (<ConditionalType>target).root.isDistributive &&
12699+
isTypeIdenticalTo((<ConditionalType>source).extendsType, (<ConditionalType>target).extendsType) &&
12700+
isTypeIdenticalTo((<ConditionalType>source).checkType, (<ConditionalType>target).checkType)) {
1270012701
if (result = isRelatedTo(getTrueTypeFromConditionalType(<ConditionalType>source), getTrueTypeFromConditionalType(<ConditionalType>target), reportErrors)) {
1270112702
result &= isRelatedTo(getFalseTypeFromConditionalType(<ConditionalType>source), getFalseTypeFromConditionalType(<ConditionalType>target), reportErrors);
1270212703
}
@@ -21539,32 +21540,31 @@ namespace ts {
2153921540
}
2154021541
if (signature.hasRestParameter) {
2154121542
const restType = getTypeOfSymbol(signature.parameters[paramCount]);
21542-
if (isTupleType(restType)) {
21543-
if (pos - paramCount < getLengthOfTupleType(restType)) {
21544-
return restType.typeArguments![pos - paramCount];
21545-
}
21546-
return getRestTypeOfTupleType(restType);
21547-
}
21548-
return getIndexTypeOfType(restType, IndexKind.Number);
21543+
const indexType = getLiteralType(pos - paramCount);
21544+
return getIndexedAccessType(restType, indexType);
2154921545
}
2155021546
return undefined;
2155121547
}
2155221548

2155321549
function getRestTypeAtPosition(source: Signature, pos: number): Type {
2155421550
const paramCount = getParameterCount(source);
2155521551
const restType = getEffectiveRestType(source);
21556-
if (restType && pos === paramCount - 1) {
21552+
const nonRestCount = paramCount - (restType ? 1 : 0);
21553+
if (restType && pos === nonRestCount) {
2155721554
return restType;
2155821555
}
21559-
const start = restType ? Math.min(pos, paramCount - 1) : pos;
2156021556
const types = [];
2156121557
const names = [];
21562-
for (let i = start; i < paramCount; i++) {
21558+
for (let i = pos; i < nonRestCount; i++) {
2156321559
types.push(getTypeAtPosition(source, i));
2156421560
names.push(getParameterNameAtPosition(source, i));
2156521561
}
21562+
if (restType) {
21563+
types.push(getIndexedAccessType(restType, numberType));
21564+
names.push(getParameterNameAtPosition(source, nonRestCount));
21565+
}
2156621566
const minArgumentCount = getMinArgumentCount(source);
21567-
const minLength = minArgumentCount < start ? 0 : minArgumentCount - start;
21567+
const minLength = minArgumentCount < pos ? 0 : minArgumentCount - pos;
2156821568
return createTupleType(types, minLength, !!restType, /*readonly*/ false, names);
2156921569
}
2157021570

src/server/editorServices.ts

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ namespace ts.server {
77
export const ProjectsUpdatedInBackgroundEvent = "projectsUpdatedInBackground";
88
export const ProjectLoadingStartEvent = "projectLoadingStart";
99
export const ProjectLoadingFinishEvent = "projectLoadingFinish";
10-
export const SurveyReady = "surveyReady";
1110
export const LargeFileReferencedEvent = "largeFileReferenced";
1211
export const ConfigFileDiagEvent = "configFileDiag";
1312
export const ProjectLanguageServiceStateEvent = "projectLanguageServiceState";
@@ -30,11 +29,6 @@ namespace ts.server {
3029
data: { project: Project; };
3130
}
3231

33-
export interface SurveyReady {
34-
eventName: typeof SurveyReady;
35-
data: { surveyId: string; };
36-
}
37-
3832
export interface LargeFileReferencedEvent {
3933
eventName: typeof LargeFileReferencedEvent;
4034
data: { file: string; fileSize: number; maxFileSize: number; };
@@ -146,7 +140,6 @@ namespace ts.server {
146140
}
147141

148142
export type ProjectServiceEvent = LargeFileReferencedEvent |
149-
SurveyReady |
150143
ProjectsUpdatedInBackgroundEvent |
151144
ProjectLoadingStartEvent |
152145
ProjectLoadingFinishEvent |
@@ -518,9 +511,6 @@ namespace ts.server {
518511
/** Tracks projects that we have already sent telemetry for. */
519512
private readonly seenProjects = createMap<true>();
520513

521-
/** Tracks projects that we have already sent survey events for. */
522-
private readonly seenSurveyProjects = createMap<true>();
523-
524514
/*@internal*/
525515
readonly watchFactory: WatchFactory<WatchType, Project>;
526516

@@ -722,14 +712,6 @@ namespace ts.server {
722712
this.eventHandler(event);
723713
}
724714

725-
/* @internal */
726-
sendSurveyReadyEvent(surveyId: string) {
727-
if (!this.eventHandler) {
728-
return;
729-
}
730-
this.eventHandler({ eventName: SurveyReady, data: { surveyId } });
731-
}
732-
733715
/* @internal */
734716
sendLargeFileReferencedEvent(file: string, fileSize: number) {
735717
if (!this.eventHandler) {
@@ -1611,20 +1593,6 @@ namespace ts.server {
16111593
return project;
16121594
}
16131595

1614-
/*@internal*/
1615-
sendSurveyReady(project: ExternalProject | ConfiguredProject): void {
1616-
if (this.seenSurveyProjects.has(project.projectName)) {
1617-
return;
1618-
}
1619-
1620-
if (project.getCompilerOptions().checkJs !== undefined) {
1621-
const name = "checkJs";
1622-
this.logger.info(`Survey ${name} is ready`);
1623-
this.sendSurveyReadyEvent(name);
1624-
this.seenSurveyProjects.set(project.projectName, true);
1625-
}
1626-
}
1627-
16281596
/*@internal*/
16291597
sendProjectTelemetry(project: ExternalProject | ConfiguredProject): void {
16301598
if (this.seenProjects.has(project.projectName)) {

src/server/project.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,7 +1431,6 @@ namespace ts.server {
14311431
}
14321432
this.projectService.sendProjectLoadingFinishEvent(this);
14331433
this.projectService.sendProjectTelemetry(this);
1434-
this.projectService.sendSurveyReady(this);
14351434
return result;
14361435
}
14371436

@@ -1627,7 +1626,6 @@ namespace ts.server {
16271626
updateGraph() {
16281627
const result = super.updateGraph();
16291628
this.projectService.sendProjectTelemetry(this);
1630-
this.projectService.sendSurveyReady(this);
16311629
return result;
16321630
}
16331631

src/server/session.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -610,10 +610,6 @@ namespace ts.server {
610610
diagnostics: bakedDiags
611611
}, ConfigFileDiagEvent);
612612
break;
613-
case SurveyReady:
614-
const { surveyId } = event.data;
615-
this.event<protocol.SurveyReadyEventBody>({ surveyId }, SurveyReady);
616-
break;
617613
case ProjectLanguageServiceStateEvent: {
618614
const eventName: protocol.ProjectLanguageServiceStateEventName = ProjectLanguageServiceStateEvent;
619615
this.event<protocol.ProjectLanguageServiceStateEventBody>({

src/testRunner/tsconfig.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@
109109
"unittests/tsserver/events/projectLanguageServiceState.ts",
110110
"unittests/tsserver/events/projectLoading.ts",
111111
"unittests/tsserver/events/projectUpdatedInBackground.ts",
112-
"unittests/tsserver/events/surveyReady.ts",
113112
"unittests/tsserver/externalProjects.ts",
114113
"unittests/tsserver/forceConsistentCasingInFileNames.ts",
115114
"unittests/tsserver/formatSettings.ts",

src/testRunner/unittests/tsserver/events/surveyReady.ts

Lines changed: 0 additions & 111 deletions
This file was deleted.

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8357,7 +8357,6 @@ declare namespace ts.server {
83578357
const ProjectsUpdatedInBackgroundEvent = "projectsUpdatedInBackground";
83588358
const ProjectLoadingStartEvent = "projectLoadingStart";
83598359
const ProjectLoadingFinishEvent = "projectLoadingFinish";
8360-
const SurveyReady = "surveyReady";
83618360
const LargeFileReferencedEvent = "largeFileReferenced";
83628361
const ConfigFileDiagEvent = "configFileDiag";
83638362
const ProjectLanguageServiceStateEvent = "projectLanguageServiceState";
@@ -8382,12 +8381,6 @@ declare namespace ts.server {
83828381
project: Project;
83838382
};
83848383
}
8385-
interface SurveyReady {
8386-
eventName: typeof SurveyReady;
8387-
data: {
8388-
surveyId: string;
8389-
};
8390-
}
83918384
interface LargeFileReferencedEvent {
83928385
eventName: typeof LargeFileReferencedEvent;
83938386
data: {
@@ -8472,7 +8465,7 @@ declare namespace ts.server {
84728465
interface OpenFileInfo {
84738466
readonly checkJs: boolean;
84748467
}
8475-
type ProjectServiceEvent = LargeFileReferencedEvent | SurveyReady | ProjectsUpdatedInBackgroundEvent | ProjectLoadingStartEvent | ProjectLoadingFinishEvent | ConfigFileDiagEvent | ProjectLanguageServiceStateEvent | ProjectInfoTelemetryEvent | OpenFileInfoTelemetryEvent;
8468+
type ProjectServiceEvent = LargeFileReferencedEvent | ProjectsUpdatedInBackgroundEvent | ProjectLoadingStartEvent | ProjectLoadingFinishEvent | ConfigFileDiagEvent | ProjectLanguageServiceStateEvent | ProjectInfoTelemetryEvent | OpenFileInfoTelemetryEvent;
84768469
type ProjectServiceEventHandler = (event: ProjectServiceEvent) => void;
84778470
interface SafeList {
84788471
[name: string]: {
@@ -8589,8 +8582,6 @@ declare namespace ts.server {
85898582
readonly syntaxOnly?: boolean;
85908583
/** Tracks projects that we have already sent telemetry for. */
85918584
private readonly seenProjects;
8592-
/** Tracks projects that we have already sent survey events for. */
8593-
private readonly seenSurveyProjects;
85948585
constructor(opts: ProjectServiceOptions);
85958586
toPath(fileName: string): Path;
85968587
private loadTypesMap;

0 commit comments

Comments
 (0)