private async update()

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;
        }
    }