Easy Search - Fast Symbol Search
A VS Code extension that provides fast, fuzzy search for functions, structs, and enums in C/C++ and Python files, powered by a blazing-fast Rust indexer with tree-sitter parsing.
Features
✨ Fast Indexing: Blazing-fast symbol indexing using Rust and tree-sitter (~10,000 symbols/second)
🔍 Partial Name Matching: Search using partial names (e.g., "apple cat" finds "apple_ball_cat")
🎯 Multiple Symbol Types: Search functions, structs, and enums with visual type indicators
🌐 Multi-language Support: C, C++, and Python symbol detection
⚡ Sub-10ms Search: Lightning-fast search with subsequence matching
🔄 Auto-updating: Index automatically updates when files change
📍 Jump to Definition: Click any result to jump directly to the symbol
🖥️ Integrated Panel: Dedicated sidebar panel with search-as-you-type interface
🌍 Multi-platform: Native binaries for Windows (x64/ARM64) and Linux (x64)
Installation
Quick Install (Recommended)
- Download the latest
.vsix file
- In VS Code, run: Extensions → Install from VSIX
- Reload VS Code
Build from Source
Prerequisites:
- Windows: Visual Studio Build Tools, Rust, Node.js
- Linux: build-essential, Rust, Node.js
- Windows with WSL (for Linux builds): WSL with Alpine/Ubuntu, Rust in WSL
See BUILD_PLATFORMS.md for detailed multi-platform build instructions.
Quick build:
# Install dependencies
npm install
# Windows - Build for Windows platforms only (fastest)
npm run build-native-windows
npm run compile
# Windows with WSL - Build for Linux x64
npm run build-native-linux
npm run compile
# Linux - Build for Linux natively
cd indexer
cargo build --release --target x86_64-unknown-linux-gnu
cp target/x86_64-unknown-linux-gnu/release/libindex.so ../native/linux-x64/index.node
cd ..
npm run compile
# Package the extension
npm run package
The extension automatically detects your platform (Windows x64/ARM64, Linux x64) and loads the correct native module.
Usage
Search Symbols
Sidebar Panel: Click the Easy Search icon in the Activity Bar for the integrated search panel
Keyboard Shortcut: Ctrl+Shift+F12 (Windows/Linux) or Cmd+Shift+F12 (macOS) to open the sidebar panel
Quick Pick: Ctrl+Shift+P → "Easy Search: Find Function" for the quick pick interface
Search Examples
Functions:
| Search Query |
Matches |
get_user_data |
Exact: get_user_data |
get user |
get_user_data, get_user_profile, get_user_info |
init db |
initialize_database_connection, init_db_pool |
apple cat |
apple_ball_cat, appleCat, apple_orange_cat |
gud |
Subsequence: get_user_data |
calc total |
calculate_total_price, calc_total_amount |
Structs & Enums:
| Search Query |
Symbol Type |
Matches |
user data |
Struct |
user_data_t, UserDataStruct |
error code |
Enum |
error_code_t, ErrorCodeEnum |
cfg |
Struct |
config_settings, cfg_data |
How It Works
The extension uses a Rust-based native module with tree-sitter parsers to:
- Parse: Use tree-sitter to parse C/C++/Python files and extract function definitions, struct declarations, and enum definitions
- Index: Build an in-memory index of all symbols with file locations and signatures
- Search: Perform fast partial matching using token-based subsequence algorithm
- Navigate: Jump directly to symbol definitions with one click from either the sidebar panel or quick pick interface
Matching Algorithm
The search implements partial matching:
- Token Matching: Splits query into words and matches them in sequence
- Subsequence Matching: Matches character sequences (e.g., "gud" → "get_user_data")
- Smart Scoring: Ranks results by match quality and compactness
- Case Insensitive: Works with any capitalization style
Configuration
Access settings via: File → Preferences → Settings → Search "Easy Search"
| Setting |
Default |
Description |
easySearch.autoIndex |
true |
Automatically index workspace on startup |
easySearch.maxResults |
100 |
Maximum number of search results to display |
Commands
| Command |
Description |
Easy Search: Open Search Panel |
Open the Easy Search sidebar panel (Ctrl+Shift+F12) |
Easy Search: Find Function |
Open quick pick search dialog |
Easy Search: Rebuild Index |
Manually rebuild the symbol index |
- Indexing Speed: ~10,000 symbols per second
- Search Speed: <10ms for most queries
- Memory Usage: ~1MB per 10,000 indexed symbols
- Symbol Types: Functions, structs, enums
- Languages: C, C++, Python (more coming soon)
Testing
Test files are included in test_files/:
- Open the workspace in VS Code
- Press
Ctrl+Shift+F12 or click the Easy Search icon in the sidebar
- Try these searches:
- "apple cat" → finds
apple_ball_cat function
- "get user" → finds multiple user-related functions
- "init db" → finds database initialization functions
- "proc pay" → finds
process_payment_transaction
- "user data" → finds struct definitions
- "error" → finds enums and error-related symbols
Troubleshooting
"Native indexer not found"
- Ensure you built the Rust module:
cd indexer && cargo build --release
Extension not activating
- Check you have C/C++/Python files in your workspace
- View → Output → Select "Easy Search" to see logs
No search results
- Run "Easy Search: Rebuild Index" from command palette
- Ensure your files have
.c, .cpp, .h, .hpp, or .py extensions
Requirements
- VS Code 1.85.0 or higher
- Supported Platforms:
- ✅ Windows x64
- ✅ Windows ARM64
- ✅ Linux x64 (glibc-based: Ubuntu, Debian, Fedora, etc.)
- 🔄 Linux ARM64 (planned)
- 🔄 macOS (planned)
- For building: Rust 1.70+, Node.js 18+
Contributing
Contributions welcome! The project structure:
easy_search/
├── indexer/ # Rust native module
│ ├── src/
│ │ ├── lib.rs # Neon bindings
│ │ ├── parser.rs # Tree-sitter parsing
│ │ └── matcher.rs # Fuzzy matching algorithm
│ └── Cargo.toml
├── src/
│ └── extension.ts # VS Code extension
└── test_files/ # Example test files
Roadmap
- [x] Functions, structs, and enums support
- [x] Sidebar panel with search-as-you-type
- [x] Multi-platform native binaries
- [ ] Support for more languages (Java, JavaScript, TypeScript, Go, Rust)
- [ ] Function parameter search and filtering
- [ ] Symbol type filtering UI (toggle functions/structs/enums)
- [ ] Class and typedef support
- [ ] Performance optimizations for very large codebases (>100K symbols)
License
MIT License - See LICENSE file for details
Acknowledgments
- Tree-sitter for the excellent parsing library
- The Rust and VS Code communities