IntelliJ Platform Plugin SDK Help

Rider Plugin Development

Introduction

Rider plugins are generally used to expose the functionality of a ReSharper plugin. Rider uses the IntelliJ Platform somewhat differently than other Platform-based based IDEs. Rider uses the IntelliJ Platform to provide the user interface for a C# and .NET IDE but uses ReSharper to provide the language-specific features.

IntelliJ IDEA Configuration for Rider Plugin Development

Although there is no dedicated Rider SDK, the ReSharper DevGuide addresses the subject of plugins for Rider. The documentation describes the configuration of build.gradle and settings.gradle files to build a Rider plugin using the Gradle project system in IntelliJ IDEA.

Developing Rider Plugins with the IDEA and ReSharper SDKs

Before starting a new Rider plugin project, review the article Writing plugins for ReSharper and Rider. In particular, this article discusses One Template to Rule Them All, a way to quickly get started writing plugins for both Rider and ReSharper.

More background information is available in the Building a .NET IDE with JetBrains Rider article, which includes a high-level description of the Rider Protocol communication process between Rider and ReSharper. The article is a good counterpoint to the ReSharper DevGuide content, which discusses the protocol at the code level.

Including Custom Settings into a Plugin

Rider plugins may introduce their own .DotSettings files with customized ReSharper settings. This is useful e.g. when a plugin brings its own file templates.

For the ReSharper part to pick these settings, the settings files should be available in the plugin JAR file under the path dotnet/Extensions/$backend-plugin-id$/settings, where backend-plugin-id is calculated according to the following rules:

  • if the IntelliJ plugin id (the <id> element of the plugin.xml) includes a dot, then backend-plugin-id is the same as the IntelliJ plugin id;

  • otherwise, the backend-plugin-id is a concatenation of the IntelliJ plugin vendor name (the <vendor> element of the plugin.xml) and the IntelliJ plugin id.

For example, for a plugin with the following plugin.xml contents, the file dotnet/Extensions/org.awesomeplugin/settings/templates.DotSettings would be picked up:

<idea-plugin> <id>org.awesomeplugin</id> <!-- … --> </idea-plugin>

And the following plugin.xml would require to place the file under a path dotnet/Extensions/Jean-Luc Picard.Enterprise/settings/templates.DotSettings:

<idea-plugin> <id>Enterprise</id> <vendor>Jean-Luc Picard</vendor> <!-- … --> </idea-plugin>

Open Source Rider Plugins

When learning new development configurations, it is helpful to have some existing plugins for reference. This list is intended to provide some representative projects.

Last modified: 11 May 2021