JetBrains: a more modern review UI (look at Jetpack Compose / Jewel) #6

Closed
opened 2026-11-12 16:06:41 +01:00 by thatrichan · 1 comment
Owner

The in-IDE review (Review in IDE / Revue: Review Pull Request) works, and after 2d86eb8 it's fast, but it still looks like a Swing form next to the IDE's own GitHub review or GitHub itself. Make it feel modern: as good as GitHub's review, or better.

Reference

Another plugin, also called Revue (not ours; Bitbucket only), is on the Marketplace: https://plugins.jetbrains.com/plugin/35639-revue (source: https://gitlab.com/mkisd/revue). Its interface is built on Jetpack Compose: a pull request browser with search, a rich overview (header, status and branch badges, per-file diff stats, commits, a comment timeline), and inline comment threads by the code, all in one tool window. Worth looking at for how it's put together and how it gets past the Plugin Verifier.

What to look into

  • Compose / Jewel for the review's panels (the tool window's pull request page, the Submit popup, the comment cards), instead of hand-built Swing. Find out:
    • which Compose and Jewel APIs a plugin may use on 2026.3 without the Plugin Verifier flagging experimental or internal API (our failureLevel is ALL), and whether the other Revue gets there (bundled module, its own Compose, verifier exceptions)
    • whether Compose content can sit inside diff editors as inlays, or only in tool windows and popups
  • A review tool window beside the diff: the files as a tree with comment counts and a "viewed" checkbox each, the conversation timeline, and Submit always in sight, as on GitHub's Files changed tab.
  • Comment cards: emoji reactions, suggested changes (suggestion blocks) shown as a diff with Apply, @-mentions, and a Markdown preview while writing.
  • The pull request page in the tool window: badges for status, checks and branches, per-file diff stats, avatars in the timeline.

Done when

  • Reviewing looks and feels at least on par with GitHub's review and the IDE's own GitHub plugin, in light and dark themes
  • ./gradlew verifyPlugin still passes at failureLevel ALL
The in-IDE review (Review in IDE / Revue: Review Pull Request) works, and after 2d86eb8 it's fast, but it still looks like a Swing form next to the IDE's own GitHub review or GitHub itself. Make it feel modern: as good as GitHub's review, or better. ## Reference Another plugin, also called **Revue** (not ours; Bitbucket only), is on the Marketplace: https://plugins.jetbrains.com/plugin/35639-revue (source: https://gitlab.com/mkisd/revue). Its interface is built on **Jetpack Compose**: a pull request browser with search, a rich overview (header, status and branch badges, per-file diff stats, commits, a comment timeline), and inline comment threads by the code, all in one tool window. Worth looking at for how it's put together and how it gets past the Plugin Verifier. ## What to look into - **Compose / Jewel** for the review's panels (the tool window's pull request page, the Submit popup, the comment cards), instead of hand-built Swing. Find out: - which Compose and Jewel APIs a plugin may use on 2026.3 without the Plugin Verifier flagging experimental or internal API (our `failureLevel` is `ALL`), and whether the other Revue gets there (bundled module, its own Compose, verifier exceptions) - whether Compose content can sit inside diff editors as inlays, or only in tool windows and popups - **A review tool window** beside the diff: the files as a tree with comment counts and a "viewed" checkbox each, the conversation timeline, and Submit always in sight, as on GitHub's Files changed tab. - **Comment cards**: emoji reactions, suggested changes (`suggestion` blocks) shown as a diff with Apply, @-mentions, and a Markdown preview while writing. - **The pull request page** in the tool window: badges for status, checks and branches, per-file diff stats, avatars in the timeline. ## Done when - Reviewing looks and feels at least on par with GitHub's review and the IDE's own GitHub plugin, in light and dark themes - `./gradlew verifyPlugin` still passes at failureLevel ALL
Author
Owner

Done in jetbrains 1.2.0 (release run started from 5579b65). The whole plugin is Compose/Jewel now, not only the review.

