A Neovim plugin that displays references, definitions, and implementations of document symbols as virtual text, inspired by JetBrains IDEA.
symbol-usage.nvim is a Neovim plugin that displays reference, definition, and implementation counts for document symbols as virtual text within the editor. It solves the problem of lacking built-in code intelligence by providing immediate visibility into how symbols are used across a codebase, similar to features found in JetBrains IDEs.
Neovim users, particularly developers working with multiple programming languages who want enhanced code navigation and understanding without switching to a full IDE.
It offers a lightweight, customizable alternative to native LSP codeLens, working with any LSP server and providing real-time symbol usage insights directly in the editor with minimal configuration.
Display references, definitions and implementations of document symbols
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Works with any Language Server Protocol server, even those that lack codeLens support, making it versatile across different programming environments without requiring server-side changes.
Offers multiple virtual text positions (above line, end of line, textwidth) and allows per-language configuration with custom text formatting, as detailed in the README with examples like bubbles and labels.
Minimizes unnecessary LSP requests to maintain performance, ensuring symbol counts are updated without significant lag or overhead during editing sessions.
Allows exclusion of specific symbols or references, such as filtering out test file counts, through configurable symbol_filter and kinds_filter options demonstrated in the setup.
As admitted in the README, some LSP servers (e.g., tsserver, rust-analyzer) do not properly identify anonymous functions and closures as SymbolKind.Function, leading to incomplete or inaccurate counts.
Cannot display virtual text above the first line due to a Neovim issue (#16166), which limits usability in files where top-line symbols are critical for navigation.
Setting up custom text formats and filters requires writing Lua functions and understanding Neovim's API, which can be daunting for users not already familiar with advanced configuration.