Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

wandersoncferreira/code-review

Code Reviews in Emacs

wandersoncferreira/code-review.json
{
"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"
}

GPL v3 MELPA Tests

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

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 outdated comments with the right diff hunk context
  • Approve, Reject or Request Changes for your PRs
  • Integrated with forge-topic-view via code-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 sy option to assign yourself to 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:

  • RET on a hunk diff line to add a comment
  • RET on a local comment to edit
  • RET on a previous sent comment to include a reply
  • C-c C-k on a local comment to remove it
  • r s f to enable transient and Set a feedback
  • r 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]!(./docs/forge_support.md).

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.

  • [Github]!(./docs/github.md)
  • [Gitlab]!(./docs/gitlab.md)
  • [Bitbucket]!(./docs/bitbucket.md)

You can access the transient panel by hitting r from any place of the Code Review buffer.

![Transient keybindings]!(./docs/code_review_transient.png)

BindingObjectAction
REThunkAdd Comment
RETcommentAdd Reply
RETlocal comment (not sent to forge yet)Edit local comment
C-c C-klocal commentDelete local comment
C-c C-cComment BufferRegister your local comment
C-c C-kComment BufferCancel your local comment
C-c C-rcommentAdd Reaction
C-c C-ncommentPromote to new issue
C-c C-rpr descriptionAdd Reaction
RETreaction (on emoji symbol)Endorse or Remove Reaction
RETRequest ReviewerRequest 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.