Skip to content

Perf: Debounce script updateProjectOptions (fires on every caret move) #20124

Description

@xperiandri

Description

In FSharpProjectOptionsManager.fs, onChangeCaretHandler calls updateProjectOptions on every caret position change. This in turn calls checker.NotifyFileChanged(document.FilePath, scriptProjectOptions) |> Async.Start, asking FCS to re-evaluate script options, potentially triggering a new parse and #r/#load resolution on every keystroke/caret move.

Call chain

User moves caret → IVsTextViewEvents.OnChangeCaretLineonChangeCaretHandlerupdateProjectOptionsAsync.Start(checker.NotifyFileChanged(...)) → FCS script options resolution.

Fix

Debounce updateProjectOptions: use a CancellationTokenSource that is swapped/cancelled on each call and only actually notifies after a 500ms idle period, implemented as a cancellableTask using Task.Delay(500, ct).

Priority

P2 (medium-term)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status
    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions