denoland/deno · error

Unable to convert signature help items: {:#}

Error message

Unable to convert signature help items: {:#}

What it means

Signature help (parameter hints inside call parentheses) converts tsc's SignatureHelpItems through into_signature_help; this wraps a conversion failure. It is typically a span/range mapping failure for the active parameter or the call span against the module's current line index — commonly triggered when the document changes while typing a call.

Source

Thrown at cli/lsp/ts_server.rs:1125

            trigger_reason: None,
          }
        };
        let signature_help = ts_server
          .get_signature_help_items(
            snapshot.clone(),
            module,
            module.line_index.offset_tsc(position)?,
            options,
            token,
          )
          .await?;
        signature_help
          .map(|signature_help| {
            signature_help.into_signature_help(module, &snapshot, token)
          })
          .transpose()
          .map_err(|err| {
            anyhow!("Unable to convert signature help items: {:#}", err)
          })
      }
    }
  }

  pub async fn provide_will_rename_files(
    &self,
    file_renames: &[lsp::FileRename],
    language_server: &language_server::Inner,
    snapshot: Arc<StateSnapshot>,
    token: &CancellationToken,
  ) -> Result<Option<lsp::WorkspaceEdit>, AnyError> {
    match self {
      Self::Js(ts_server) => {
        let mut changes_with_modules = IndexMap::new();
        for rename in file_renames {
          let Some(document) = snapshot
            .document_modules

View on GitHub (pinned to 9ad36f7a2c)

Solutions

  1. Keep typing or re-trigger hint display — the next request usually succeeds after positions resync.
  2. Save the file if parameter hints stay broken for a call site.
  3. Run "Deno: Restart Language Server" and update Deno if it persists.
Defensive patterns

Strategy: fallback

Try / catch

// Signature help is optional UI: on conversion failure show nothing
// rather than erroring the request.
async function signatureHelpSafe(client, params) {
  try {
    return await client.sendRequest('textDocument/signatureHelp', params);
  } catch (err) {
    if (String(err?.message).includes('signature help items')) {
      return null; // hints re-appear on the next keystroke's request
    }
    throw err;
  }
}

Prevention

When it happens

Trigger: A textDocument/signatureHelp request while typing a call where converting the returned items fails — stale document positions from rapid keystrokes, or an unexpected item shape from the embedded tsc version.

Common situations: Fast typing inside function calls with parameter hints enabled; intermittent failures that vanish on the next keystroke's request.

Related errors


AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20). Data as JSON: /api/errors/68384ddadd02af2b. Report an issue: GitHub.