For language servers that reply to the textDocument/documentSymbol request with instances of DocumentSymbol rather than SymbolInformation, eglot's imenu builder omits symbols containing other symbols. This applies to eglot 1.17 from ELPA as well as the version in Emacs master as of today. You can use clangd to reproduce the problem: 1. Put this code in a C++ source file, e.g., test.cpp: class Foo { void bar() {} }; 2. Start eglot with clangd. 3. Invoke imenu; there will be a single entry "bar", nested under "Foo". In particular, there is no entry that lets you jump to Foo. This is inconsistent with how eglot handles language servers that return SymbolInformation (e.g., pylsp), and I would argue that it's not what users expect. The attached patch fixes the behavior by inserting a dedicated entry for each symbol in addition to entries for its children.