mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 11:13:33 +01:00
Bug fixes: - Fix inverted pager detection logic (returned error instead of path) - Fix repo.Clone ignoring destination directory parameter - Fix sheet loading using append on pre-sized slices - Clean up partial files on copy failure - Trim whitespace from editor config Security: - Add path traversal protection for cheatsheet names Performance: - Move regex compilation outside search loop - Replace string concatenation with strings.Join in search Build: - Remove go:generate; embed config and usage as string literals - Parallelize release builds - Add fuzz testing infrastructure Testing: - Improve test coverage from 38.9% to 50.2% - Add fuzz tests for search, filter, tags, and validation Documentation: - Fix inaccurate code examples in HACKING.md - Add missing --conf and --all options to man page - Add ADRs for path traversal, env parsing, and search parallelization - Update CONTRIBUTING.md to reflect project policy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.0 KiB
3.0 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/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
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
internal/mockpackage for test data