mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-19 20:37:00 -05:00
Simplify event sent on background project update since its anyways just to update the error list
This commit is contained in:
@@ -9,14 +9,14 @@
|
||||
namespace ts.server {
|
||||
export const maxProgramSizeForNonTsFiles = 20 * 1024 * 1024;
|
||||
|
||||
export const ProjectChangedEvent = "projectChanged";
|
||||
export const ProjectsUpdatedInBackgroundEvent = "projectsUpdatedInBackground";
|
||||
export const ConfigFileDiagEvent = "configFileDiag";
|
||||
export const ProjectLanguageServiceStateEvent = "projectLanguageServiceState";
|
||||
export const ProjectInfoTelemetryEvent = "projectInfo";
|
||||
|
||||
export interface ProjectChangedEvent {
|
||||
eventName: typeof ProjectChangedEvent;
|
||||
data: { project: Project; filesToEmit: string[]; changedFiles: string[] };
|
||||
export interface ProjectsUpdatedInBackgroundEvent {
|
||||
eventName: typeof ProjectsUpdatedInBackgroundEvent;
|
||||
data: { openFiles: string[]; };
|
||||
}
|
||||
|
||||
export interface ConfigFileDiagEvent {
|
||||
@@ -76,7 +76,7 @@ namespace ts.server {
|
||||
readonly dts: number;
|
||||
}
|
||||
|
||||
export type ProjectServiceEvent = ProjectChangedEvent | ConfigFileDiagEvent | ProjectLanguageServiceStateEvent | ProjectInfoTelemetryEvent;
|
||||
export type ProjectServiceEvent = ProjectsUpdatedInBackgroundEvent | ConfigFileDiagEvent | ProjectLanguageServiceStateEvent | ProjectInfoTelemetryEvent;
|
||||
|
||||
export interface ProjectServiceEventHandler {
|
||||
(event: ProjectServiceEvent): void;
|
||||
@@ -517,9 +517,14 @@ namespace ts.server {
|
||||
if (this.pendingProjectUpdates.size !== 0) {
|
||||
this.delayInferredProjectsRefresh();
|
||||
}
|
||||
else if (this.pendingInferredProjectUpdate) {
|
||||
this.pendingInferredProjectUpdate = false;
|
||||
this.refreshInferredProjects();
|
||||
else {
|
||||
if (this.pendingInferredProjectUpdate) {
|
||||
this.pendingInferredProjectUpdate = false;
|
||||
this.refreshInferredProjects();
|
||||
}
|
||||
// Send the event to notify that there were background project updates
|
||||
// send current list of open files
|
||||
this.sendProjectsUpdatedInBackgroundEvent();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -531,27 +536,18 @@ namespace ts.server {
|
||||
if (this.pendingProjectUpdates.delete(projectName)) {
|
||||
project.updateGraph();
|
||||
}
|
||||
// Send the update event to notify about the project changes
|
||||
this.sendProjectChangedEvent(project);
|
||||
});
|
||||
}
|
||||
|
||||
private sendProjectChangedEvent(project: Project) {
|
||||
if (project.isClosed() || !this.eventHandler || !project.languageServiceEnabled) {
|
||||
private sendProjectsUpdatedInBackgroundEvent() {
|
||||
if (!this.eventHandler) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { filesToEmit, changedFiles } = project.getChangedFiles();
|
||||
if (changedFiles.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const event: ProjectChangedEvent = {
|
||||
eventName: ProjectChangedEvent,
|
||||
const event: ProjectsUpdatedInBackgroundEvent = {
|
||||
eventName: ProjectsUpdatedInBackgroundEvent,
|
||||
data: {
|
||||
project,
|
||||
filesToEmit: filesToEmit as string[],
|
||||
changedFiles: changedFiles as string[]
|
||||
openFiles: this.openFiles.map(f => f.fileName)
|
||||
}
|
||||
};
|
||||
this.eventHandler(event);
|
||||
|
||||
@@ -457,12 +457,6 @@ namespace ts.server {
|
||||
return !emitSkipped;
|
||||
}
|
||||
|
||||
getChangedFiles() {
|
||||
Debug.assert(this.languageServiceEnabled);
|
||||
this.ensureBuilder();
|
||||
return this.builder.getChangedProgramFiles(this.program);
|
||||
}
|
||||
|
||||
enableLanguageService() {
|
||||
if (this.languageServiceEnabled) {
|
||||
return;
|
||||
|
||||
@@ -2040,27 +2040,17 @@ namespace ts.server.protocol {
|
||||
languageServiceEnabled: boolean;
|
||||
}
|
||||
|
||||
export type ProjectChangedEventName = "projectChanged";
|
||||
export interface ProjectStructureChangedEvent extends Event {
|
||||
event: ProjectChangedEventName;
|
||||
body: ProjectChangedEventBody;
|
||||
export type ProjectsUpdatedInBackgroundEventName = "projectsUpdatedInBackground";
|
||||
export interface ProjectsUpdatedInBackgroundEvent extends Event {
|
||||
event: ProjectsUpdatedInBackgroundEventName;
|
||||
body: ProjectsUpdatedInBackgroundEventBody;
|
||||
}
|
||||
|
||||
export interface ProjectChangedEventBody {
|
||||
export interface ProjectsUpdatedInBackgroundEventBody {
|
||||
/**
|
||||
* Project name that has changes
|
||||
* Current set of open files
|
||||
*/
|
||||
projectName: string;
|
||||
|
||||
/**
|
||||
* Minimum set of file names to emit
|
||||
*/
|
||||
fileNamesToEmit: string[];
|
||||
|
||||
/**
|
||||
* List of files that have changed/added/removed or could have been affected by the changed files
|
||||
*/
|
||||
changedFiles: string[];
|
||||
openFiles: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -332,9 +332,9 @@ namespace ts.server {
|
||||
|
||||
private defaultEventHandler(event: ProjectServiceEvent) {
|
||||
switch (event.eventName) {
|
||||
case ProjectChangedEvent:
|
||||
const { project, filesToEmit, changedFiles } = event.data;
|
||||
this.projectChangedEvent(project, filesToEmit, changedFiles);
|
||||
case ProjectsUpdatedInBackgroundEvent:
|
||||
const { openFiles } = event.data;
|
||||
this.projectsUpdatedInBackgroundEvent(openFiles);
|
||||
break;
|
||||
case ConfigFileDiagEvent:
|
||||
const { triggerFile, configFileName: configFile, diagnostics } = event.data;
|
||||
@@ -364,21 +364,19 @@ namespace ts.server {
|
||||
}
|
||||
}
|
||||
|
||||
private projectChangedEvent(project: Project, fileNamesToEmit: string[], changedFiles: string[]): void {
|
||||
this.projectService.logger.info(`got project changed event, updating diagnostics for ${changedFiles}`);
|
||||
if (changedFiles.length) {
|
||||
const checkList = this.createCheckList(changedFiles, project);
|
||||
private projectsUpdatedInBackgroundEvent(openFiles: string[]): void {
|
||||
this.projectService.logger.info(`got projects updated in background, updating diagnostics for ${openFiles}`);
|
||||
if (openFiles.length) {
|
||||
const checkList = this.createCheckList(openFiles);
|
||||
|
||||
// For now only queue error checking for open files. We can change this to include non open files as well
|
||||
this.errorCheck.startNew(next => this.updateErrorCheck(next, checkList, 100, /*requireOpen*/ true));
|
||||
|
||||
|
||||
// Send project changed event
|
||||
this.event<protocol.ProjectChangedEventBody>({
|
||||
projectName: project.getProjectName(),
|
||||
changedFiles,
|
||||
fileNamesToEmit
|
||||
}, "projectChanged");
|
||||
this.event<protocol.ProjectsUpdatedInBackgroundEventBody>({
|
||||
openFiles
|
||||
}, "projectsUpdatedInBackground");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user