sourcebot/docs/docs/features/code-navigation.mdx
2025-06-01 18:51:12 -07:00

43 lines
2.1 KiB
Text

---
title: Code navigation
sidebarTitle: Code navigation
---
import SearchContextSchema from '/snippets/schemas/v3/searchContext.schema.mdx'
import LicenseKeyRequired from '/snippets/license-key-required.mdx'
<LicenseKeyRequired />
**Code navigation** allows you to jump between symbol definition and references when viewing source files in Sourcebot. This feature is enabled **automatically** when a valid license key is present and works with all popular programming languages.
<video src="https://framerusercontent.com/assets/B9ZxrlsUeO9NJyzkKyvVV2KSU4.mp4" className="w-full aspect-video" controls></video>
## Features
| Feature | Description |
|:--------|:------------|
| **Hover popover** | Hovering over a symbol reveals the symbol's definition signature as a inline preview. |
| **Go to definition** | Clicking the "go to definition" button in the popover or clicking the symbol name navigates to the symbol's definition. |
| **Find references** | Clicking the "find all references" button in the popover lists all references in the explore panel. |
| **Explore panel** | Lists all references and definitions for the symbol selected in the popover. |
## How does it work?
Code navigation is **search-based**, meaning it uses the same code search engine and [query language](/docs/features/search/syntax-reference) to estimate a symbol's references and definitions. We refer to these estimations as "search heuristics". We have two search heuristics to enable the following operations:
### Find references
Given a `symbolName`, along with information about the file the symbol is contained within (`git_revision`, and `language`), runs the following search:
```bash
\\b{symbolName}\\b rev:{git_revision} lang:{language} case:yes
```
### Find definitions
Given a `symbolName`, along with information about the file the symbol is contained within (`git_revision`, and `language`), runs the following search:
```bash
sym:\\b{symbolName}\\b rev:{git_revision} lang:{language}
```
Note that the `sym:` prefix is used to filter the search by symbol definitions. These are created at index time by [universal ctags](https://ctags.io/).