Radicle IDE Plugins (VS Code + Jetbrains IDE): July - September 2023

UPDATE:

No more nail-biting agony !! The progress update for the Radicle IDE plugins that was funded by this Grant is finally here! :page_with_curl:

Jetbrains IDE Plugin

The biggest milestone for the Jetbrains IDE plugin was that the project’s development has successfully taken the first steps in moving from GitHub → Radicle! :tada:

GitHub → Radicle migration

We split the migration into 3 phases:

  1. Use Radicle for git hosting and use Radicle Patches (RPs) instead of GitHub Pull Requests (PRs).
  2. Migrate Issues from GitHub → Radicle
  3. Migrate CI away from GitHub Actions (or use GitHub Actions with Radicle)

For (1), a new, multi-delegate project was created and already the team is using Radicle Patches as its main workflow!

For (2), we have already built a tool that facilitates the issue migration, however we are still missing a planning board (we are currently relying on GitHub projects) and are looking for alternatives in this space.

For (3), we are still a little blocked due to the lack of CI integrations in Radicle yet and especially due to the multi-platform CI environment we are currently using in GitHub Actions (windows, macOS, linux). For this reason, we are still having to use GitHub PRs - in parallel with Radicle Patches.

New features

Not 1, not 2, not 3… but 6(!! :tada:) releases shipped during the last 3 months, allowing us to already do some work with Patches and Issues inside the IDE:

Reviewing a Radicle Patch for the Radicle Jetbrains Plugin itself in IntelliJ - Left: list of changes, top: activity view, bottom: reviewing changed file

In more detail, here are the release highlights:

v0.6.1

A small patch release with a couple of quality of life improvements:

  • Adds a refresh button for patches and issues #294
  • Adds support for aliases in radicle identities in #271
  • Refactor issue & patch filters in #281

v0.6.2

The hightlight in this patch release was fixing latest heartwood breaking changes, as well as the Issue Overview page:

New features:

  • Issue overview panel, in 126
  • Adapt to new Radicle branding icons, in 269

Fixes:

  • Fix broken api requests in #323
  • Fix rad self parsing in #306
  • Add alias field in the settings in #312
  • Wait for data before calling the filter method on issues / patches in 299
  • Remove classes from Utils and move to separate files, in 317

v0.7.0

A small, first release in the 0.7.z stream of releases that introduces support for 2023.2 IntelliJ version and brings the first bit of additional functionality with regards to patches: changing labels and status of Patches.

  • Allows editing the status and labels of a patch proposal, in #343
  • Support IDEA 2023.2, in #329

v0.7.1

  • You can now create new Radicle Issues from within your IDE ! :tada: , in #343
  • You can also add reactions :+1:t3: :tada: :rocket: to comments (for both Patches and Issues !) :wink: , in #270
  • The “Refresh” button would reset filters in the Issue listing. @JChrist (politely) explained that it shouldn’t, in #349
  • The Radicle Tool Window Icon size was kind of… large. A short diet later, it’s now back to normal! , in #345.

v0.7.2

  • Checkout patches directly from the IDE! A new check out button, allows you to check out the patch branch, so you can work directly with the code in your working copy, in #352
  • You can now not only add reactions to patches / issues, but you can also - wait for it - remove them… :exploding_head: No more stress when you accidentally misclick the embarassing wrong icon, in #326.
  • The issue descriptions and comments were all having a bit of a bad hair day, so it was time to help them out a little by wrapping the text. We also fixed the order of the fields inside publish dialog to match the CLI order! - in #335

v0.7.3

  • Synchronizing your Radicle project with the network is something that the radicle-node automagically takes care of you behind the scenes. But not always (as the node is sometimes not running, or offline, etc.) That’s why it’s important to allow the user to manually sync their project! :on:
  • Let’s be honest, markdown is much prettier when rendered! We weren’t correctly rendering markdown, so this PR adds markdown support in Radicle Issue and Patch description and comments! :star_struck: in #335
  • Small fix when we didn’t show the radicle tool window after the user first published a project.
  • Few (successful) projects have less than 10 issues or patches. Our test projects did though(!!), so we were previously only loading the latest 10… That’s now fixed, so the plugin is ready for some real-world projects! :one: :zero:
  • It’s now possible to add arbitrary Decentralized Identifiers (DIDs) as assignees to an issue (and not just assign an issue to delegates) :white_check_mark:
  • Improved the emoji reaction button look and feel, so it should hopefully be easier to add reactions now! :ok_hand:

Upcoming work

