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
- Install/configure a language server for the buffer's filetype (e.g. via :CocConfig languageserver entry)
- Verify the server supports the feature (capabilities) and update it if not
- 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
- Configure languageserver entries for all edited filetypes
- Check server capabilities before advertising features
- Verify filetype detection matches languageserver filetypes list
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
- Format provider not found for buffer: ${doc.bufnr}
- ${uri} changed before apply edit
- Unable to getCallHierarchyItem at current position
- Action "${action.title}" is disabled: ${action.disabled.reas
- Inlay hint provider not found for current document
AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31).
Data as JSON: /api/errors/1633fc0396652b43.
Report an issue: GitHub.