Files
cheat/CLAUDE.md
Christopher Allen Lane ecfb83a3b0 docs: clean up project documentation
- Convert all headings from underline style to ATX style
- Fix heading hierarchy in INSTALLING.md (H3→H2, H4→H3)
- Move Installing section before Usage in README
- Bump install snippet version from 4.5.1 to 4.7.0
- Add feature request guidance to CONTRIBUTING.md
- Add installer package and .cheat discovery to CLAUDE.md
- Remove unused reference links and dead HTML comments
- Trim trailing whitespace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 12:56:58 -05:00

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 routing
  • cmd_*.go: Individual command implementations (view, edit, list, search, etc.)
  • Commands are selected based on docopt parsed arguments

Core Internal Packages

  1. internal/config: Configuration management

    • Loads YAML config from platform-specific paths
    • Manages editor, pager, colorization settings
    • Validates and expands cheatpath configurations
  2. internal/cheatpath: Cheatsheet path management

    • Represents collections of cheatsheets on filesystem
    • Handles read-only vs writable paths
    • Supports filtering and validation
  3. internal/sheet: Individual cheatsheet handling

    • Parses YAML frontmatter for tags and syntax
    • Implements syntax highlighting via Chroma
    • Provides search functionality within sheets
  4. internal/sheets: Collection operations

    • Loads sheets from multiple cheatpaths
    • Consolidates duplicates (local overrides global)
    • Filters by tags and sorts results
  5. internal/display: Output formatting

    • Writes to stdout or pager
    • Handles text formatting and indentation
  6. internal/installer: First-run installer

    • Prompts user for initial configuration choices
    • Generates default conf.yml and downloads community cheatsheets
  7. 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 .cheat directory (like .git discovery)

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 .git directories and skip them during filesystem walks
  • Use go-git for 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/mock package for test data