Das ist neu in ReSharper C++

ReSharper C++ 2024.1 verbessert die Unterstützung von C++20-Modulen und implementiert ausgehende Aufrufe in Call-Tracking. Die erweiterte Programmierunterstützung umfasst unter anderem Verbesserungen für das Refactoring Change Signature sowie Updates für die Unterstützung von Dokumentationskommentaren. Für Unreal-Engine-Entwickler*innen relevante Neuerungen in ReSharper C++ 2024.1 sind die Unterstützung für das Slate-UI-Framework sowie die Asset-Pfad-Completion in C++-Code.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar

Unterstützung für C++20-Module

Dank einer aktualisierten Modulerkennung unterstützt ReSharper C++ jetzt interne Partitionseinheiten, d. h. Modulpartitionseinheiten, die nicht zur externen Schnittstelle eines Moduls beitragen. Anders ausgedrückt handelt es sich um Modulpartitionen ohne dazugehörige export module-Deklaration.

Wir haben die interne Repräsentation von exportierten C++20-Modulen überarbeitet, um transitive Referenzen auf Entitäten, die aus anderen Modulen importiert wurden, zu ermöglichen. Bisher wurden diese Entitäten vom importierenden Modul wieder exportiert. Diese Änderung dürfte die Größe der exportierten Module erheblich reduzieren und die Performance in Projekten mit C++20-Modulen verbessern.

Unreal Engine

ReSharper C++ 2024.1 führt Unterstützung für das Slate-UI-Framework der Unreal Engine ein. Sie können den Codeformatierer und die Eingabehilfen von ReSharper verwenden, um Ihren Slate-Code gemäß den Unreal-Engine-Konventionen zu formatieren. Funktionen wie Go to declaration, Find Usages und Rename können nun ebenfalls mit der deklarativen Syntax von Slate umgehen.

ReSharper C++ baut die intelligente Integration mit der Blueprint-Funktionalität weiter aus und unterstützt jetzt das Hinzufügen von Core Redirects beim Umbenennen einer UENUM-Instanz und kann bei Ressourcennamen in C++-Code Asset-Pfade vervollständigen.

HLSL-Schnittstellen, die für die dynamische Shader-Verlinkung verwendet werden, werden jetzt in Shader-Code unterstützt.

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 2024.1 erwarten.

Ausgehende Aufrufe im Call-Tracking

Das Call-Tracking in ReSharper unterstützt jetzt die Navigation durch ausgehende C++-Aufrufketten. Bisher war nur die Verfolgung eingehender Aufrufe möglich. Um ausgehende Aufrufe zu untersuchen, setzen Sie die Einfügemarke auf eine beliebige Funktion und wählen Sie im Kontextmenü die Option Inspect | Outgoing calls aus. Alternativ können Sie Strg+Umschalt+Alt+A drücken, um die Funktion über das Menü Inspect This aufzurufen.

Verbesserungen für Change Signature

Mit Change Signature können Sie jetzt unkompliziert den Typ eines Funktionsparameters zwischen den Optionen Zeiger, Referenz oder Wert umschalten. ReSharper aktualisiert automatisch die Parameterverwendung im Funktionskörper und passt die Argumente in den Funktionsaufrufen an, indem es bei Bedarf Dereferenzierungs- oder Adressenoperatoren hinzufügt.

Wenn Change Signature für eine Funktion aufgerufen wird, die potenzielle Verwendungen in abhängigem Code hat, können Sie jetzt beim Refactoring die Änderungen überprüfen und die zu aktualisierenden Verwendungen bestätigen.

Sie können jetzt auch Standardargumente für Funktionsparameter vorgeben, die mit Change Signature neu hinzugefügt wurden.

Weitere wichtige Updates in Change Signature:

  • Verbesserte Handhabung von variadischen Funktionsvorlagen.
  • Korrekte Aktualisierung von Funktionsargumenten bei Aufrufstellen in Makroaufrufen.
  • Change Signature behält jetzt Array-Typen und den int-Typspezifizierer in unsigned int-Typen bei.

