Fix a race condition in IDE diagnostic service for stale diagnostics #60365
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes AB#1487574
If you edit a document, which either fixes or introduces compiler diagnostics in another open document, but you do a tab switch to that open document before diagnostic computation kicked off by prior edit finishes, than we end up cancelling existing tasks queued for diagnostic computation from that prior edit. We kick off new tasks for diagnostic computation for the new active document, but the newly active document did not have any code change, so has identical text and semantic version and we end up skipping diagnostics computation for it, leaving behind stale diagnostics OR not showing new diagnostics that were introduced from the edit in prior active document.
Fix is to always recompute the active document diagnostics on switching active documents and avoid any possible race conditions
Before fix - stale diagnostics
After fix - up-to-date diagnostics