Our next release (v1.0) will deliver the last missing features that our team is struggling with, as we are dogfooding on the plugin itself (and Radicle), in order to write the next plugin versions. With a lot of the work on issues already in place, this release will focus primarily on missing functionality around working with Patches entirely inside IntelliJ and other Jetbrains IDEs. For more details, please refer to the github milestone.

Visual Studio Code (VS Code) Extension

Starting the quarter, the VS Code extension only partially supported Heartwood. Our first and foremost target was to migrate all existing functionality to Heartwood.

This included a bunch of changes related to identity (and aliases) and the rad auth flow inside the IDE, which is now super streamlined for smooth user onboarding.

With those out of the way, we placed a lot of focus on usability and user onboarding, so that the features we build into the VS code extension are here to stay - hoping to avoid further UX improvement iterations, which have been necessary in the Jetbrains IDE plugin.

New Features

Smaller number of releases here, but, they are packed with new features!! :gift:

v0.2.2

  • commands: replace pre-heartwood, now deprecated rad pull/push commands with fetch/announce across multiple UI locations (#42)
  • update from old (seedling) to new (alien) Radicle logo and branding (#56)
  • auth: fix creation of new Radicle identity which now requires a mandatory alias (#67)

v0.3.0

This feature-packed version introduces quite a few enhancements and fixes, bringing Radicle Patches inside VS Code for the first time! :mag_right:

:sparkles: Highlights

  • New Patches view

:rocket: Enhancements

  • patches: show new view in the sidebar listing all Radicle Patches, including a tooltip with more info on hover and the ability to easily copy the Patch identifier (#43)
  • patches: each item in the list of Radicle Patches can be expanded to show a sub-list of files changed. (#46)
    • If multiple items have the same filename, their directory URL will be additionally shown as the item’s description.
    • On hover, a tooltip shows the relative URL of the file in the repo, and the kind of change it had.
    • A left click on a filechange item will open a diff between the original and patched file versions.
    • A right-click allows opening either the original or changed file versions (as applicable) without the diffing visual noise.
  • commands: new VS Code command to refresh the list of Radicle Patches (#43)
  • commands: new VS Code command to collapse all items in the list of Radicle Patches (#46)
  • ux: convert existing flows with series of user input steps into a bespoke, cohesive experience indicating total step count and completion progress, allow editing of already submitted answers of the same flow, as well reveal-toggling of typed-in passwords, among other improvements (#67)
  • auth: additionally show the alias associated with a Radicle identitifier whenever showing the latter (#67)

:shield: Security Fixes

  • auth: prevent potential leaking of RAD_PASSPHRASE into the JavaScript console (#70)

:adhesive_bandage: Fixes

  • auth: don’t allow the user to submit an empty string as an alias when creating a new radicle identity (#67)
  • auth: warn the user that an empty passphrase will result in an unencrypted Radicle key when creating a new radicle identity (#67)
  • auth: don’t ask users with empty-passphrase-identities to enter their (blank) passphrase each time an auth-guarded Radicle command is executed (#71)
  • auth: ask the user to re-enter their chosen passphrase when creating a new radicle identity to protect agains typos and align with Radicle CLI’s UX (#67)
  • auth: show “created new” instead of “unlocked” in the notification and logs when creating a new radicle identity (#67)
  • auth: cancel the whole flow, warn and notify user when pressing escape at any step of the flow (previously only applied for the passphrase question) when user is asked for his input in order to create a new radicle identity (#67)
  • httpd: show buttons opening Output or the related configuration option in Settings in the event of Fetch Error (#39)

:nail_care: Refactors

  • ux: wrap VS Code’s lackluster InputBox API resulting in procedural, verbose and brittle client code, with a new custom-built sensible wrapper (#67)
  • httpd: design and implement architecture for idiomatic code interacting with the Radicle HTTP API (#39)

:open_book: Documentation

  • readme: use up-to-date screenshots for Integrated Authentication features (#67)

Upcoming work

Our next release (v0.4) aims to complete the required functionality around Patches, so it is possible to work entirely with Radicle inside VS Code, without the need to switch back and forth between CLI, broswer and IDE. You can find more details on the GitHub milestone (for now). The next goal is to introduce support for Radicle Issues in v0.5, so we can also migrate our issues to Radicle!

Conclusion

The releases of the Radicle Jetbrains IDE Plugin and the Radicle VS Code Extension conclude the work undertaken as part of this grant. We look forward to continuing the work on the Radicle IDE plugins soon!

1 Like