Dokumentationskommentare

Sie haben jetzt die Möglichkeit, den Stil der generierten Dokumentationskommentare anzupassen, ohne eine Live-Vorlage zu bearbeiten. Um den Stil der Dokumentationskommentare zu konfigurieren, rufen Sie in ReSharper Settings | Code editing | C++ | Code generation auf.

JetBrains Grazie ist die in ReSharper 2023.3 neu eingeführte integrierte Grammatik- und Rechtschreibprüfung von ReSharper. Ab Version 2024.1 sind die Grammatikinspektionen von Grazie auch in C++-Dokumentationskommentaren verfügbar.

Das Change Signature-Refactoring synchronisiert jetzt @param-Befehle mit der Liste der Funktionsparameter. Das Refactoring löscht @param-Befehle für entfernte Parameter, fügt Befehle für neue Parameter hinzu und ordnet bestehende Befehle neu an, damit sie der aktuellen Parameterreihenfolge entsprechen.

Codeanalyse

Gemäß den neuesten Ergebnissen der umfangreichen Testsuite von Richard Thomson für C++-Refactoring-Tools besteht ReSharper C++ die meisten Testfälle und übertrifft damit weiterhin andere Tools. Im Rahmen unserer kontinuierlichen Bestrebungen zur Optimierung der ReSharper-Vorschläge haben wir in ReSharper C++ 2024.1 mehrere Probleme behoben, die Richards Testsuite zum Vorschein gebracht hat. Zum Beispiel fügt der Quick-Fix Create constructor from usage jetzt bei Bedarf einen Standardkonstruktor hinzu.

ReSharper C++ 2024.1 schlägt jetzt vor, redundante idiomatische Zero-Initialisierer zu entfernen, wenn die Aggregat-Initialisierung verwendet wird. Es gibt mehrere neue Inspektionen für Probleme mit statischen Datenmembern, z. B. redundante inline-Spezifizierer bei static constexpr-Datenmembern.

Die Codebereinigung wurde um neue Optionen erweitert, um redundante Zugriffsspezifizierer zu entfernen und Klassen ohne Unterklassen als final zu deklarieren. Apply ‘auto’ style kann jetzt neben lokalen Variablen auch globale Variablen und Klassenmember handhaben.

Zum Unterdrücken einer Inspektion in einem bestimmten Gültigkeitsbereich konnten Sie bisher den ReSharper-spezifischen Kommentar // ReSharper disable verwenden. ReSharper C++ 2024.1 erkennt nun zusätzlich die Kommentare NOLINT, NOLINTNEXTLINE und NOLINTBEGIN ... NOLINTEND, die von Clang-Tidy verwendet werden.

Codeformatierung

ReSharper C++ 2024.1 führt mehrere neue Formatierungsoptionen ein:

  • Die Optionen Break line after goto labels und Indent goto labels verbessern die Formatierung von Anweisungen mit Labels.
  • Unter Arrangement of enumerations ermöglichen neue Einstellungen die Steuerung von Zeilenumbrüchen innerhalb von Enumerationen.
  • Die Einstellung Empty braces formatting umfasst jetzt die Option Do not change.

Bei Verwendung einer .clang-format-Konfiguration berücksichtigt der ReSharper-Formatierer jetzt die Einstellungen DisableFormat und IndentAccessModifiers. Der integrierte clang-format-Stil „GNU“ wird jetzt ebenfalls unterstützt.

Unter Das ist neu in ReSharper finden Sie Informationen zu weiteren Änderungen in diesem Release.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar

ReSharper C++ 2023.3

Previewphase von AI Assistant abgeschlossen General-Availability-Version

JetBrains AI Assistant ist jetzt allgemein verfügbar und bietet eine Reihe von neuen und verbesserten Funktionen, die Ihre Produktivität steigern. Zu unseren neuesten Verbesserungen zählen ein stärkerer Projektbezug bei KI-Aktionen und eine Prompt-Bibliothek.

