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 :)