Spike: Compose and Jewel pass verifyPlugin at failureLevel ALL through the bundled Compose UI plugin (composeUI(), <module name="intellij.platform.compose"/>), with no verifier exceptions. Jewel's Markdown and Tooltip are experimental API, so the plugin has its own Markdown renderer (MarkdownBlocks.kt). Compose works inside diff editor inlays (EditorEmbeddedComponentManager).

What changed:

  • Comment cards (ReviewCards.kt, ReviewUi.kt):
    • Markdown, @-mentions, Write/Preview.
    • Suggested changes shown as a diff with Apply to your copy, and Suggest a change, edited like code (Tab / Shift+Tab / Enter / Backspace keep the file's indent, code font).
    • ⌘/Ctrl+B, I, E; keys in a card stay in it.
    • A new comment shows at once (Saving…).
    • Drag the gutter's + over lines.
  • Revue Review tool window (ReviewToolWindow.kt):
    • Files as a tree with icons, M/A/D/R colours and open-conversation counts.
    • Conversations (unresolved first), with Submit always in sight.
    • Follows the file shown in the diff.
    • With no review open, it offers your branch's pull request.
    • Viewed checkboxes and Mark Viewed in the diff, via Revue 0.43.2 (thatrichan/revue#78).
  • Revue Companion tool window and Finish your review redrawn the same way:
    • The pull request list.
    • Each pull request's page (Info, Files, Conversation, Slack, Stack).
    • Badges, avatars and per-file stats.
    • The comments a review will publish.
  • Testing:
    • A fake revue with test pull requests (jetbrains/fake-revue).
    • Headless card tests.
    • A sandbox WebStorm the UI tests walk through a whole review, with screenshots (jetbrains/README.md → Testing).

Left over, in #8 (walk coverage, small glitches) and #7 (headless Docker runs). Reactions and the full @-mention list wait on thatrichan/revue#79.

Done in jetbrains **1.2.0** (release run started from `5579b65`). The whole plugin is Compose/Jewel now, not only the review. **Spike:** Compose and Jewel pass `verifyPlugin` at failureLevel ALL through the bundled Compose UI plugin (`composeUI()`, `<module name="intellij.platform.compose"/>`), with no verifier exceptions. Jewel's Markdown and Tooltip are experimental API, so the plugin has its own Markdown renderer (`MarkdownBlocks.kt`). Compose works inside diff editor inlays (`EditorEmbeddedComponentManager`). **What changed:** - **Comment cards** (`ReviewCards.kt`, `ReviewUi.kt`): - Markdown, @-mentions, Write/Preview. - Suggested changes shown as a diff with **Apply to your copy**, and **Suggest a change**, edited like code (Tab / Shift+Tab / Enter / Backspace keep the file's indent, code font). - ⌘/Ctrl+B, I, E; keys in a card stay in it. - A new comment shows at once (Saving…). - Drag the gutter's **+** over lines. - **Revue Review tool window** (`ReviewToolWindow.kt`): - Files as a tree with icons, M/A/D/R colours and open-conversation counts. - Conversations (unresolved first), with Submit always in sight. - Follows the file shown in the diff. - With no review open, it offers your branch's pull request. - Viewed checkboxes and **Mark Viewed** in the diff, via Revue 0.43.2 (thatrichan/revue#78). - **Revue Companion tool window and Finish your review** redrawn the same way: - The pull request list. - Each pull request's page (Info, Files, Conversation, Slack, Stack). - Badges, avatars and per-file stats. - The comments a review will publish. - **Testing:** - A fake `revue` with test pull requests (`jetbrains/fake-revue`). - Headless card tests. - A sandbox WebStorm the UI tests walk through a whole review, with screenshots (`jetbrains/README.md` → Testing). **Left over**, in #8 (walk coverage, small glitches) and #7 (headless Docker runs). Reactions and the full @-mention list wait on thatrichan/revue#79.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
thatrichan/revue-companion#6
No description provided.