Sie können AI Assistant in ReSharper C++ als Zusatzfunktion mit einem Abonnement für den JetBrains AI Service verwenden.

Updates für HLSL und Unreal Engine

Mit HLSL 2021 wurden C++-ähnliche Template-Funktionen und Datentypen eingeführt. Das neueste Update für ReSharper C++ bietet vollständige Unterstützung für HLSL-Templates.

ReSharper C++ 2023.3 unterstützt den in HLSL integrierten Typ RayQuery und schlägt in der Code-Completion die entsprechenden Flags vor.

Eine neue Inspektion hilft Ihnen, eine der häufigsten Fallen in Verbindung mit dem Hilfsmakro AddDynamic zu umgehen. Sie erhalten jetzt eine Warnung, wenn eine dynamische Delegatfunktion nicht mit dem Makro UFUNCTION markiert ist.

Wenn Sie immer noch gelegentlich Boilerplate-Code schreiben, denken Sie daran, dass Sie mit Alt+Einfg automatisch häufig verwendete Typmember generieren können. In ReSharper C++ 2023.3 haben wir die Generierung von Hash-Funktionen an die Konventionen der Unreal Engine angepasst.

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.3 erwarten.

C- und C++-Unterstützung

Wenn Sie einmal überprüfen müssen, ob ein bestimmtes Attribut im aktuellen Standard oder in der aktuellen Compiler-Version verfügbar ist, dann ist die Feature-Testing-Funktion von C++20 genau richtig für Sie. Mit __has_cpp_attribute(operand) können Sie in Präprozessor-Bedingungen testen, ob der Compiler das vom Operanden referenzierte Attribut erkennt. ReSharper C++ geht jetzt korrekt mit __has_cpp_attribute um und verbessert die Unterstützung von Attributannotationen in C++-Standardbibliotheken.

Wir haben Unterstützung für das Pack-Pragma eingeführt, das mit dem Schlüsselwort __pragma verwendet wird. Die Syntax __pragma (pack) wird manchmal innerhalb von Makrodefinitionen verwendet, da es nicht möglich ist, #pragma-Direktiven innerhalb einer Makrodefinition zu verwenden. In solchen Fällen berechnet ReSharper C++ jetzt die Größe gepackter Strukturen korrekt, sodass Sie sich auf die Ergebnisse der Codeanalyse verlassen können.

ReSharper C++ führt Unterstützung für mehrere C-Features ein:

  • Den restrict-Typqualifizierer aus C99, der in Zeigerdeklarationen verwendet werden kann.
  • Typdeduktion, constexpr und nullptr aus C23.

Wir haben außerdem Unterstützung für mehrere neue Clang-Intrinsics wie __is_const(), __is_member_pointer() usw. eingeführt, damit ReSharper C++ mit plattformübergreifendem Code besser umgehen kann.

Für die plattformunabhängige C- und C++-Entwicklung können Sie eine frühe Vorschauversion der eigenständigen IDE CLion Nova ausprobieren. Sie basiert auf ReSharper C++ und ist in dieser Entwicklungsphase vollkommen kostenlos nutzbar – registrieren Sie sich, beginnen Sie mit der Programmierung und senden Sie uns Ihr Feedback!

Grammatik- und Rechtschreibprüfung

