Code Reviews in Emacs
Package to help you perform code reviews from your VC provider. Currently supports Github and basic Gitlab and Bitbucket workflows.
Link to same PR on Github: https://github.com/wandersoncferreira/dotfiles/pull/5
The Emacs everywhere goal continues. These are the main features of
code-review
to help you never leave Emacs to do Pull Request reviews.
code-review-start
outdated
comments with the right diff hunk contextforge-topic-view
via code-review-forge-pr-at-point
sy
option to assign yourself
to the PR.C-c @
in *code-review-comment*
buffer.Highly recommend using the transient menu in the *Code Review*
buffer by pressing r
.
The basic workflow:
RET
on a hunk diff line to add a commentRET
on a local comment to editRET
on a previous sent comment to include a replyC-c C-k
on a local comment to remove itr s f
to enable transient and Set a feedbackr a to approve the PR |
r r to reject the PR |
r c to add comments in the PR |
You can include your own bindings to functions like
code-review-set-feedback
, code-review-submit-approve
,
code-review-submit-request-changes
, and code-review-submit-comments
to not rely on the
transient panel. But I think you should see it :]
Take a look at which features are available to each integrated forge here.
Missing something? Please, let us know.
I highly recommend installing code-review
through package.el
.
It’s available on MELPA
.
M-x package-install code-review
Then you can either M-x code-review-start
and provide a PR URL or M-x
code-review-forge-pr-at-point
if you are in a forge buffer over a PR.
If you want to see pretty symbols enable emojify
package:
(add-hook 'code-review-mode-hook #'emojify-mode)
Define line wrap in comment sections.
(setq code-review-fill-column 80)
Change how code-review
splits the buffer when opening a new PR. Defaults to
#'switch-to-buffer-other-window
.
(setq code-review-new-buffer-window-strategy #'switch-to-buffer)
Change the destination where binary files is downloaded.
(setq code-review-download-dir "/tmp/code-review/")
Use passwords configured for forge. The default is 'code-review
.
(setq code-review-auth-login-marker 'forge)
I’ve noticed that *Code Review*
buffer is not added into the current workspace
in Doom emacs. If you have workspaces
in your $DOOMDIR/init.el
file,
consider the following snippet:
(add-hook 'code-review-mode-hook
(lambda ()
;; include *Code-Review* buffer into current workspace
(persp-add-buffer (current-buffer))))
If your private instance is HTTP not HTTPS, then you need to add the host to the following variable.
(setq ghub-insecure-hosts '("hostname.com"))
Follow the documentation to your version control provider to see more details for the setup and configuration.
You can access the transient panel by hitting r
from any place of the Code
Review
buffer.
Binding | Object | Action |
---|---|---|
RET | hunk | Add Comment |
RET | comment | Add Reply |
RET | local comment (not sent to forge yet) | Edit local comment |
C-c C-k | local comment | Delete local comment |
C-c C-c | Comment Buffer | Register your local comment |
C-c C-k | Comment Buffer | Cancel your local comment |
C-c C-r | comment | Add Reaction |
C-c C-n | comment | Promote to new issue |
C-c C-r | pr description | Add Reaction |
RET | reaction (on emoji symbol) | Endorse or Remove Reaction |
RET | Request Reviewer | Request reviewer at point |
You can place code-review-forge-pr-at-point
to a key binding for your convenience:
(define-key forge-topic-mode-map (kbd "C-c r") 'code-review-forge-pr-at-point)
If you are not an Evil user you can set the letter k
, for example, to delete a
local comment or feedback at point.
(define-key code-review-feedback-section-map (kbd "k") 'code-review-section-delete-comment)
(define-key code-review-local-comment-section-map (kbd "k") 'code-review-section-delete-comment)
(define-key code-review-reply-comment-section-map (kbd "k") 'code-review-section-delete-comment)
Move between comments using C-c C-n
and C-c C-p
(define-key code-review-mode-map (kbd "C-c C-n") 'code-review-comment-jump-next)
(define-key code-review-mode-map (kbd "C-c C-p") 'code-review-comment-jump-previous)
The package allows you to write integration with other forges to leverage these
functionalities. Take a look at code-review-interfaces.el
to see which functions
need to be implemented.
Thanks Laurent Charignon for the awesome
github-review package and
stewardship. Github Review made me more familiar with the problem domain and
code-review
is an attempt to build on top of it.
Thanks Ag Ibragimov for the amazing idea to use
magit-section
to build a more suitable interface to this problem.