Files
vscode/extensions/typescript-language-features/src
69e459e483 fix: signature help's active overload not updating (#320980)
* fix: signature help active overload not updating

- Active overload now updates when typed arguments narrow the overload set

* fix: replace findIndex with direct index lookup in getActiveSignature

- Instead of searching signatures by label to get an index and comparing
  it to info.selectedItemIndex, look up signatures[info.selectedItemIndex]
  directly so both sides of the comparison use the same index source

* test: add unit tests for #268728 overload fix

- Extract getActiveSignature as an exported function so unit
  tests can import it without the extension host
- Add BEFORE suite documenting the original bug: on retrigger,
  old code returned the stale overload index even after
  TypeScript updated selectedItemIndex (e.g. after a string
  argument narrows the overload set on the comma trigger)
- Add AFTER suite verifying the fix: retrigger now honours
  TypeScript's updated selectedItemIndex; the BUG test case
  that returned 0 now correctly returns 1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: address Copilot review on #268728

- Rename exported helper to computeActiveSignatureIndex to
  avoid identifier collision with the private method
- Stop returning activeSignatureHelp.activeSignature: that
  index refers to the previous signature list, which is stale
  if the list reorders between invocations; always use
  tsSelectedItemIndex instead
- Add regression test for the reordering case: verifies that
  when the list reorders and TS still selects the same overload
  by label, the current index is returned, not the stale one

* fix: address Copilot review on #268728

- Simplify computeActiveSignatureIndex to only accept
  tsSelectedItemIndex; the context and signatures params
  were unused and made the API misleading
- Add @internal JSDoc to signal the
  computeActiveSignatureIndex export is for unit
  testing only, not public API
- Replace assertion-based BEFORE suite with block comment
  documenting the original bug; asserting known-wrong
  behaviour institutionalizes incorrect expectations

* fix: simplify active overload selection

- Replace the label-matching retrigger guard with result.activeSignature = info.selectedItemIndex;
  the guard became a no-op after the existingIndex === selectedItemIndex fix and its removal is the correct minimal change
- Export TypeScriptSignatureHelpProvider as _TypeScriptSignatureHelpProvider
  (VS Code underscore-prefix convention for test-only exports)
- Add unit tests via mock ITypeScriptServiceClient: documents the old buggy guard behavior
  and verifies the fix — the FIX test would fail if the label-matching guard were reintroduced

* fix: address Copilot unit test review comments

- Move CancellationTokenSource into setup/teardown so it is properly disposed after each test
- Add success: true and message: '' to mock response to match the protocol shape
- Add @internal test-only export JSDoc to _TypeScriptSignatureHelpProvider to make the export intent explicit

* Fix signature help overload selection

Track TypeScript-selected and user-selected overloads separately so retriggers follow updated recommendations without resetting manual selections.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Dmitriy Vasyura <dmitriv@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-29 15:55:32 +00:00
..
2026-05-19 15:38:59 -07:00