Early Access Program

ReSharper C++ 2020.3 EAP: Navigation for Preprocessor Directives, Updates to HLSL Support, and More

The latest ReSharper C++ EAP build includes import completion for incomplete classes, important updates to HLSL support, and allows you to navigate between preprocessor directives. Also, as always, there is something new for Unreal Engine. Read on for the details:

  • Navigation: jump between #define/#undef of the same macro or parts of a conditional preprocessing block.
  • HLSL: control-flow analysis.
  • Unreal Engine: static and const for BlueprintCallable, reminders to regenerate project files.
  • Import completion for incomplete classes.

Download the new build from our website or via the Toolbox App.


Go to Declaration can now be used to quickly jump between matching preprocessor directives. You can navigate between #define and #undef of the same macro inside a single file:

Navigate between #define and #undef

You can also navigate between the directives that form a single conditional preprocessing block:

Navigation in a conditional preprocessing block


We introduced initial HLSL support back in 2020.1. We have been working on it ever since to address more language-specific cases and make the experience with it similar to what you’re used to with C++. In this EAP build, we’ve brought the full power of ReSharper’s control-flow analysis to HLSL.

The control-flow analysis is a powerful code analysis technique that tracks the possible execution paths through the body of any given function. Now all the usual ReSharper C++ inspections that use the control-flow analysis results are available for HLSL: warnings about unreachable code, uninitialized variables, redundant control flow jumps and conditional branches, and so on.

Control-flow analysis in HLSL

To get it to work for HLSL, we’ve also added support for HLSL-specific input modifiers that identify a function argument as an input, an output, or both. For example, now you’ll be warned when an out parameter has nothing assigned to it:

HLSL-specific input modifiers

Unreal Engine

Have you ever seen hints that your BlueprintCallable method can be made static or const and been bothered by how it would affect your blueprint nodes? We’ve tweaked these inspections, so now you can configure the severity for the BlueprintCallable methods separately.

BlueprintCallable function can be const/static

We’ve added more warnings for when you need to regenerate the project files. Now ReSharper C++ will warn you when the Unreal Engine version file cannot be found, or when the engine version you use does not match the version referenced in your game project.

Regenerate the project files

Import completion for incomplete classes

With import completion enabled, the completion list will also include suitable elements from the header files that are not included into the current file. When an import completion item is selected, ReSharper C++ will automatically insert an import directive to include the required header file.

Unfortunately, in previous versions of ReSharper C++, the import completion would not help with one common case – completion of a member inside a class that has been forward-declared but not defined in the current translation unit. In this update, we’ve improved import completion so that members of incomplete classes are suggested as well:

Import completion for incomplete classes

You can enable import completion using the Show import items in basic completion setting in Code Editing | C++ | Code Completion.

That’s all for today! Keep trying out the new features, and don’t miss the changes coming in next week’s EAP.


Your ReSharper C++ team
The Drive to Develop

image description