code-review
code-review copied to clipboard
Code Reviews in Emacs
Code Review
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
Overview
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.
Installation
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.
Configuration
Code Review
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/")
Experimental
Use passwords configured for forge. The default is 'code-review.
(setq code-review-auth-login-marker 'forge)
Doom Emacs users
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))))
Forge specific
Follow the documentation to your version control provider to see more details for the setup and configuration.
- Github
- Gitlab
- Bitbucket
Keybindings
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 |
Binding suggestions
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)
Extension to other forges
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
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.