mcpField
R
rg-code-search

rg-code-search

github.com/laurigatesDevelopment5943 installsUpdated 1d ago
Repository

About rg-code-search

rg-code-search is a procedural skill for developers who need to search source code and text files with ripgrep. It covers pattern matching, filtering, result formatting, and common code-audit searches.

Key features

  1. 01Regex and multi-line searches
  2. 02Filter by file type, glob, and path
  3. 03Control context and result output
  4. 04Search definitions, tests, and code markers

Use cases

  1. 01Find function or class definitions
  2. 02Audit code for TODOs or debug statements
  3. 03Narrow searches to selected file types
  4. 04Locate matches and pass files to other tools

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/laurigates/claude-plugins --skill rg-code-search

After installing, type/rg-code-searchin Claude Code to confirm it loaded.

Details

From the project README

rg Code Search

Expert knowledge for using rg (ripgrep) as a blazingly fast code search tool with powerful filtering and pattern matching.

When to Use This Skill

Use this skill when...Use fd-file-finding instead when...
Searching file contents for text or regex patternsSearching for files by name, extension, or path
Filtering matches by file type (-t py, -t js)Filtering files by mtime, size, or -type
Multi-line pattern matching across source filesLocating files to feed into another tool
Use this skill when...Use binary-analysis instead when...
Searching source code or text-encoded filesExtracting strings from compiled binaries or firmware
Auditing repos for hardcoded patterns in tracked filesHunting for credentials inside ELF, Mach-O, or .bin blobs

Core Expertise

ripgrep Advantages

  • Extremely fast (written in Rust)
  • Respects .gitignore automatically
  • Smart case-insensitive search
  • Recursive by default
  • Colorized output
  • Multi-line search support
  • Replace functionality

Basic Usage

Simple Search
# Basic search
rg pattern                  # Search in current directory
rg "import numpy"           # Search for exact phrase
rg function_name            # Search for function name

# Case-sensitive search
rg -s Pattern               # Force case-sensitive
rg -i PATTERN               # Force case-insensitive
File Type Filtering
# Search specific file types
rg pattern -t py            # Python files only
rg pattern -t rs            # Rust files only
rg pattern -t js            # JavaScript files
rg pattern -t md            # Markdown files

# Multiple types
rg pattern -t py -t rs      # Python and Rust

# List available types
rg --type-list              # Show all known types
Extension Filtering
# Filter by extension
rg pattern -g '*.rs'        # Rust files
rg pattern -g '*.{js,ts}'   # JavaScript and TypeScript
rg pattern -g '!*.min.js'   # Exclude minified files

Advanced Patterns

Regular Expressions
# Word boundaries
rg '\bfunction\b'           # Match whole word "function"
rg '\btest_\w+'             # Words starting with test_

# Line anchors
rg '^import'                # Lines starting with import
rg 'return$'                # Lines ending with return
rg '^class \w+:'            # Python class definitions

# Character classes
rg 'TODO|FIXME|XXX'         # Find markers
rg '[Ee]rror'               # Error or error
rg '\d{3}-\d{4}'            # Phone numbers
Multi-line Search
# Multi-line patterns
rg -U 'fn.*\{.*\}'          # Function definitions (Rust)
rg -U 'struct.*{[^}]*}'     # Struct definitions

# Context lines
rg -A 5 pattern             # Show 5 lines after
rg -B 3 pattern             # Show 3 lines before
rg -C 2 pattern             # Show 2 lines before and after
Output Formatting
# Control output
rg -l pattern               # List files with matches only
rg -c pattern               # Count matches per file
rg --count-matches pattern  # Total match count

# Show context
rg -n pattern               # Show line numbers (default)
rg -N pattern               # Don't show line numbers
rg --heading pattern        # Group by file (default)
rg --no-heading pattern     # Don't group by file

# Customize output
rg --vimgrep pattern        # Vim-compatible format
rg --json pattern           # JSON output

Advanced Filtering

Path Filtering
# Search in specific directories
rg pattern src/             # Only src/ directory
rg pattern src/ tests/      # Multiple directories

# Exclude paths
rg pattern -g '!target/'    # Exclude target/
rg pattern -g '!{dist,build,node_modules}/'  # Exclude multiple

# Full path matching
rg pattern -g '**/test/**'  # Only test directories
Content Filtering
# Search only in files containing pattern
rg --files-with-matches "import.*React" | xargs rg "useState"

# Exclude files by content
rg pattern --type-not markdown

# Search only uncommitted files
rg pattern $(git diff --name-only)
Size and Hidden Files
# Include hidden files
rg pattern -u               # Include hidden
rg pattern -uu              # Include hidden + .gitignore'd
rg pattern -uuu             # Unrestricted: everything

# Exclude by size
rg pattern --max-filesize 1M  # Skip files over 1MB

Code Search Patterns

Finding Definitions
# Function definitions
rg '^def \w+\('             # Python functions
rg 'fn \w+\('               # Rust functions
rg '^function \w+\('        # JavaScript functions
rg '^\s*class \w+'          # Class definitions

# Interface/type definitions
rg '^interface \w+'         # TypeScript interfaces
rg '^type \w+ ='            # Type aliases
rg '^struct \w+'            # Struct definitions (Rust/Go)
Finding Usage
# Find function calls
rg 'functionName\('         # Direct calls
rg '\.methodName\('         # Method calls