JetBrains Grazie ist der neue integrierte Grammatik- und Rechtschreibprüfer von ReSharper. Grazie unterstützt über 20 natürliche Sprachen und erkennt Sprachfehler in den von ReSharper unterstützten Programmiersprachen (C#, C++, VB.NET), Markup-Sprachen (HTML, XML, XAML) und Kommentaren. Um weitere natürliche Sprachen zu Grazie hinzuzufügen, öffnen Sie in ReSharper das Menü Options | Grammar and Spelling | General.

Bitte beachten Sie, dass die Grammatikprüfung in doxygen-Kommentaren derzeit nicht verfügbar ist.

Arbeiten mit inaktivem Code

Bei plattform- oder konfigurationsspezifischem Code kommt es oft vor, dass man inaktive Codeblöcke in bedingten Präprozessorzweigen bearbeiten muss. Bisher schlug die Code-Completion in inaktivem Code nur Makros vor. In ReSharper C++ 2023.3 wurde die Code-Completion in diesen Szenarien verbessert, indem Symbole aus dem globalen Gültigkeitsbereich einbezogen werden.

Find Usages findet jetzt mögliche Verwendungen in inaktivem Code und in Makrokörpern. Um diese Verwendungen zu finden, musste man bisher mit Find Usages Advanced nach Textvorkommen suchen. Die Ergebnisse von Find Usages enthalten jetzt standardmäßig mögliche Verwendungen in Makrokörpern und inaktivem Code. Diese Verwendungen sind in separaten Abschnitten zusammengefasst, um sie von Verwendungen im aktiven Code zu unterscheiden.

Codeanalyse

Sie können ReSharper-spezifische C++-Attribute verwenden, um die Treffsicherheit und die Ergebnisse von ReSharper-Analysen zu verbessern. In ReSharper C++ 2023.3 haben wir das Präfix [[jetbrains::...]] als Ergänzung zu [[rscpp::...]] für die bestehenden Attribute [[jetbrains::format]], [[jetbrains::guard]] und [[jetbrains::has_side_effects]] eingeführt.

Mit dem neuen Attribut [[jetbrains::pass_by_value]] können Sie die Inspektion Pass value by const reference für Funktionsparameter unterdrücken. Mehr erfahren.

Wir haben einige Inspektionen für die nicht korrekte Verwendung des Schlüsselworts export in C++20-Modulen eingeführt. ReSharper C++ schlägt jetzt vor, die Export-Deklaration zu entfernen, wenn sie sich innerhalb einer anderen Export-Deklaration befindet oder wenn die Deklaration nicht Teil einer Modulschnittstelleneinheit ist und nicht exportiert werden kann. Die IDE empfiehlt Ihnen außerdem, export zu verschieben, wenn Sie versuchen, die Export-Deklaration als Template zu definieren, anstatt die Template-Deklaration zu exportieren.

Die mitgelieferte Clang-Tidy-Programmdatei wurde auf Clang 17 aktualisiert und enthält damit Updates aus dem neuesten LLVM-Release.

Einige Clang-Tidy-Prüfungen geben zusätzlich zum Warntext weitere Informationen aus. ReSharper C++ zeigt jetzt diese zusätzlichen Hinweise im Tooltip an.

Eine neue Inspektion warnt vor der Verwendung von Literalen mit mehreren Zeichen. Sie werden bedingt durch implementierungsdefinierte Werte unterstützt und sollten in portierbarem Code mit Vorsicht verwendet werden.

ReSharper C++ schlägt jetzt einen Quick-Fix vor, um redundante Bedingungsoperatoren zu entfernen und ternäre Ausdrücke zu vereinfachen.

Programmierunterstützung

Das mit Alt+Einfg aufrufbare Generate-Menü hilft Ihnen, Standard-Codebausteine in Sekundenschnelle zu erstellen. In ReSharper C++ 2023.3 haben wir die Liste um eine neue Aktion zum Generieren eines Destruktors erweitert.

Wenn die Aktion in einer polymorphen Klasse aufgerufen wird, verwendet sie die Syntaxstil-Einstellungen, um die erforderlichen Spezifizierer virtual und/oder override einzufügen. Sie können den Stil des generierten Destruktorkörpers auf der Optionsseite Code Editing | C++ | Code Generation konfigurieren.

Mit den Direktiven #pragma region und #pragma endregion können Sie einen faltbaren Codeblock definieren. Ähnlich wie bei anderen paarweisen Direktiven können Sie jetzt zwischen den beiden hin und her springen, indem Sie auf einer #pragma-Direktive oder einem neuen Inlay-Hinweis mit dem Regionsnamen die Aktion Go to Declaration aufrufen.

Darüber hinaus können Sie im Fenster File Structure jetzt unkompliziert Regionen falten und zu den entsprechenden Codeblöcken navigieren.

In C-Code sollte in der Parameterliste einer Funktion mit void angegeben werden, dass die Funktion keine Argumente entgegennimmt. ReSharper C++ behält jetzt diese spezielle Verwendung von void bei, wenn Sie die Refactorings Extract method oder Change signature aufrufen, eine Definition für eine Funktion generieren oder eine neue Funktion aus einer Verwendung erstellen.

Inlay-Hinweise für Referenzen haben jetzt einen separaten Text [>>], damit Sie Forwarding-Referenzen auf einen Blick erkennen können.

Mit der neuen Aktion Generate inline definitions können Sie problemlos mehrere Funktionskörper gleichzeitig erzeugen. Ähnlich wie die bestehende Aktion Generate definitions ist die neue Aktion verfügbar, wenn ein Klassenname oder mehrere Funktionsdeklarationen im Editor ausgewählt werden.

Wenn Sie die Refactorings Introduce variable oder Introduce field auf einen verschachtelten Ausdruck anwenden, bietet Ihnen ReSharper C++ jetzt die Möglichkeit, den Zielausdruck explizit auszuwählen, anstatt automatisch den äußersten zu verwenden.

Um die Codenavigation zu verbessern, werden jetzt Symbole, die aus Makroersetzungen stammen, im Go to-Dialog und im File Structure-Fenster ausgeblendet. Dies ist hilfreich, wenn beim Expandieren von Makros viele Hilfssymbole eingeführt werden, wie das zum Beispiel bei der Deklaration von Testfällen in gängigen Unit-Test-Frameworks der Fall ist.

Codeformatierung

ReSharper C++ 2023.3 führt mehrere neue Formatierungsoptionen ein:

  • Zeilenumbruch vor -> bei nachgestellten Rückgabetypen.
  • Zeilenumbruch nach -> bei nachgestellten Rückgabetypen.
  • Leerzeichen in leeren Blöcken.
  • Zulässigkeit von Kommentaren nach {.

Wir haben außerdem die integrierte clang-format-Programmdatei auf Clang 17 aktualisiert und Unterstützung für die clang-format-Einstellung InsertNewlineAtEOF implementiert, sowohl beim Importieren von Formatierungseinstellungen aus einer .clang-format-Konfigurationsdatei als auch bei der Verwendung von clang-format anstelle des eingebauten Formatierungsmoduls.

Unter Das ist neu in ReSharper finden Sie Informationen zu weiteren Änderungen in diesem Release.

ReSharper C++ 2023.2

AI Assistant Beschränkter Zugang

AI Assistant ist nicht im Lieferumfang von ReSharper enthalten und muss separat installiert werden. Aktuell gibt es eine Warteliste für die Nutzung von AI Assistant.

In unserer Webhilfe erhalten Sie weitere Informationen zu AI Assistant und zur Installation mit der Toolbox-App oder dem dotUltimate-Installationsprogramm.

ReSharper C++ 2023.2 nutzt den ReSharper-eigenen AI Assistant – einen KI-Chat, der speziell dafür entwickelt wurde, Fragen zur Programmierung zu beantworten und Sie bei der Fehlersuche, dem Refactoring, der Dokumentation und anderen Entwicklungsabläufen zu unterstützen.

Der AI Assistant von ReSharper berücksichtigt die in Ihrem Projekt verwendeten Sprachen und Technologien. Dank dieser Kontextsensitivität sind die Antworten von Anfang an für Ihr Projekt optimiert, sodass Sie Zeit und Mühe sparen.

Zusätzlich können Sie gerne Teile des Quellcodes in Ihren Anfragen zitieren. ReSharper erkennt den gesendeten oder in den Chat eingefügten Code und formatiert ihn korrekt. Das KI-Modell wiederum kann Ihnen die Logik hinter dem Code erklären und Ihnen beim Refactoring, der Problemsuche oder der Dokumentation helfen.

C++23-Unterstützung

if consteval ist eine neue Anweisung zur Evaluierung von Konstanten in C++23, die die Idee hinter consteval und std::is_constant_evaluated() – ihrerseits seit C++20 verfügbar – weiterentwickelt. Wenn die Auswertung der if consteval-Anweisung während einer Konstantenauswertung erfolgt, wird die nachfolgende Anweisung ausgeführt. Andernfalls wird der else-Zweig ausgeführt.

ReSharper C++ unterstützt jetzt if consteval und bringt einige Inspektionen dafür mit:

  • consteval if ist immer konstant.
  • std::is_constant_evaluated ergibt immer einen konstanten Ausdruck.
  • if kann durch if consteval ersetzt werden.

ReSharper C++ unterstützt jetzt die benannten Module std und std.compat, die mit der C++23-Standardbibliothek eingeführt wurden. Wenn Sie Visual Studio 17.6 oder höher verwenden, können Sie jetzt import std oder import std.compat verwenden, um die gesamte Standardbibliothek zu importieren, anstatt einen vorkompilierten Header zu verwenden oder spezielle Standardbibliotheksheader zu inkludieren.

Vor C++23 mussten alle Operatoren nicht-statische Memberfunktionen sein. Aufrufoperatoren werden jedoch häufig mit Funktionsobjekten ohne Member verwendet, und es kann zu effizienterem Code führen, wenn Operatoren in diesem Fall statisch sein dürfen. In C++23 können sowohl operator() als auch operator[] statisch sein.

C++20-Unterstützung

Wir haben intensiv daran gearbeitet, die Unterstützung für C++20-Module zu erweitern und verschiedene Sonderfälle zu lösen, die bei der Modulverwendung in realen Projekten auftreten. Bei der internen Verarbeitung von Modulen verwirft ReSharper C++ jetzt Deklarationen, die beim Kompilieren nicht erreichbar sind, was die Performance von Modulen, die zahlreiche Header in das globale Modulfragment inkludieren, erheblich verbessert.

Darüber hinaus haben wir mehrere Änderungen vorgenommen, um die Unterstützung von Modulen in CMake-Projekten zu verbessern. ReSharper C++ erkennt jetzt .cppm-Dateien als Modulschnittstellen und bietet experimentelle Unterstützung für Module außerhalb des Projektordners.

Das in C++20 eingeführte Attribut [[no_unique_address]] zeigt an, dass für ein nicht-statisches Datenmember einer Klasse keine eindeutige Adresse erforderlich ist, sodass der Compiler die Member der Klasse effizienter anordnen kann. ReSharper C++ berücksichtigt jetzt [[no_unique_address]] bei der Berechnung der Objektgröße.

ReSharper C++ 2023.2 implementiert auch den kürzlich akzeptierten C++20-Fehlerbericht, der die Initialisierung eines char- oder unsigned char-Arrays mit einem UTF-8-Zeichenfolgeliteral erlaubt.

„Safe Delete“-Refactoring

ReSharper C++ führt das Refactoring Safe Delete ein, mit dem Sie Symbole ohne Risiko aus Ihrem Quellcode entfernen können. Dieses Refactoring ist für Klassen, Funktionen, Variablen, Enums, Namensräume und sogar Concepts verfügbar.

Um das Refactoring aufzurufen, legen Sie die Einfügemarke auf das zu löschende Symbol und drücken Sie Alt+Entf oder wählen Sie im Menü Refactor This die Option Safe Delete aus.

Bevor ein Symbol gelöscht wird, sucht ReSharper C++ nach dessen Verwendungen und zeigt Ihnen eine Vorschau der Codeänderungen an, sodass Sie sicher sein können, dass alle Löschungen beabsichtigt sind. Wenn Sie versuchen, ein komplexes Element wie eine Klasse oder einen Namensraum zu löschen, prüft ReSharper C++ rekursiv die Verwendungen aller Member des Elements.

Unreal Engine

Diese Version bietet eine bessere Performance bei der Indizierung von Blueprints. Wenn Sie ein Projekt zum ersten Mal öffnen, indiziert ReSharper C++ alle Ihre Blueprint-Assets, um Funktionen wie die Verwendungssuche zu ermöglichen und die Werte serialisierter Daten direkt im Texteditor anzeigen zu können.

In früheren Versionen von ReSharper C++ wurden diese Assets parallel zum C++-Code indiziert. Dadurch dauerte es länger, bis Sie mit dem Projekt arbeiten konnten. ReSharper C++ 2023.2 indiziert Assets im Hintergrund, nachdem die Indizierung Ihres C++-Codes abgeschlossen ist, sodass Sie ungestört arbeiten können.

Wir haben die Smart-Completion für Wrapper-Typen mit Standard-Zuweisungssemantik verbessert. Zum Beispiel werden bei der Zuweisung an eine Variable vom Typ TEnumAsByte Enums des zugrunde liegenden Enum-Typs vorgeschlagen.

In Projekten, die Unreal Engine 5.1 verwenden, unterstützen wir nun das Makro UE_INLINE_GENERATED_CPP_BY_NAME, mit dem Sie generierte Dateien inline in Ihr Modul einbinden können, um die Kompilierungszeit zu verkürzen.

Programmierunterstützung

Durch eine Verbesserung der Completion für abhängigen Code erhalten Sie jetzt Completion-Vorschläge, wenn der Typ durch ein Concept oder einen Trait beschränkt ist. ReSharper C++ berücksichtigt jetzt die standardmäßigen Traits vom Typ std::is_same/std::is_base_of, ihre _v-Wert-Aliase, die entsprechenden Concepts std::same_as/std::derived_from sowie den Trait TIsSame der Unreal Engine.

Um hilfreichere Completion-Vorschläge anbieten zu können, extrahiert ReSharper C++ jetzt Typ- und Wertvorgaben aus requires-Klauseln, if constexpr und SFINAE.

Zwei neue Kontextaktionen helfen Ihnen, eine Template-Parameter-Beschränkung in eine requires-Klausel zu verschieben und eine requires-Klausel in eine Template-Parameter-Beschränkung umzuwandeln.

ReSharper C++ kennzeichnet rekursive Aufrufe in der Randleiste, damit sie besser zu erkennen sind.

Die Code-Completion filtert jetzt reservierte Bezeichner heraus und schlägt sie nur nach _ vor. Dadurch müssen Sie nicht mehr durch die lange Liste der Vorschläge aus der Standardbibliothek blättern, wenn Sie diese nicht benötigen.

In ReSharper C++ 2023.1 haben wir Syntaxhervorhebung und Formatierung für Makroersetzungen im Quick-Documentation-Popup sowie in Tooltips eingeführt. In Version 2023.2 wurden diese Verbesserungen auch auf Makrodefinitionen und Parameter-Info-Hinweise in der Code-Completion erweitert.

Wir haben die Evaluierungsengine verbessert, um die aggregierte Initialisierung von constexpr-Arrays zu unterstützen.

Die Kompatibilität mit den Compilern GCC und Clang und den Standardbibliotheken libc++/libstdc++ wurde verbessert. Dies umfasst eine Unterstützung für weitere Builtins wie __integer_pack, __is_convertible/__is_nothrow_convertible sowie Updates für bereits unterstützte Builtins.

Wenn Sie die Richtung des Parameters mit dem Attribut [in], [in,out] oder [out] des param-Befehls von Doxygen angeben, werten die Tooltips diese Informationen in Ihrem Kommentar aus.

Codeanalyse

ReSharper C++ 2023.2 bietet eine neue Inspektion, die redundante Dereferenzierungen und address-of-Operatoren erkennt. Mit mehreren Quick-Fixes können Sie den Memberzugriff vereinfachen und redundante Operatoren entfernen.

Eine weitere neue Inspektion erkennt redundante Template-Argumente, die mit dem entsprechenden Standard-Template-Argument übereinstimmen und daher weggelassen werden können.

Eine neue Kompatibilitätsinspektion warnt Sie vor Vorausdeklarationen von Enums im C-Stil ohne zugrundeliegenden Typ. Diese sind laut C++-Standard nicht zulässig, werden aber von MSVC akzeptiert, was zu Portierungsproblemen führen kann.

ReSharper C++ färbt jetzt die diagnostischen Präprozessoranweisungen #error und #warning entsprechend ihrer Severity-Stufe ein.

Die mitgelieferte clang-tidy-Programmdatei wurde auf Clang 16 aktualisiert und enthält neue Prüfungen und Fixes.

MSVC kann je nach Wert des Compiler-Arguments /Zc:preprocessor entweder den traditionellen oder den neuen standardkonformen Präprozessor verwenden. ReSharper C++ liest jetzt den Wert dieses Arguments aus den Projekteigenschaften aus und passt das Verhalten des integrierten Präprozessors entsprechend an.

Navigation

ReSharper C++ 2023.2 enthält mehrere Verbesserungen für Go to declaration, um eine einheitlichere und einfachere Codenavigation ohne zusätzliche Schritte zu ermöglichen:

  • Wenn Go to declaration auf einen Klassennamen in einem Konstruktoraufruf angewendet wird, bringt Sie die IDE nun zum Konstruktor statt zur Klasse.
  • Go to declaration navigiert jetzt zur ersten typedef- oder Typalias-Deklaration, statt ein Menü mit allen Deklarationen anzuzeigen.
  • Bei der Anwendung auf einen Modulnamen springt Go to declaration zwischen der Schnittstellen- und der Implementierungseinheit des Moduls hin und her.
  • Wenn Sie Go to declaration auf einen Ordner in einem #include-Pfad anwenden, wird der Ordner geöffnet.

Außerdem ist Type of symbol jetzt auch für nicht deklarierende Symbole verfügbar. Die Funktionsweise ist in diesen Fällen ähnlich wie bei Go to declaration.

Formatierungs- und Eingabehilfen

Bei der Generierung von Dokumentationskommentaren passt ReSharper C++ jetzt die Kommentarvorlage an den Kommentarstil im Editor an. Bei /** generiert die Eingabeunterstützung einen Kommentar im Stil /** */, und bei /// wird ein Kommentar im Stil /// erstellt.

Dieses Release enthält verschiedene Verbesserungen für die Formatierung von Bitfeld-Membern. Die Optionen zum Ausrichten von Initialisierern und Deklarationsnamen in Spalten unterstützen jetzt Bitfelder. Außerdem gibt es zwei neue Formatierungseinstellungen für das Leerzeichen vor und nach dem Doppelpunkt in Bitfeld-Deklarationen sowie für die Ausrichtung von Bitfeldgrößen in Spalten.

Mit einer neuen Eingabehilfe-Option können Sie die Generierung von Dokumentationskommentaren ausschalten, um Konflikte mit dem integrierten Generator von Visual Studio zu vermeiden (ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments).

Wir haben außerdem die integrierte clang-format-Programmdatei aktualisiert und eine Korrektur am clang-format-Engine vorgenommen, damit ein Zeilenumbruch am Dateiende nicht mehr entfernt wird.

Unter Das ist neu in ReSharper finden Sie Informationen zu weiteren Änderungen in diesem Release. Zu den Neuerungen in ReSharper zählt zum Beispiel der prädiktive Debugger, der alle möglichen Zustände berechnet, die durch die Ausführung eines Programms entstehen können, ohne dass der Code tatsächlich ausgeführt werden muss.