mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 03:03:32 +01:00
- Remove unused parameters, dead files, and inaccurate doc.go files - Extract shared helpers, eliminate duplication - Rename cheatpath.Cheatpath to cheatpath.Path - Optimize filesystem walks (WalkDir, skip .git) - Move sheet name validation to sheet.Validate - Move integration tests to test/integration/ - Consolidate internal/mock into mocks/ - Move fuzz.sh to test/ - Inline loadSheets helper into command callers - Extract config.New into its own file - Fix stale references in HACKING.md and CLAUDE.md - Restore plan9 build target - Remove redundant and low-value tests - Clean up project documentation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Common Development Commands
Building
# Build for your architecture
make build
# Build release binaries for all platforms
make build-release
# Install cheat to your PATH
make install
Testing and Quality Checks
# Run all tests
make test
go test ./...
# Run a single test
go test -run TestFunctionName ./internal/package_name
# Generate test coverage report
make coverage
# Run linter (revive)
make lint
# Run go vet
make vet
# Format code
make fmt
# Run all checks (vendor, fmt, lint, vet, test)
make check
Development Setup
# Install development dependencies (revive linter, scc)
make setup
# Update and verify vendored dependencies
make vendor-update
Architecture Overview
The cheat command-line tool is organized into several key packages:
Command Layer (cmd/cheat/)
main.go: Entry point, argument parsing, command routingcmd_*.go: Individual command implementations (view, edit, list, search, etc.)- Commands are selected based on docopt parsed arguments
Core Internal Packages
-
internal/config: Configuration management- Loads YAML config from platform-specific paths
- Manages editor, pager, colorization settings
- Validates and expands cheatpath configurations
-
internal/cheatpath: Cheatsheet path management- Represents collections of cheatsheets on filesystem
- Handles read-only vs writable paths
- Supports filtering and validation
-
internal/sheet: Individual cheatsheet handling- Parses YAML frontmatter for tags and syntax
- Implements syntax highlighting via Chroma
- Provides search functionality within sheets
-
internal/sheets: Collection operations- Loads sheets from multiple cheatpaths
- Consolidates duplicates (local overrides global)
- Filters by tags and sorts results
-
internal/display: Output formatting- Writes to stdout or pager
- Handles text formatting and indentation
-
internal/installer: First-run installer- Prompts user for initial configuration choices
- Generates default
conf.ymland downloads community cheatsheets
-
internal/repo: Git repository management- Clones community cheatsheet repositories
- Updates existing repositories
Key Design Patterns
- Filesystem-based storage: Cheatsheets are plain text files
- Override mechanism: Local sheets override community sheets with same name
- Tag system: Sheets can be categorized with tags in frontmatter
- Multiple cheatpaths: Supports personal, community, and directory-scoped sheets
- Directory-scoped discovery: Walks up from cwd to find the nearest
.cheatdirectory (like.gitdiscovery)
Sheet Format
Cheatsheets are plain text files optionally prefixed with YAML frontmatter:
---
syntax: bash
tags: [ networking, ssh ]
---
# SSH tunneling example
ssh -L 8080:localhost:80 user@remote
Working with the Codebase
- Always check for
.gitdirectories and skip them during filesystem walks - Use
go-gitfor repository operations, not exec'ing git commands - Platform-specific paths are handled in
internal/config/paths.go - Color output uses ANSI codes via the Chroma library
- Test files use the
mockspackage for test data