Vorschau auf Makroersetzungen

Wenn Sie den Mauszeiger auf ein Makro bewegen, wird jetzt im Tooltip eine Vorschau auf die Makroerweiterung inkl. vollständiger Syntaxhervorhebung und korrekter Codeformatierung angezeigt. Die Kontextaktion Substitute macro call zum Erweitern direkt im Editor steht Ihnen weiterhin zur Verfügung, aber die Sofortvorschau bietet eine weitere Erleichterung bei der Arbeit mit Makros.

Das Popup Quick Documentation (Strg+Umschalt+F1) ermöglicht das Anklicken einer beliebigen Entität in der Ersetzungsvorschau, um die dazugehörige Dokumentation anzuzeigen. Wenn die Makroerweiterung einen unbekannten Bezeichner enthält, wird dieser sowohl im Tooltip als auch im Quick Documentation-Popup hervorgehoben, damit Sie Probleme leichter erkennen können.

C++20-Module

In ReSharper C++ 2022.3 haben wir eine grundlegende Unterstützung für C++20-Module eingeführt. In diesem Update haben wir die Implementierung optimiert, um mehr Sonderfälle zu berücksichtigen und die Verwendung in realen Projekten zu erleichtern. Darüber hinaus erweitert die neue Version die Liste der C++-Features in ReSharper, die Sie beim Schreiben von modularisiertem Code unterstützen.

Find usages findet jetzt alle Stellen, an denen ein bestimmtes Modul importiert wird.

Das Rename-Refactoring hilft Ihnen beim sicheren Umbenennen von Modulen und Modulpartitionen, wobei alle relevanten Deklarationen und Importe in Ihrem Code aktualisiert werden.

Die Code-Completion bietet eine verbesserte Unterstützung für die C++20-Modulsyntax. Wenn Sie import eingeben, werden bekannte Modulnamen vorgeschlagen, und die Completion schlägt an Stellen, wo dies zulässig ist, modulbezogene Schlüsselwörter vor.

Auch die Programmierhilfen wurden an mehreren Stellen angepasst, um C++20-Module zu unterstützen. Der Codeformatierer und die Funktion Rearrange code können jetzt mit Exportblöcken und exportierten Entitäten umgehen. Um die Anordnung der Codeelemente zu ändern, drücken Sie Strg+Umschalt+Alt, während die Einfügemarke auf dem zu verschiebenden Codeelement liegt oder ein Codebereich ausgewählt ist, und drücken Sie dann die entsprechende Pfeiltaste.

C++23-Unterstützung

Das ISO-Standardkomitee für C++ hat vor kurzem die technische Arbeit an C++23 abgeschlossen. Viele C++23-Neuerungen sind bereits in den wichtigsten Compilern verfügbar. ReSharper C++ 2023.1 hilft Ihnen bei Ihren ersten Schritten mit diesen neuen Sprachmerkmalen.

Die Ableitung von this ist eine wichtige Neuerung in C++23, mit der auch eine neue Methode zum Spezifizieren von Memberfunktionen einhergeht. Sie können den Objektparameter jetzt mit dem Schlüsselwort this explizit angeben, was die Umsetzung mehrerer C++-Idiome vereinfacht. Zum Beispiel können Sie jetzt identische Funktionsüberladungen, die sich nur durch ihre const- und Referenz-Modifikatoren unterscheiden, durch eine einzige Funktion ersetzen, die Typ und Wertkategorie des Objektparameters ableitet.

C++23 bietet neue Möglichkeiten für die Verwendung von auto. Mit auto(x) und auto{x} können Sie eine Kopie des Arguments erstellen – wie bei der Übergabe als „By-Value“-Funktionsargument.

ReSharper C++ unterstützt darüber hinaus die folgenden C++23-Updates zur Vereinfachung der Sprachsyntax:

  • Leere Klammern () in Lambdas sind jetzt in vielen Fällen optional.
  • Alias-Deklarationen sind jetzt in init-Anweisungen erlaubt.
  • Labels sind auch am Ende von Blockanweisungen zulässig.

Unreal Engine

Mit den neuen integrierten Dateivorlagen können Sie jetzt mühelos einen einfachen oder komplexen Unreal-Engine-Test anlegen. Öffnen Sie dazu den Solution Explorer und rufen Sie das Add-Menü auf, indem Sie auf den gewünschten Projektordner rechtsklicken oder Strg+Alt+Einfg drücken.

ReSharper C++ enthält auch eine neue UINTERFACE-Live-Vorlage zur Ergänzung der bestehenden Vorlagen für UCLASS, USTRUCT und UENUM. Um in einem Unreal-Engine-Projekt eine neue Schnittstellenklasse hinzuzufügen, wählen Sie einfach den entsprechenden Eintrag in der Code-Completion-Liste aus.

Sie können jetzt Quellcodeverzeichnis-Mappings zur Verwendung bei der Auflösung von #include-Direktiven in Shader-Dateien angeben. Wenn im Game- oder Engine-Projekt RiderLink installiert ist, können Sie Shader-Mappings auch direkt aus Unreal Engine laden.

Mit einem neuen Completion-Element können Sie einen Lambda-Ausdruck generieren, bei dem ein Delegat, eine TFunction oder eine TFunctionRef als Argument erwartet wird.

