neoclide/coc.nvim · error · Error

${id} provider not found for current buffer, your language s

Error message

${id} provider not found for current buffer, your language server doesn't support it.

What it means

checkProvider throws this when the requested LSP feature (hover, definition, etc.) has no registered provider for the current buffer's document. It's a guard so callers get a clear message instead of a silent no-op.

Source

Thrown at src/handler/index.ts:237

    let doc = workspace.getAttachedDocument(bufnr)
    return {
      doc,
      mode,
      position: Position.create(line, character),
      winid
    }
  }

  public addDisposable(disposable: Disposable): void {
    this.disposables.push(disposable)
  }

  /**
   * Throw error when provider doesn't exist.
   */
  public checkProvider(id: ProviderName, document: TextDocumentMatch): void {
    if (!languages.hasProvider(id, document)) {
      throw new Error(`${id} provider not found for current buffer, your language server doesn't support it.`)
    }
  }

  public async withRequestToken<T>(name: string, fn: (token: CancellationToken) => Thenable<T>, checkEmpty?: boolean): Promise<T | null> {
    if (this.requestTokenSource) {
      this.requestTokenSource.cancel()
      this.requestTokenSource.dispose()
    }
    clearTimeout(this.requestTimer)
    let statusItem = this.requestStatusItem
    let tokenSource = new CancellationTokenSource()
    this.requestTokenSource = tokenSource
    let { token } = tokenSource
    token.onCancellationRequested(() => {
      statusItem.text = `${name} request canceled`
      statusItem.isProgress = false
      this.requestTimer = setTimeout(() => {
        statusItem.hide()

View on GitHub (pinned to 50e974d969)

Solutions

  1. Install/configure a language server for the buffer's filetype (e.g. via :CocConfig languageserver entry)
  2. Verify the server supports the feature (capabilities) and update it if not
  3. Check the filetype is correctly detected (:set ft?) and matches the languageserver configuration

Example fix

// before
// .txt buffer, calling CocAction hover
// after (coc-settings.json)
{ "languageserver": { "txt": { "command": "ltex-ls", "filetypes": ["text"] } } }
Defensive patterns

Strategy: try-catch

Validate before calling

// ensure a language server is attached for the filetype before feature calls
const attached = await nvim.call('coc#util#has_provider', [feature]); // or check languageserver config covers current ft

Try / catch

try {
  await handler.checkProvider('definition', document);
} catch (e) {
  if (String(e.message).includes('provider not found for current buffer')) {
    console.warn(`Feature unavailable: install/configure a language server for &ft=${document.filetype}`);
    return;
  }
  throw e;
}

Prevention

When it happens

Trigger: Any handler method that first calls checkProvider(id, document) — hover, definition, references, rename, etc. — executed in a buffer whose filetype/language server does not declare that capability.

Common situations: Invoking CocAction on a filetype with no attached language server; server attached but lacking the specific capability (e.g. no renameProvider); misconfigured languageserver filetype in coc-settings.json.

Related errors


AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31). Data as JSON: /api/errors/1633fc0396652b43. Report an issue: GitHub.