diff

package
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RelativeAge added in v0.12.0

func RelativeAge(t, now time.Time) string

RelativeAge formats a timestamp as a compact relative age string (3 chars wide). Examples: " 5m" (minutes), " 3h" (hours), " 2d" (days), " 1w" (weeks), " 4M" (months), " 2y" (years).

Types

type BlameLine added in v0.12.0

type BlameLine struct {
	Author string
	Time   time.Time
}

BlameLine holds blame information for a single line of a file.

type ChangeType

type ChangeType string

ChangeType represents the type of change for a diff line.

const (
	ChangeAdd     ChangeType = "+"
	ChangeRemove  ChangeType = "-"
	ChangeContext ChangeType = " "
	ChangeDivider ChangeType = "~" // separates non-adjacent hunks

	// MaxLineLength is the maximum line length (in bytes) that scanners will accept.
	// Used by ParseUnifiedDiff, readReaderAsContext, and parseBlame.
	MaxLineLength = 1024 * 1024

	// BinaryPlaceholder is the content used for binary file placeholders.
	// ParseUnifiedDiff returns this when git reports "Binary files ... differ".
	BinaryPlaceholder = "(binary file)"
)

type DiffLine

type DiffLine struct {
	OldNum     int        // line number in old version (0 for additions)
	NewNum     int        // line number in new version (0 for removals)
	Content    string     // line content without the +/- prefix
	ChangeType ChangeType // changeAdd, ChangeRemove, ChangeContext, or ChangeDivider
	IsBinary   bool       // true when this line is a binary file placeholder
}

DiffLine holds parsed line info from a diff.

func ParseUnifiedDiff

func ParseUnifiedDiff(raw string) ([]DiffLine, error)

ParseUnifiedDiff parses unified diff output into a slice of DiffLine entries. It handles the diff header, hunk headers, and content lines. For binary diffs ("Binary files ... differ"), it returns a single placeholder DiffLine. Intended for single-file diffs; multi-file diffs are not fully supported.

type DirectoryReader added in v0.10.0

type DirectoryReader struct {
	// contains filtered or unexported fields
}

DirectoryReader is a Renderer that lists all git-tracked files and reads them as context lines. used for --all-files mode where every tracked file is browsable, not just changed files.

func NewDirectoryReader added in v0.10.0

func NewDirectoryReader(workDir string) *DirectoryReader

NewDirectoryReader creates a DirectoryReader rooted at the given working directory. the directory must be inside a git repository.

func (*DirectoryReader) ChangedFiles added in v0.10.0

func (dr *DirectoryReader) ChangedFiles(_ string, _ bool) ([]string, error)

ChangedFiles returns all git-tracked files as sorted relative paths. ref and staged parameters are ignored since all tracked files are returned.

func (*DirectoryReader) FileDiff added in v0.10.0

func (dr *DirectoryReader) FileDiff(_, file string, _ bool) ([]DiffLine, error)

FileDiff reads the file from disk and returns all lines as context DiffLines. ref and staged parameters are ignored since the file is read directly from disk.

type ExcludeFilter added in v0.10.0

type ExcludeFilter struct {
	// contains filtered or unexported fields
}

ExcludeFilter wraps a renderer and filters out files matching any of the given prefixes. filtering is applied only at the file list level (ChangedFiles); FileDiff delegates directly.

func NewExcludeFilter added in v0.10.0

func NewExcludeFilter(inner renderer, prefixes []string) *ExcludeFilter

NewExcludeFilter creates an ExcludeFilter that removes files matching any prefix from results.

func (*ExcludeFilter) ChangedFiles added in v0.10.0

func (ef *ExcludeFilter) ChangedFiles(ref string, staged bool) ([]string, error)

ChangedFiles returns files from the inner renderer, excluding any that match a prefix.

func (*ExcludeFilter) FileDiff added in v0.10.0

func (ef *ExcludeFilter) FileDiff(ref, file string, staged bool) ([]DiffLine, error)

FileDiff delegates directly to the inner renderer without filtering.

type FallbackRenderer added in v0.7.0

type FallbackRenderer struct {
	// contains filtered or unexported fields
}

FallbackRenderer wraps a *Git renderer and knows about --only file paths. it delegates to the inner renderer, falling back to disk read for --only files that are not present in the git diff.