# Find imports
rg '^import.*module_name'   # Python imports
rg '^use.*crate_name'       # Rust uses
rg "^import.*'package'"     # JavaScript imports
Code Quality Checks
# Find TODOs and FIXMEs
rg 'TODO|FIXME|XXX|HACK'    # Find all markers
rg -t py '#\s*TODO'         # Python TODOs
rg -t rs '//\s*TODO'        # Rust TODOs

# Find debug statements
rg 'console\.log'           # JavaScript
rg 'println!'               # Rust
rg 'print\('                # Python

# Find security issues
rg 'password.*=|api_key.*=' # Potential secrets
rg 'eval\('                 # Eval usage
rg 'exec\('                 # Exec usage
Testing Patterns
# Find tests
rg '^def test_' -t py       # Python tests
rg '#\[test\]' -t rs        # Rust tests
rg "describe\(|it\(" -t js  # JavaScript tests

# Find skipped tests
rg '@skip|@pytest.mark.skip' -t py
rg '#\[ignore\]' -t rs
rg 'test\.skip|it\.skip' -t js

File Operations

Search and Replace
# Preview replacements
rg pattern --replace replacement

# Perform replacement (requires external tool)
rg pattern -l | xargs sed -i 's/pattern/replacement/g'

# With confirmation (using fd and interactive)
fd -e rs | xargs rg pattern --files-with-matches | xargs -I {} sh -c 'vim -c "%s/pattern/replacement/gc" -c "wq" {}'
Integration with Other Tools
# Pipe to other commands
rg -l "TODO" | xargs wc -l          # Count lines with TODOs
rg "function" --files-with-matches | xargs nvim  # Open files in editor

# Combine with fd (prefer fd's native -x execution)
fd -e py -x rg "class.*Test" {}     # Find test classes
fd -e rs -x rg "unsafe" {}          # Find unsafe blocks

# Count occurrences
rg -c pattern | awk -F: '{sum+=$2} END {print sum}'
Stats and Analysis
# Count total matches
rg pattern --count-matches --no-filename | awk '{sum+=$1} END {print sum}'

# Find most common matches
rg pattern -o | sort | uniq -c | sort -rn

# Files with most matches
rg pattern -c | sort -t: -k2 -rn | head -10

Performance Optimization

Speed Tips
# Limit search
rg pattern --max-depth 3    # Limit directory depth
rg pattern -g '*.rs' -t rust  # Use type filters

# Parallel processing (default)
rg pattern -j 4             # Use 4 threads

# Memory management
rg pattern --mmap           # Use memory maps (faster)
rg pattern --no-mmap        # Don't use memory maps
Large Codebase Strategies
# Narrow scope first
rg pattern src/             # Specific directory
rg pattern -t py -g '!test*'  # Specific type, exclude tests

# Use file list caching
rg --files > /tmp/files.txt
rg pattern $(cat /tmp/files.txt)

# Exclude large directories
rg pattern -g '!{target,node_modules,dist,build}/'

Best Practices

When to Use rg

  • Searching code for patterns
  • Finding function/class definitions
  • Code analysis and auditing
  • Refactoring support
  • Security scanning

When to Use grep Instead

  • POSIX compatibility required
  • Simple one-off searches
  • Piped input (stdin)
  • System administration tasks

Tips for Effective Searches

  • Escape regex special characters in patterns
  • Use -u flags when searching ignored/hidden files
  • Exclude large binary/generated files with --glob '!vendor'
  • Prefer rg over grep for speed and smart defaults

Quick Reference

Essential Options
OptionPurposeExample
-t TYPEFile type filterrg -t py pattern
-g GLOBGlob patternrg -g '*.rs' pattern
-iCase-insensitiverg -i pattern
-sCase-sensitiverg -s Pattern
-wMatch whole wordsrg -w word
-lFiles with matchesrg -l pattern
-cCount per filerg -c pattern
-A NLines afterrg -A 5 pattern
-B NLines beforerg -B 3 pattern
-C NContext linesrg -C 2 pattern
-UMulti-linerg -U 'pattern.*'
-uInclude hiddenrg -u pattern
--replaceReplace textrg pattern --replace new
File Types (Common)
TypeExtensions
-t pyPython (.py, .pyi)
-t rsRust (.rs)
-t jsJavaScript (.js, .jsx)
-t tsTypeScript (.ts, .tsx)
-t goGo (.go)
-t mdMarkdown (.md, .markdown)
-t yamlYAML (.yaml, .yml)
-t jsonJSON (.json)
Common Command Patterns
# Find function definitions across codebase
rg '^\s*(def|fn|function)\s+\w+' -t py -t rs -t js

# Find all imports
rg '^(import|use|require)' -t py -t rs -t js

# Find potential bugs
rg 'TODO|FIXME|XXX|HACK|BUG'

# Find test files and count tests
rg -t py '^def test_' -c

# Find large functions (50+ lines)
rg -U 'def \w+.*\n(.*\n){50,}' -t py

# Security audit
rg 'password|api_key|secret|token' -i -g '!*.{lock,log}'

This makes rg the preferred tool for fast, powerful code search in development workflows.

Comments

Markdown supported