Files
vscode/extensions/typescript-language-features
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
..

Language Features for TypeScript and JavaScript files

Notice: This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.

Features

See TypeScript in Visual Studio Code and JavaScript in Visual Studio Code to learn about the features of this extension.