wandersoncferreira/code-review
{ "createdAt": "2021-10-17T04:20:28Z", "defaultBranch": "master", "description": "Code Reviews in Emacs", "fullName": "wandersoncferreira/code-review", "homepage": "https://wandersoncferreira.github.io/code-review/", "language": "Emacs Lisp", "name": "code-review", "pushedAt": "2024-05-29T03:40:43Z", "stargazersCount": 480, "topics": [ "bitbucket", "code-review", "emacs", "github", "gitlab" ], "updatedAt": "2025-11-18T14:05:23Z", "url": "https://github.com/wandersoncferreira/code-review"}Code Review
Section titled “Code Review”Package to help you perform code reviews from your VC provider. Currently supports Github and basic Gitlab and Bitbucket workflows.
![Demo of code review package]!(./docs/code_review_demo.png)
Link to same PR on Github: https://github.com/wandersoncferreira/dotfiles/pull/5
Overview
Section titled “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]!(./docs/multi-value-selection.md)
- Set assignee. Use transient
syoption toassign yourselfto the PR. - Set milestone. See details [push access required]!(./docs/milestone.md)
- Edit PR title
- Edit PR description body
- Merge your PR. (beta feature) See details [merge]!(./docs/merge.md)
- Reactions. See details [react to comments]!(./docs/reactions.md)
- 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]!(./docs/forge_support.md).
Missing something? Please, let us know.
Installation
Section titled “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
Section titled “Configuration”Code Review
Section titled “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
Section titled “Experimental”Use passwords configured for forge. The default is 'code-review.
(setq code-review-auth-login-marker 'forge)Doom Emacs users
Section titled “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))))Insecure private instances
Section titled “Insecure private instances”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"))Forge specific
Section titled “Forge specific”Follow the documentation to your version control provider to see more details for the setup and configuration.
- [Github]!(./docs/github.md)
- [Gitlab]!(./docs/gitlab.md)
- [Bitbucket]!(./docs/bitbucket.md)
Keybindings
Section titled “Keybindings”You can access the transient panel by hitting r from any place of the Code Review buffer.
![Transient keybindings]!(./docs/code_review_transient.png)
| 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
Section titled “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
Section titled “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
Section titled “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.