Repository navigation
Releases: evanlinjin/diffview
Releases · evanlinjin/diffview
Release list
dv v0.5.1
Added
gfon a name in a comment (torn_prefix_file, or anything incode) goes to where it's
defined: found by a grep forfn name,class nameand the like, the diff's files first; a
picker when there are several.Ctrl-w p: the pending view, as the Claude view for your pending review: its text so far and
the comments in it, each with a few lines of code around it.- In the Claude view (and the pending one),
+/-show more or less code around a comment,
andZthe whole file.
Changed
dv listkeeps your marks (m) when you quit it, so you can go through marked PRs a few at
a time; marks on PRs that have closed go.
dv v0.5.0
Changed
- Replacements:
A Aon several marked PRs has Claude suggest which go together (one replacement each
group) and which stand alone; you edit that in your editor before anything's drafted.- Publishing pushes to your own remote, not origin: dv asks which the first time and keeps
it ingit config dv.replaceRemote. It rebases onto the base on origin first. Scan publish and then close the originals in one go (closing on its own stays too).- Uncommitted changes aren't published:
Shas you commit them first. - A closing note without
{replacement}gets "Superseded by #N." added. - Drafts get your repo notes in their prompt, read-only, and can only write their record:
a PR's text can't steer what Claude does in later reviews. - A draft under way is known everywhere (
dv list, dv,dv replace), so none starts a
second one; dv anddv listshow drafts as they change. - PRs into different base branches can't share a replacement.
Fixed
dv list: a review (or replacement) that failed says why on its card, not just "failed",
and thata a(A A) tries again.
dv v0.4.1
Added
gfon afile:linein a comment (src/a.rs:12,a.rs:12-15,#L12) goes there: in the
diff if it's shown, else in hx (Ctrl-ocomes back). The skill has Claude cite code as
path:linefrom the repo root, so it always resolves.
Fixed
- A comment on a range of lines (5-10) lights all of them beside its box in the comment
margin, not just its last line; the cursor on any of them lights the box.
dv v0.4.0
Added
- Replacements: Claude drafts the change a PR (or several attempts at the same thing) should
have been, unpublished, for you to review first.A Aindv list,Space ain dv, or
dv replace N; Claude works in<repo>-replace-Nondv/replace-N, commits (never pushes),
and drafts the new PR's title and description and a note for closing the originals.dv list's new replacements tab lists them, and Enter opens one in dv with what it replaces and
the drafts on top.Sthere publishes it as a draft PR, then closes the originals with the
note (each step after your editor). S→ "Comment and close the PR": your comment as a review (pending comments too), then the
PR closed; with nothing to say, it only closes.dv list:[new]on PRs with something you haven't seen: GitHub activity or a change to
Claude's review since you last left the PR in dv (and, of PRs you've never opened, those
Claude has reviewed).- Your last instructions for Claude's reviews (
Space a→ review,a aindv list) are
remembered per repo and fill the editor next time; clear them to forget them. dv list:a aopens your editor first, for instructions to Claude for every marked PR's
review (leave it empty for a plain review;:cqcancels).Ctrl-w a: the Claude view, just Claude's review: the PR's one-line summary, Claude's
summary, and only the code it commented on (a few lines around each comment).
Changed
- Minimum Rust version 1.89 (was 1.88), for current dependencies (uuid 1.28).
dv list: Claude's part of a card (claude ✓,claude: reviewing…) sits at the right end
of its second line, under the age; a long line is cut to keep it in view.- The PR's state (DRAFT, OPEN, MERGED, CLOSED) sits at the right end of the PR's header line,
where it stands out; a long title is cut to keep it in view. [new]also goes once the cursor has stayed on the thread for 3 seconds, not only once it
leaves.
Fixed
- dv no longer replaces an installed skill that a newer dv installed (with an older dv
installed and a newer one built, they took turns). The skill notes the dv that installed it. - A closed (or merged) draft PR shows as CLOSED (MERGED), not DRAFT.
- Claude's summary is Claude's, not PR text:
ccopies it into your review summary (S
starts from it),Cposts it as your own PR comment (not quoted), and its key popup says so. ?: every section heading in the heading color (in two columns, the right column's had none
and the left's colored its whole row).dv list: the selected PR is readable (its text takes the highlight's colors), and the
highlight runs to the edge on both of its lines.
dv v0.3.0
Added
[new]on threads with comments you haven't seen (Claude's, or anyone's on GitHub; not
your own), until the cursor has been on them;]n/[nstep through those andSpace n
lists them. dv remembers what you've seen per PR (or branch).Space g: show only what isn't committed (to check Claude's changes), commit it (the
message starts from Claude's "Changed: …" replies since the last commit), and push to the
branch it tracks (a PR's, under its own name). The review loop no longer leaves dv.- dv keeps an installed dv-review skill up to date with itself, and a PR's Claude session
that started with another version of the skill isn't resumed (Claude Code reads a skill
once per session).Space acan start a fresh session for the PR. Slists what's still open under its choices: Claude's open comments (and how many it
answered, waiting for you), unresolved GitHub threads, pending comments on code that has
changed since, a checkout that isn't the PR's head. Approving puts them in the editor too, as
hint lines (not posted).Space mlists the messages so far, in full (the status bar cuts long ones), and where the
last background Claude run's log is.- Comments on files that are no longer in the diff (a change reverted, a file back to the
base) are listed in the PR section, by file, instead of showing nowhere;]c/]aand
the pickers get there. c/C/s/Space von an untracked file say why they can't (GitHub hasn't got it)
instead of failing there, and "viewed" counts only the PR's files.- A background Claude run says what it took when it's done ("5 turns, $0.22");
Space m
has the total so far. - Batch reviews from
dv list:mmarks PRs,a ahas Claude review them in the
background, two at a time, each in its worktree (<repo>-N, made if need be) and its own
session, so opening one later carries on from there. Cards show how each is going, and
claude ✓once a PR has a review. - Claude's comments show whose turn it is:
[waiting](you spoke last) and[answered]
(Claude answered you); typing either inSpace Alists just those. - A
severityfor Claude's comments (bug,nit,question, …), shown as a tag and put
before the text when you copy the comment to GitHub. - "Update Claude's review" after new commits on top of the one it reviewed asks it to review
just those (git diff <its head>). - On someone else's PR, "make the changes" becomes "suggest the changes": GitHub suggestion
blocks in Claude's comments for you to post, and no edits to the code. - Untracked files show in the diff (marked untracked), and changing one reloads it.
dv list:D Din the worktrees tab removes the PR's worktree (not with local changes in
it; its branch stays); up to 1000 PRs (was 200), and Enter on a#Nfilter opens PR N even
if it isn't listed.
Fixed
- With dv in a floating zellij pane, the editor (and hx, and Claude's pane) opened nowhere:
zellij can't split a floating pane, and said nothing. dv then took the comment as cancelled.
They now open where zellij puts them. - The key popup moves to the bottom left while the cursor is in the comment margin, so it no
longer covers the comments there. - On someone else's PR, Claude's answers to your replies suggest the changes you ask for
instead of making them, as "suggest the changes" does. - dv doesn't paste a request into a Claude pane that's asking whether you trust the folder
(the first time Claude Code runs in one), as it already didn't for permission prompts. Cbeside a pending review says so up front: GitHub refuses single comments then.- A refused review submission (e.g. approving your own PR) no longer leaves an empty pending
review behind. - GitHub's reasons for refusing something show in full, before where your text was saved.
- Claude finds
dv(this one) when dv was started by its path or the Claude pane gets a
different PATH (a zellij pane gets zellij's environment), so it can rundv review-*. - Claude's reply times are right: the prompt tells it the time.
- dv no longer rewrites the review file to give comments ids while Claude may be editing it.
dv v0.2.0
Added
- dv reloads the diff when the working tree changes under it (Claude making changes, a save in
hx, anything else), about once a second, keeping the cursor where it is; and right after a
background Claude run. - Mouse support: the wheel scrolls (the view, a popup, a picker's selection), a click moves
the cursor there (code, comment margin, either split side) or folds on a fold arrow, a drag
selects; in pickers anddv lista click picks and a second click opens.--no-mouseleaves
the mouse to the terminal (most terminals select text with Shift held either way). Space uupdates the checkout: to the PR's head (fast-forward only, keeping local commits),
orgit pull --ff-onlywithout a PR, then refreshes.- Comments in the right margin: in single-pane view on a wide window (room for 80 columns of
code beside the margin: a third of the window, 60–80 columns, or all beyond 200 columns of
code side; thread tags on a line of their
own under the header), review threads sit beside their lines instead of between
them. A box that would overlap the one before goes just below it; code only gets blank
rows where a file's comments need more room than its code.Ctrl-w l/Ctrl-w hmove
between code and comments; the box about the cursor's line (or the line a box is about) is
lit.Ctrl-w cswitches to inline comments and back. - In the same layout, the PR's conversation (and Claude's summary) sits beside the
description: whole comments, while there's description beside them; the rest follows full
width below. - One Claude Code session per PR, kept next to its review file: every run (background or in a
pane, from any dv and any worktree) continues the same conversation about that PR. - Claude's notes on the repo (
notes.mdin dv's directory, shared by worktrees): the skill reads them
before each task and keeps them up to date (conventions, subtle code, your review
preferences), so what it learns carries over to the next PR.Space aopens them in hx. - Approving a PR (
S, Approve) starts the summary asACK <the PR's head commit>. aon code lines leaves Claude a comment there (a question or a request), in the review file;
Claude answers right away, andrcontinues the thread. Nothing goes to GitHub.- "Ask Claude to make the changes" acts on the review's open comments, Claude's and the ones
you left it, and works with none too: then what you write is the request ("Ask Claude to
make a change"). It's checked whether Claude can take it before the editor opens, and if
it still can't, what you wrote is saved to a file. - Background Claude runs may run
cargo check,cargo build,cargo testandcargo clippy,
to check a change they made. Space a→ "Dismiss Claude's outdated comments": all of Claude's comments whose code has
changed, after a confirmation (your own comments for Claude stay).]p/[pstep through your pending review's comments (replies too), wrapping around.Ctrl-din the pending comments picker (Space p) deletes the selected comment (after a
confirmation); the review thread key popup listsSpace d.
Changed
- dv's files for a repo (Claude's reviews, sessions, notes) move from
.git/dvto
~/.local/share/dv/<repo>/(or$XDG_DATA_HOME), on first use: Claude Code refuses to edit
anything inside.git, so background Claude runs couldn't write the review there. Claude
runs get access to that directory (--add-dir), from worktrees too. - When a Claude run is refused something, dv says what (in the status bar, and keeps one log
per run) instead of "done"; replies made meanwhile wait rather than hit the same refusal. - Approving pre-fills
ACK <PR head>even when your checkout has diverged from it, with a hint
above it (not posted) that it isn't what you have checked out. - Inside zellij,
Enterreuses dv's hx pane while it's open (:open+:gotothere) instead of
opening another, and dv reloads as you save in it, not only when hx exits. - Claude resolves a thread once it's settled (it made the change asked for, or you agree it
doesn't apply), after replying; answering a question leaves it open. Reopen withSpace r. - Inside zellij, a PR's Claude Code pane is reused: when it's open,
Space aputs the request
in its input (pasted, focused; you press Enter) instead of opening another pane, and leaves
it alone while it's asking you something. Replies are answered in the background on a fork
of its session, so nothing is typed into a pane behind your back. - Claude Code sessions are kept per checkout directory (as Claude Code stores them), and one it
doesn't have isn't resumed. - Inside zellij, hx, the comment editor and Claude Code open in a pane to the right instead of
a floating one.
Fixed
- dv no longer freezes while hx is open beside it: hx runs in its own pane and dv reloads when
it exits. dv Nfor a PR that has a<repo>-Nworktree opens it there (its branch couldn't be checked
out in the main checkout too).- A PR branch with local commits that aren't on the PR (unpushed work, a local rebase) opens
as it is, with a note, instead of failing to fast-forward;-fstill resets it to the PR.
dv v0.1.0
The first release.
Diff
- base → working tree diff, unified or side by side (
Ctrl-w v), syntax highlighted, changed
words emphasised, context expandable per hunk (+/-,Zfor the whole file). - Helix-style cursor and selections, motions (
w b e,f t,gw,mm, …), search, jump
list; your Helix theme,cursorline,line-numberandjump-label-alphabet. - rust-analyzer: go to definition / references / type / implementations, hover.
- Open
hxat the cursor (in a floating pane inside zellij); copy text, patches,path:line
refs and comment links.
GitHub
dv Nchecks out PR N (-win a worktree next to the repo,-bon its branch,--rmto
remove it).dv list: the open PRs as cards with CI, review state, size and labels, sorted
and filtered GitHub-search style, plus a tab of the PRs you have worktrees for.- The PR's description, conversation, checks and review threads inline, rendered like
github.com, in boxes; outdated threads relocated to their code. - Comment on selected lines, suggest changes, reply, edit, delete, resolve, quote into the
conversation; a pending review you submit withS; mark files viewed. - Issue / PR link previews (
Space k).
Claude Code
dv install-skillinstalls thedv-reviewskill: Claude Code writes a review that dv shows
inline (dv review-info,dv review-check), anchored to its code as the code changes.- Reply to Claude from dv and it answers right away; ask it to review or to make the changes
its open comments ask for (Space a, with your own instructions if you like); copy its
comments into your GitHub review.
Keys
- Which-key popups after prefix keys, and the keys for what's under the cursor in the same
corner;?lists every key (two columns on wide windows,/to search).