in src/arduino/intellisense.ts [256:302]
private async update(event: AnalysisEvent) {
switch (this._state) {
case AnalysisState.Idle:
if (event === AnalysisEvent.AnalysisRequest) {
this._state = AnalysisState.Waiting;
this.startWaitTimeout();
}
break;
case AnalysisState.Waiting:
if (event === AnalysisEvent.AnalysisRequest) {
// every new request restarts timer
this.startWaitTimeout();
} else if (event === AnalysisEvent.WaitTimeout) {
if (this._isBuilding()) {
// another build in progress, continue waiting
this.startWaitTimeout();
} else {
// no other build in progress -> launch analysis
this._state = AnalysisState.Analyzing;
await this.startAnalysis();
}
}
break;
case AnalysisState.Analyzing:
if (event === AnalysisEvent.AnalysisBuildDone) {
this._state = AnalysisState.Idle;
} else if (event === AnalysisEvent.AnalysisRequest) {
this._state = AnalysisState.AnalyzingWaiting;
}
break;
case AnalysisState.AnalyzingWaiting:
if (event === AnalysisEvent.AnalysisBuildDone) {
// emulate the transition from idle to waiting
// (we don't care if this adds an additional
// timeout - event driven analysis is not time-
// critical)
this._state = AnalysisState.Idle;
await this.update(AnalysisEvent.AnalysisRequest);
}
break;
}
}