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: wandersoncferreira/dotfiles#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.
- Start review from URL via
code-review-start - Modern UI using magit-section and transient
- Read Pull Request comments
- Reply to comments
- Include code suggestions
- View
outdatedcomments with the right diff hunk context - Approve, Reject or Request Changes for your PRs
- Integrated with
forge-topic-viewviacode-review-forge-pr-at-point - Fast track commands like "LGTM! Approved"
- Review using single commits to focus on diff
- Set labels on RET. See details Multi value selection
- Set assignee. Use transient
syoption toassign yourselfto the PR. - Set milestone. See details push access required
- Edit PR title
- Edit PR description body
- Merge your PR. (beta feature) See details merge
- Reactions. See details react to comments
- Promote comments to new issues.
- Save/Resume in-progress Reviews
- Visit binary files in Dired or Remote. Example here
- Mention user with
C-c @in*code-review-comment*buffer.
Highly recommend using the transient menu in the *Code Review* buffer by pressing r.
The basic workflow:
RETon a hunk diff line to add a commentRETon a local comment to editRETon a previous sent comment to include a replyC-c C-kon a local comment to remove itr s fto enable transient and Set a feedbackr ato approve the PR |r rto reject the PR |r cto 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.

