Please provide a complete guide to developing a simple Rider plugin
Hello, long-time user of Resharper and Rider here, experienced C#/C++ dev.
Quite a number of people in our team are slowly shifting towards Rider from Visual Studio. As we do have quite a handy internal plugin for Visual Studio, I thought about rewriting it to do the same things in Rider. However, upon searching for guidance and reading through endless articles, it seems like it would be a fool's errand.
The things I've found:
- when I start reading a documentation for Rider plugin development, it will very soon (after one or two hyperlinks that promise more information) suddenly shift into Resharper plugin development - or even better - IntelliJ plugin development. Now I understand that some (or most?) of your products share a common ground and maybe up to a point these terms are interchangeable, but for me as a reader outside of your company, it makes no sense. I'm not interested in IntelliJ plugin development, nor Resharper plugin development (what does that mean? Developing a plugin for a Visual Studio plugin?). I came here to try and develop a plugin for your Rider IDE, not your IntelliJ IDE. Please provide a guide for Rider plugin development, start to finish. It can be a simple one but doing some slightly advanced steps would be welcome (analyzing project structure etc.). If some steps (or all) are the same for both of these, clearly mark them so. Or better yet, outline development step by step for Rider IDE and IntelliJ IDE separately - and if some of these steps are the same, then duplicate them. Don't just tell me that it's 'IntelliJ development but somewhat different' and then force me to read IntelliJ documentation, trying to find out what I should actually do differently when I'm targeting Rider.
- existing guide for IntelliJ plugin development (of which the Rider development is a part, so maybe it's related?) starts with forcing me to choose one of three approaches to developing the plugin when I have no idea which one of these is best for my use-case or least-obnoxious to work with. I understand that for some people, setting up a whole build environment for a plugin development is fun and/or easy. But what should I choose? Start from a template, start with Gradle (while having no experience with the technology) or start with DevKit (while being told it's obsolete?). Will all of these work for Rider plugin development, or are they restricted to IntelliJ or Resharper? For a guide, pick one - the least effort one - and walk me step by step through it. Don't make me set up build processes when I'm just trying to start with the development and seeing what the plugin can actually do inside Rider. Until I'm sure that the plugin does what I plan, I'm not interested in automating its build process or even publishing it to others!
- When someone asks in these pages about help for plugin development, most of the time your answers point to one blog article, to one (sparse) wiki page, or to URLs which are no longer valid. Please provide one landing page for Rider plugin development that provides the step-by-step guide, answers to common questions and links to more advanced issues. When you point to 5 or 6 pages, not only do you place the burden on the developer who came here with the intention of developing a plugin for your IDE (potentially releasing it for others, hopefully making the platform better for everyone); you're making it difficult for yourself because now you should maintain 5 or 6 pages instead of one. Currently google finds this https://plugins.jetbrains.com/docs/intellij/rider.html page which is not a guide.
- Do not point me (or other developers) to join your internal Slack channels. I don't want to have to ask people questions about every little thing - all of those thing should be explained well in your documentation. Reaching out to actual devs, QA or support of the product should be the last ditch effort when I'm trying to develop some very advanced things or bend your engine in ways it was not designed to do. I think that your devs also don't want to answer the same questions hundreds of times.
- With that said, do not primarily point me towards existing repositories of other Rider plugins. While I'm sure that these can be a great source of learning when people want to mimic some part of the existing plugin (and I applaud these developers for creating such complex plugins when I struggle with getting a template going!), I can not read through the whole repository for Rider Unity just to find out which bits of the repository are responsible for setting up a menu item. Repositories are not guides, definitely not for someone who's trying to wet their feet in Rider plugin development. If you really want to use them as part of a guide, point us to a particular bit! Like 'you should put your frontend code in such and such place, you can structure it in a such and such way to make it easier to maintain and reuse - see this particular bit of the Unity Rider repo for a great example on how to structure it' or something. Sorry but I'm not digging through a separate codebase (or multiple!) just to find the 4 basic bits I should need for getting started with a plugin for your IDE.
- Differentiating between frontend and backend code in your documentation is not clear. If I'm writing a plugin that will try to adjust a C# solution (e.g. add a new project, generate some code etc.), what should I do? Should I put my logic for adjusting the solution into specific location and the code for frontend (actually, what code? Some sort of XAML? Is there an explainer on how to do the GUI for plugins?) should be put elsewhere? Should I follow some practices like MVVM or MVC? The potential new guide for Rider plugin development should take me through these points step by step, explaining how to structure the project, how to add a new menu item with button that fires an action without opening a window etc.
- Most of the stuff I could find in your guides seemed geared towards writing what I'll take the liberty of calling 'analyzers' (probably a wrong name) - finding code issues, suggesting replacements etc. Nothing I found was geared towards adjusting C# solutions/projects, their references etc. Maybe it's my searching skill, maybe it's naming conventions or maybe it's just plain not covered by your documentation.
My personal experience was that I tried (twice) to get your template going. The first time it threw so many errors I dumped the thing - the plugin just would not compile. The second time I managed to get it to build (with no adjustments to code) but not actually show up in the Rider instance. I felt like wherever I searched, I couldn't find anything relevant for specifically Rider development. So I gave up.
These are my two cents. I'd very much appreciate if you could put together a step-by-step guide for Rider plugin development which would take the place of (frankly quite tragic) https://plugins.jetbrains.com/docs/intellij/rider.html. I know that writing documentation is often time-consuming and (for some people) difficult. But you guys and gals are the ones with the actual knowledge of your product, so share it with people who want to build something on top of your great IDE! I know that I would be very grateful and from what I saw on these forums, I would not be the only one. I'm still hopeful I will eventually be able to rewrite our VS plugin into a Rider plugin :)
Please sign in to leave a comment.
Any response would be appreciated. Is anything like this planned at all? Are you considering improving the documentation?
Hi TheGeorge!
Sorry for the delay.
We would like to improve our documentation. Unfortunately, I cannot give you any estimations of when it will be planned due to the lack of resources.
The best we have for now is this guide and a Slack channel where you can ask literally everything about plugins. Our team will be glad to help you there anytime.
Hi Alexandra, thank you for answering.
Unfortunately that's the same guide you guys post every time someone asks for help with plugins for Rider and it frankly is not much help. I can also only reiterate that I'm not interested in joining your Slack channel when there should be a documentation I could read through instead. I don't want to have to ask for every little thing when I'm not even sure where to start ¯\_(ツ)_/¯
This is really the one and only major issue I currently have with Rider (poor extensibility / documentation for plugins) where VS is handling the same stuff better.
How short-staffed are you guys? Could you not spare one developer and one content writer / support staff for a week or two so that they write a plugin and document the process at the same time? You can even make it a junior developer so that they can't build off of 'internal knowledge of IntelliJ / Rider / whatever codebases'. If it's so simple to write a plugin, one week should be enough. And if it's something you'd like to do (as you stated) then it should be okay to 'waste' a week of work of two people for something that can help thousands others. Then once you have that documentation, you can spend however much time you want / can afford spending on this polishing it...
Hi TheGeorge!
I'm sorry to disappoint you, but this is not in our plans for the nearest future. All I can do right now is create a feature request for you so you can follow it and be notified about any progress.
Thank you for understanding.
If following the Getting Started guide, the following will work to for a plugin for Rider (2021.3.3) , this is in the build.gradle file:
Set intellij version and type to RD
Set Run Ide to the path for Rider:
That should be enough to follow the getting started guide and get a dialog opening in rider, as per the the guide. Unfortunately I have no more idea then you how the Rider Backend (Resharper) and Rider Frontend (Idea) are supposed to be used, and where you find what. About the only information I found was this article:
It is somewhat dated but the github links work and will generate a a skeleton plugin that includes samples.
I have exacly the same experiences with getting started with rider plugins development.
Hello, I would like an invite to the plugin dev Slack channel, please. I've been trying for a while to get a plugin going, but I keep hitting roadblocks and errors. Alexandra Guk
Thanks!
Gaminggoodness512, thank you for your message. You'll get an invitation shortly.
Hi Maria, may I also get an invitation to the Slack channel? I am trying to build a Rider plugin to implement GoTo Implementation from proto services to custom C# handlers and got stuck trying to integrate the frontend part (Jetbrains proto plugin) with Resharper backend.
Erdalsivri, sure, I think you will be added to the Slack channel soon.
Maria Pleskunina
Hi Maria, please also add me to your slack channel
Hi Quantum_Developer!
I've created an invitation; you should receive it soon.
Maria Pleskunina
Hi Maria, could you please also send me an invitation?
Roman Stefanov sure, I asked my colleagues to add you to the channel.
Maria Pleskunina , can you please send me an invitation to the slack channel? Thanks
B3gan Create a new support request with your personal email (in Help | Contact Support), we will invite you soon.
B3gan Please check the email sent to you for joining the channel.
Similar experience,my extension is very simple. Had no problem with vscode. I'll take an invite to the slack channel so i can ask how to do what i want
I'll just leave these links here
- Rider sample plugin - https://github.com/JetBrains/resharper-rider-plugin;
- An article about Rider Frontend plugin development - https://blog.jetbrains.com/dotnet/2017/02/07/rider-front-end-plugin-development/ (was already mentioned above);
- Creating Your First Plugin - http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html.