{"record":{"id":"dab0da33c778a525","repo":"neoclide/coc.nvim","slug":"document-symbol-provider-not-found","errorCode":null,"errorMessage":"Document symbol provider not found","messagePattern":"Document symbol provider not found","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/handler/symbols/outline.ts","lineNumber":187,"sourceCode":"    }\n    return symbols.map(s => this.convertSymbolToNode(s, sortFn)).sort(sortFn)\n  }\n\n  public onSymbolsUpdate(bufnr: number, symbols: DocumentSymbol[]): void {\n    let provider = this.providersMap.get(bufnr)\n    if (provider) provider.update(this.convertSymbols(bufnr, symbols))\n  }\n\n  private createProvider(bufnr: number): BasicDataProvider<OutlineNode> {\n    let { nvim } = this\n    let provider = new BasicDataProvider({\n      expandLevel: this.config.expandLevel,\n      provideData: async () => {\n        let buf = this.buffers.getItem(bufnr)\n        if (!buf) throw new Error('Document not attached')\n        let doc = workspace.getDocument(bufnr)\n        if (!languages.hasProvider(ProviderName.DocumentSymbol, doc.textDocument)) {\n          throw new Error('Document symbol provider not found')\n        }\n        let meta = languages.getDocumentSymbolMetadata(doc.textDocument)\n        if (meta && meta.label) {\n          let views = this.treeViewList.filter(v => v.valid && v.targetBufnr == bufnr)\n          views.forEach(view => view.description = meta.label)\n        }\n        this.setMessage(bufnr, 'Loading document symbols')\n        let arr = await buf.getSymbols()\n        if (!arr || arr.length == 0) {\n          // server may return empty symbols on buffer initialize, throw error to force reload.\n          throw new Error('Empty symbols returned from language server. ')\n        }\n        this.setMessage(bufnr, undefined)\n        return this.convertSymbols(bufnr, arr)\n      },\n      handleClick: async item => {\n        let winnr = await nvim.call('bufwinnr', [bufnr])\n        if (winnr == -1) return","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/neoclide/coc.nvim/blob/50e974d9692461a69147d5cab146a8d3e439abe4/src/handler/symbols/outline.ts#L169-L205","documentation":"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.","triggerScenarios":":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.","commonSituations":"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).","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."],"exampleFix":"// before (settings missing server)\n\"coc.sourceConfig\": {}\n\n// after (ensure a server for the filetype)\n{\n  \"languageserver.go\": {\n    \"command\": \"gopls\",\n    \"filetypes\": [\"go\"]\n  }\n}","handlingStrategy":"validation","validationCode":"// check a server with documentSymbol is attached before opening outline\nlet supported = CocHasProvider('documentSymbol')\nif !supported\n  echom 'No documentSymbol provider for this filetype'\nelse\n  CocOutline\nendif","typeGuard":null,"tryCatchPattern":"try {\n  await outline.show(bufnr)\n} catch (e) {\n  if (String(e).includes('provider not found')) {\n    // wait for attach or notify user to install a server for this filetype\n  }\n}","preventionTips":["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."],"tags":["outline","document-symbol","lsp-provider","coc-nvim"],"backgroundTag":"lsp-provider-not-found","analyzedSha":"50e974d9692461a69147d5cab146a8d3e439abe4","analyzedAt":"2026-08-31T11:17:23.966Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}