Plugin build process for Rider and other IDEA platforms


Hi Team,

Looking to extend a plugin to include support Rider with the need to install possible missing NuGet dependencies.I have this plugin working in Rider and most of the other IDEs (that support working with TypeScript) and looking to incorporate a "backend" Rider integration to package up in the hopes that I can automate the installing of a custom NuGet package when certain actions are taken. This mirrors functionality with have for Kotlin/Java with Maven/Gradle.

I'm currently stuck with the gradle build process trying to pull in the required dependencies so that I can create my own action extension `RiderAnAction` class. Following this I looked at the `resharper-rider-plugin` and created a new project based on that template to try to figure out what I might need to add to my own project.

Changing my project to use `type.set("RD")` allows me to reference both `AnAction` and `RiderAnAction` but my existing `intelli.plugins.set` unable to reference "maven", "java" or "PythonCore" like I previously did, required for other functionality.

Wanting to avoid needing to maintain multiple plugins with shared functionality I was hoping to incorporate this in a single package.

Is there any way to support the combination of this functionality in a single plugin or is it required that two separate plugins (different names?) to support Rider + Nuget integration as well as other platform package management like Java/Kotlin with Maven/Gradle (and Python)?

Any help/advice would be appreciated, thanks!

Official comment

Unfortunately, this isn't going to be terribly straight forward. Not all IDEs and plugins are compatible, so it's hard to build a single plugin that can work with all features of all IDEs. It depends what features are required - plugins must depend on various modules, such as com.intellij.modules.xml and com.intellij.modules.vcs, which are included in all IDEs and others are per-product, or come from plugins, such as, which comes from the "Java" plugin. If you only need to use features in the base modules, then you can run on all IDEs. If you need more modules, then you can either include them via plugin (including "Javascript" for example) and that can work on all IDEs that support that plugin, including Rider. But if you need functionality from conflicting plugins, such as Java and Rider, then it can't be done in a single plugin module.

It might be possible to structure a gradle project into various sub-projects. Core functionality could live in the main module, but then support for per-IDE modules can live in sub-projects. Each sub-project could then reference a different IDE SDK. It will require some maintenance to make sure that all versions are correct (probably a lot easier with released versions rather than EAP versions).

Thanks Matt Ellis, appreciate your input and going to go with separate repositories + plugin build process with maybe a shared jar for code that is shared and has no platform specific dependencies.


Please sign in to leave a comment.