func NewFallbackRenderer added in v0.7.0

func NewFallbackRenderer(inner *Git, only []string, workDir string) *FallbackRenderer

NewFallbackRenderer creates a FallbackRenderer that delegates to inner and falls back to reading files from disk for --only patterns not found in the git diff.

func (*FallbackRenderer) ChangedFiles added in v0.7.0

func (fr *FallbackRenderer) ChangedFiles(ref string, staged bool) ([]string, error)

ChangedFiles returns changed files from the inner renderer, then appends any --only files not already present in the result if they exist on disk.

func (*FallbackRenderer) FileDiff added in v0.7.0

func (fr *FallbackRenderer) FileDiff(ref, file string, staged bool) ([]DiffLine, error)

FileDiff returns the diff for a file. for files outside the repo (absolute paths that escape workDir), it skips the inner git renderer entirely and reads from disk. for in-repo files, it calls the inner renderer first; if the result is empty (no error, no lines) and the file matches an --only pattern, it falls back to reading the file from disk as all-context lines.

type FileReader added in v0.7.0

type FileReader struct {
	// contains filtered or unexported fields
}

FileReader is a standalone Renderer for use when no git repo is available. it reads --only files directly from disk and presents them as all-context lines.

func NewFileReader added in v0.7.0

func NewFileReader(files []string, workDir string) *FileReader

NewFileReader creates a FileReader that reads the given files from disk. relative paths are resolved against workDir.

func (*FileReader) ChangedFiles added in v0.7.0

func (r *FileReader) ChangedFiles(_ string, _ bool) ([]string, error)

ChangedFiles returns the file list, resolved against workDir, filtered to only those that exist on disk.

func (*FileReader) FileDiff added in v0.7.0

func (r *FileReader) FileDiff(_, file string, _ bool) ([]DiffLine, error)

FileDiff reads the file from disk and returns all lines as context DiffLines.

type Git

type Git struct {
	// contains filtered or unexported fields
}

Git provides methods to extract changed files and build full-file diff views.

func NewGit

func NewGit(workDir string) *Git

NewGit creates a new Git diff renderer rooted at the given working directory.

func (*Git) ChangedFiles

func (g *Git) ChangedFiles(ref string, staged bool) ([]string, error)

ChangedFiles returns a list of files changed relative to the given ref. If ref is empty, it shows uncommitted changes. If staged is true, shows only staged changes.

func (*Git) FileBlame added in v0.12.0

func (g *Git) FileBlame(ref, file string, staged bool) (map[int]BlameLine, error)

FileBlame returns blame information for each line of the rendered side of a file diff. For unstaged single-ref diffs this is the worktree; for two-ref diffs this is the target ref. For staged diffs this is the index snapshot. The returned map is keyed by 1-based line number (matching DiffLine.NewNum).

func (*Git) FileDiff

func (g *Git) FileDiff(ref, file string, staged bool) ([]DiffLine, error)

FileDiff returns the full-file diff view for a single file. The result is a sequence of DiffLine entries representing unchanged, added, and removed lines interleaved at their correct positions. For binary files, it returns a single placeholder line with size delta information.

type StdinReader added in v0.13.0

type StdinReader struct {
	// contains filtered or unexported fields
}

StdinReader is an in-memory renderer for scratch-buffer review mode.

func NewStdinReader added in v0.13.0

func NewStdinReader(name string, lines []DiffLine) *StdinReader

NewStdinReader creates a renderer that exposes a single synthetic file backed by in-memory lines.

func NewStdinReaderFromReader added in v0.13.0

func NewStdinReaderFromReader(name string, r io.Reader) (*StdinReader, error)

NewStdinReaderFromReader reads arbitrary content into context lines and exposes it as one synthetic file.

func (*StdinReader) ChangedFiles added in v0.13.0

func (r *StdinReader) ChangedFiles(_ string, _ bool) ([]string, error)

ChangedFiles returns the single synthetic filename.

func (*StdinReader) FileDiff added in v0.13.0

func (r *StdinReader) FileDiff(_, file string, _ bool) ([]DiffLine, error)

FileDiff returns the stored context lines for the synthetic file.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL