neoclide/coc.nvim · error · Error
Document symbol provider not found
Error message
Document symbol provider not found
What it means
Thrown when the outline provider finds the buffer attached but no language server currently registered for the DocumentSymbol provider for that document. The LSP server is absent, still initializing, or doesn't support documentSymbol.
Source
Thrown at src/handler/symbols/outline.ts:187
}
return symbols.map(s => this.convertSymbolToNode(s, sortFn)).sort(sortFn)
}
public onSymbolsUpdate(bufnr: number, symbols: DocumentSymbol[]): void {
let provider = this.providersMap.get(bufnr)
if (provider) provider.update(this.convertSymbols(bufnr, symbols))
}
private createProvider(bufnr: number): BasicDataProvider<OutlineNode> {
let { nvim } = this
let provider = new BasicDataProvider({
expandLevel: this.config.expandLevel,
provideData: async () => {
let buf = this.buffers.getItem(bufnr)
if (!buf) throw new Error('Document not attached')
let doc = workspace.getDocument(bufnr)
if (!languages.hasProvider(ProviderName.DocumentSymbol, doc.textDocument)) {
throw new Error('Document symbol provider not found')
}
let meta = languages.getDocumentSymbolMetadata(doc.textDocument)
if (meta && meta.label) {
let views = this.treeViewList.filter(v => v.valid && v.targetBufnr == bufnr)
views.forEach(view => view.description = meta.label)
}
this.setMessage(bufnr, 'Loading document symbols')
let arr = await buf.getSymbols()
if (!arr || arr.length == 0) {
// server may return empty symbols on buffer initialize, throw error to force reload.
throw new Error('Empty symbols returned from language server. ')
}
this.setMessage(bufnr, undefined)
return this.convertSymbols(bufnr, arr)
},
handleClick: async item => {
let winnr = await nvim.call('bufwinnr', [bufnr])
if (winnr == -1) returnView on GitHub (pinned to 50e974d969)
Solutions
- Wait for the language server to attach, then reopen the outline; check status with :CocCommand workspace.showOutput.
- Verify the server supports documentSymbol; install/enable the right coc extension (e.g. coc-tsserver, coc-pyright) for the filetype.
- Fix server launch config in coc-settings.json (wrong command/path is the usual cause).
- Run :CocRestart and retry; if the server supports it, the provider registers on didOpen.
- Refresh the outline again — the provider reload logic intentionally re-fetches after errors.
Example fix
// before (settings missing server)
"coc.sourceConfig": {}
// after (ensure a server for the filetype)
{
"languageserver.go": {
"command": "gopls",
"filetypes": ["go"]
}
} Defensive patterns
Strategy: validation
Validate before calling
// check a server with documentSymbol is attached before opening outline
let supported = CocHasProvider('documentSymbol')
if !supported
echom 'No documentSymbol provider for this filetype'
else
CocOutline
endif Try / catch
try {
await outline.show(bufnr)
} catch (e) {
if (String(e).includes('provider not found')) {
// wait for attach or notify user to install a server for this filetype
}
} Prevention
- Verify with :CocHasProvider('documentSymbol') before using outline.
- Install the coc extension or configure languageserver entries for every filetype you outline.
- Wait for server initialization (status bar shows attached) before opening the outline.
- Check :CocInfo / workspace.showOutput when servers fail to register.
When it happens
Trigger: :CocOutline invoked in a buffer whose language server hasn't finished startup (hasProvider returns false during initialization), or in a filetype with no language server configured, or after the server crashed/was stopped so the provider registration was dropped.
Common situations: Opening the outline immediately after opening a large project (server still starting); missing or broken coc extension for the filetype; server failed to launch (bad command in coc-settings.json); server does not implement textDocument/documentSymbol (e.g. some linters-only servers).
Related errors
- Document not attached
- Empty symbols returned from language server.
- Inlay hint provider not found for current document
- Filetype "${this.doc.filetype}" not enabled by inlayHint con
- Failed to resolve link target
AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31).
Data as JSON: /api/errors/dab0da33c778a525.
Report an issue: GitHub.