Rider for Unreal feedback

I've been using Rider for Unreal for the past 3 weeks, and overall I'm very happy with it. I took notes as I learned, so here's a feedback dump. I can make tickets for relevants points if needed.

For context, I've been using VS and R# for over 10 years, as well as some Rider for Unity. I have quite a bit of C++ and some Resharper++ experience, but I'm new to Unreal.

 

  • Hooking the debugger to an already-running editor is much less friendly than in Unity, and last I tried it didn't actually work (breakpoints didn't trigger), I had to kill UE and launch it from Rider... but then I lost hot-reload :(
  • Is there any difference between opening the .uproject or the .sln? or opening from Unreal via File > Open Rider (ie auto-establishes a connection to the editor)?
  • Having the Engine project in the solution can make "go to everything" very verbose! I'd love to be able to filter only my game project(s), the way "Find in Files" does.
  • Live templates not always available: eg UCLASS, I've seen it work a while ago, but now it just won't show in the autocomplete list. I  know I use it in the proper context (top level of a .h file), because if I remove "in Unreal Engine solutions" from its Availability, it now shows and works... so what exactly defines that the current solution is an Unreal one? (I tried both the .uproject and the .sln, doesn't work either way.)
    BTW it might be better UX if those templates appeared in a different category altogether, eg "C++ Unreal".
  • As a side-note I'd like to filter the autocomplete dropdown to only show live templates, if that feature exists...

 

Not specific to Unreal, but overall C++ support: I'm missing many refactorings from C#!

  • Select a block of code > Extract method
  • Select a variable > Move to outer scope
  • should also work with variables declared inside an if statement:
    if (auto Component = GetComponentByClass(USphereComponent::StaticClass()))
    {
    DoSomething(Component);
    }
  • ... and such if statements should also work with the "Invert `if` statement" refactoring.
  • Overriding methods is harder than it should be. In C# I start typing "override" and halfway through I can just tab and see a list of candidate methods, start typing their name, select one, enter, done.
    In C++ I have to go through "Generate Code" > "Overriding Members", and then get this cumbersome window. I can start typing the method name there, but it doesn't actually filter the list. Basically no way to finish without using the mouse.
    Override could also auto-create an implementation stub. And, follow the same public:/protected: specifiers as the parent class.
  • Also, some UE methods don't appear in that override list, eg GetLifetimeReplicatedProps.
  • Also, the menu "Code" > "Override Methods" plain doesn't do anything.
  • On a header file method, using "Generate definition" sometimes creates an inline definition for no discernable reason. I don't want an inline definition; if the connection to the .cpp is lost for some reason, I'd like to be notified instead.
    Also, there's an explicit "Generate inline definition" option, but no explicit "Generate external definition", or whatever the name should be.

 

Overall the integration of Unreal-specific idioms is awesome! I want more :)

  • Subscribing to UE delegates is a PITA compared to C#! It would be great if I could just write eg 
    Actor->OnClicked.AddDynamic()
    and inside the parentheses I would get a "declare new method" option, that would fetch the proper signature, add it to the header, and provide a .cpp stub, all in one go.
  • The TEXT macro should auto-insert parentheses and quotes.
  • The UE_LOG macro should auto-insert TEXT(""), as well as LogTemp, Log as default values.
  • ... I'm sure there are many more opportunities.
  • The UE macros (reflection specifiers etc) are a bit of a black box, I understand they're not "real" C++ (preprocessor step or sth), but since you already show inline documentation for some of them, I would expect fuller support, eg "go to definition" support (even if it just goes to a documentation page), inline doc and "method" signature for UPROPERTY, etc.

 

Lastly, is there any plan to bring the UE integration features to Resharper++? the same way that Unity support is available both in Rider and R#.

3 comments
Comment actions Permalink
  • On a header file method, using "Generate definition" sometimes creates an inline definition for no discernable reason. I don't want an inline definition; if the connection to the .cpp is lost for some reason, I'd like to be notified instead.
    Also, there's an explicit "Generate inline definition" option, but no explicit "Generate external definition", or whatever the name should be.

I find this one particularly irritating, and my upvote is for this feedback point.

0
Comment actions Permalink

Agree with everything, specially "The UE_LOG macro should auto-insert TEXT(""), as well as LogTemp, Log as default values."

I'm really missing this feature, it's very annoying. 

Please Rider Team, add more autocomplete for UE5!

2
Comment actions Permalink

Hello Benoit, Gael, Jonathan,

Thank you for your time spent leaving the feedback.

Can't hit breakpoints while attached to UE5 instance from Rider
It is a known issue with attaching to the running UE5 instance. We are aware of it and have the following issues on our tracker for investigation: 12. Visual Studio behaves similar in this scenario, so we suspect this is not Rider issue but Unreal Engine.

As a workaround, please try applying little code change (in Rider) while attached to the UE instance and invoke live coding Ctrl+Alt+F11. Once Live Coding succeeds, the breakpoints should be able to be hit.

Difference between an opening project via .uproject or .sln file
While working with a project via .uproject, Rider shows and works with a project model in the same way as it does the Unreal Engine itself. The most noticeable difference is that you are not required to generate/re-generate visual studio project files.

Go to everything shows Unreal Engine symbols
Would you mind trying to enable the File | Settings | Languages & Frameworks | C++ | Unreal Engine | Treat Unreal Engine symbols as non-project in Search Everywhere/Go To option. Please let me know if it doesn't help.

Live Templates issue
Would you mind ensuring that the class where you experience this issue has "{headerFileName}.generated.h" file included? If there is no such, type it manually. That is what defines, should the Unreal live templates be available in the currently edited file.

Autocomplete filter
We have this feature request on our tracker.

Extract to method
It should work. Please try selecting the code, calling the context menu, selecting Refactor this. There should be Extract method refactoring available. Please let me know if it doesn't work for you. (see the screenshot attached)

Move to outer scope (+in if statement)
I created this feature request.

Invert if statement
Do you mean you want a refactoring that will negate the whole if expression by adding !({statement}) to the statement? To be on the same page, would you mind sharing sample code before and after such refactoring applying?

Overriding functions
It works in Rider. Please try starting to type the name of the function you want to override, ensure the required function is focused and press Tab or Enter. (see the screenshot)

Some UE methods don't appear in the overriding list
You can override UE methods in the same way as your custom virtual functions (previous point). GetLifeTimeReplicatedProps method is there and also available to be overridden via Override dialog. (see the screenshots). If this is not the same for you, would you mind sharing Rider full-screen screenshot that demonstrates the issue?

Code | Override methods does nothing
This issue is already fixed in Rider EAP.

Generate definition in creates definition in header instead of cpp
This is a known issue.
Would you mind trying the following options as possible workarounds?

  • Open the .cpp file (where you want to generate a definition) that contains the definitions from the related header file. Cut the sample function definition (for about 5 seconds) and paste it back. Then try generating a definition for the problematic function again;
  • Focus the .cpp file where you want to generate a definition. Press Ctrl+Enter->Generate->Definitions;

Regarding Generate external definition action. There is no need for such action. We have the Generate definition action that normally should generate definition in .cpp file and the Generate inline definition action that generated definition inline.

Subscribing to UE delegates. To generate function
Please try typing the unexisted function name in AddDynamic(this, &ClassName::FooName) and Rider would suggest generating it. (see the screenshot)

TEXT() to add quotes automatically
I created this issue on or tracker. As a workaround, I suggest creating a custom live template as shown on the screenshot attached to the issue, so you can type utext and complete it to TEXT("{caret}").

Simplify use of UE_LOG macro
We have this related issue on our tracker. Similarly to the previous point, you can create a custom live template for that purpose. (UE_LOG (LogTemp, Log, TEXT("$END$"));)

Navigation to UE macros specifiers
We have this issue on our tracker and hope to fix it in future releases.

UE integration to ReSharper++
We have no plans to introduce an Unreal extension for ReSharper. You already can work with an Unreal Engine project in VS with ReSharper. Would you mind elaborating on what kind of integration do you mean?

Hope I didn't miss any action point. We would appreciate it if you could upvote the issues I mentioned above to demonstrate the additional interest.
I will be waiting for your reply. Should you have any other questions or feedback, please let me know.

Have a nice day!

0

Please sign in to leave a comment.