Wenn Sie an einer eigenständigen, plattformübergreifenden IDE für die Unreal-Engine-Entwicklung interessiert sind, sollten Sie sich Rider ansehen. Die Unreal-Engine-Unterstützung in Rider und ReSharper C++ ist identisch, und Sie können die gleichen Verbesserungen in Rider 2023.1 erwarten.

Call-Tracking

Das Call-Tracking-Feature von ReSharper ist endlich in ReSharper C++ angekommen! Sie haben jetzt die Möglichkeit, Aufrufketten in der Hierarchie der eingehenden Aufrufe anzuzeigen und in ihnen zu navigieren. Setzen Sie die Einfügemarke einfach auf eine beliebige Funktion und wählen Sie im Kontextmenü Inspect | Incoming calls aus oder drücken Sie Strg+Umschalt+Alt+A, um die Aktion im Menü Inspect This aufzurufen.

Doppelklicken Sie im Call-Tracking-Ergebnisfenster auf den Hierarchieeintrag, um zum entsprechenden Aufruf im Editor zu navigieren, oder erweitern Sie einen beliebigen Knoten, um dessen eingehenden Aufrufe zu prüfen.

Das Tracking von ausgehenden Aufrufen wird derzeit nicht unterstützt.

Codeanalyse

Eine neue Inspektion spürt By-Value-Funktionsparameter auf, bei denen die Erstellung einer Kopie sehr aufwendig ist. In solchen Fällen schlägt ReSharper C++ vor, den Parameter stattdessen per const-Referenz zu übergeben. Der Quick-Fix Create function from usage wiederum bevorzugt jetzt die By-Value-Übergabe von Parametern, die einfach zu kopieren sind.

Die folgenden neuen Codeinspektionen warnen Sie vor potenziellen Code-Smells:

  • Eine Inspektion identifiziert ungenutzte Vorlagenparameter und Typ-Aliasnamen in einem lokalen Geltungsbereich sowie redundante Basisklassen-Initialisierer.
  • Eine andere Inspektion markiert ungenutzte Rückgabewerte von Funktionen, die HRESULT- oder NTSTATUS-Fehlercodes zurückgeben.

Eine weitere Inspektion informiert Sie, wenn die Argumentableitung in einer C++17-Klassenvorlage fehlschlägt, und mit einem Quick-Fix können Sie die benötigten Argumente sehr einfach ergänzen.

ReSharper C++ 2023.1 enthält auch viele Verbesserungen für die zur Kompilierungszeit eingesetzte Evaluierungsengine. So wurde zum Beispiel die Auswertung von Range-basierten for-Schleifen und die Unterstützung für Unions verbessert.

Refactoring

Die meisten Refactorings sind jetzt auch über das Alt+Enter-Menü zugänglich (zusätzlich zum gewohnten Refactor This-Popup, das Sie mit Strg+Umschalt+R aufrufen können).

Der neue Quick-Fix Create parameter bietet einen praktischen Zugang zum Refactoring Change signature. Wenn Sie eine umgebende Funktion um einen neuen Parameter ergänzen möchten, rufen Sie einfach den Quick-Fix auf und geben den Typ des neuen Parameters ein. Das Refactoring aktualisiert alle Deklarationen und Verwendungen der Funktion und weist Sie auf eventuelle Konflikte hin.

Die Refactorings Extract method und Change signature sind jetzt einfacher aufzurufen.

  • Wenn Sie eine einzeilige Funktion extrahieren möchten, müssen Sie nicht mehr die gesamte Zeile auswählen, denn das Refactoring extrahiert jetzt automatisch die aktuelle Zeile, wenn kein Code ausgewählt ist.
  • Bei Aufruf von Change signature kann sich die Einfügemarke an einer beliebigen Stelle in der Funktionssignatur befinden, anstatt wie bisher nur auf dem Namen der Funktion.

Weitere Verbesserungen

ReSharper C++ unterstützt jetzt das Makro __VA_OPT__, das in C++20 eingeführt wurde, um die Definition von variadischen Makros zu erleichtern. Dieses spezielle funktionale Makro wird zu seinen Argumenten erweitert, wenn die variable Argumentliste nicht leer ist – ansonsten wird das Makro ignoriert.

Standardmäßig werden bei der Sortierung von #include-Direktiven Dateipfade vor Ordnern angeordnet. Wenn Sie lieber alle Includes in alphabetischer Reihenfolge sortiert haben möchten, können Sie jetzt die neue Option Put files before folders deaktivieren.

Mit einer neuen Postfix-Vorlage können Sie in Unreal-Engine-Projekten unkompliziert eine const-Referenz mit std::as_const oder AsConst erstellen.

In der Standardeinstellung werden Kommentare, die mit /* beginnen, nicht mehr automatisch mit */ geschlossen. Das automatische Schließen des Kommentars kann mit der neuen Typing-Assist-Option Insert */ after /* aktiviert werden.

Unter Das ist neu in ReSharper finden Sie Informationen zu weiteren Änderungen in diesem Release. Zum Beispiel ist die CSS-Unterstützung jetzt standardmäßig deaktiviert.