ReSharper 2021.3 unterstützt das kürzlich veröffentlichte Visual Studio 2022. Die Codeanalyse bietet neben einer verbesserten allgemeinen C#-Unterstützung auch eine erweiterte C#10-Unterstützung, die unter anderem dateibezogene Namensräume, globale using-Direktiven und Nullable-Referenztypen umfasst. Weitere Neuerungen in dieser Version sind Find Usages nach benutzerdefinierten impliziten Umwandlungsoperatoren, neue Randleistenmarkierungen und eine umfassend verbesserte Copy Code Reference-Funktion.
Kostenlose 30-Tage-Testversion verfügbar
ReSharper unterstützt jetzt den Release-Build des neuen Visual Studio 2022. Sie können denselben umfangreichen Funktionsumfang nutzen, den Sie von anderen Visual-Studio-Versionen gewohnt sind. Da jedoch Visual Studio 2022 ein x64-Prozess ist, ist die Menge des nutzbaren Arbeitsspeichers nicht länger begrenzt. Dadurch arbeiten alle ReSharper-Funktionen schneller.
Um ReSharper mit dieser neuen Version von Visual Studio verwenden zu können, stellen Sie sicher, dass das VS2022-Symbol im Installationsprogramm von dotUltimate 2021.3 ausgewählt ist.
C# 10 wurde kürzlich veröffentlicht, und ReSharper erweitert kontinuierlich die Unterstützung der neuen Sprachmerkmale. Wir freuen uns, Ihnen heute die Unterstützung folgender Merkmale vorzustellen: dateibezogene Namensräume, globales „using“, das CallerArgumentExpression-Attribut, Handler für interpolierte Zeichenfolgen und C#10-Lambdas.
Beginnen wir mit dateibezogenen Namensräumen. Zusätzlich zur Unterstützung der neuen Syntax haben wir unter ReSharper | Options | Code Editing | C# | Syntax Style | Code body | Namespaces eine neue Syntaxstil-Option hinzugefügt, damit Sie den gewünschten Stil auswählen können. Wenn Sie einen Stil auswählen, zeigt Ihnen ReSharper bei Codeabschnitten, die nicht dem Stil entsprechen, Inspektionen an und schlägt Quick-Fixes vor, um die entsprechenden Änderungen vorzunehmen. Sie können die Fixes mit einem Klick auf das ganze Projekt oder sogar die gesamte Projektmappe anwenden.
Mit zwei Kontextaktionen können Sie Ihren Code auf den vorherigen Syntaxstil zurücksetzen: Convert to file-scoped namespace und Convert to block-scoped namespace.
Weitere Informationen: Dateibezogene Namensräume
Werfen wir nun einen kurzen Blick auf globale „using“-Anweisungen. Die ReSharper-Codeanalyse erkennt using-Anweisungen, die mit dem Schlüsselwort global gekennzeichnet sind und löst Symbole in allen Codedateien im Projekt entsprechend auf. ReSharper lässt Sie auch wissen, wenn eine globale using-Direktive in einer Datei an der falschen Stelle platziert wurde.
ReSharper hebt globale using-Direktiven, die im Projekt nicht verwendet werden, als ungenutzt hervor und bietet einen Quick-Fix zum Entfernen an.
ReSharper bietet eine umfassende Unterstützung für das CallerArgumentExpression-Attribut, einschließlich Code-Completion und Inspektionen, die Sie bei der korrekten Verwendung unterstützen.
Weitere Informationen: CallerArgumentExpression
In C# 10 wurde das neue Konzept der „Interpolated String Handlers“ eingeführt. Aus der Benutzerperspektive bedeutet dies, dass Zeichenfolgen-Interpolationen in .NET 6 generell schneller sind und die neuen Handler auch die Verwendung von Span<char>-Werten in Interpolationslücken ermöglichen. Bibliotheksautoren können mit dieser Funktion steuern, ob Interpolationsausdrücke in Zeichenfolgen umgewandelt werden. ReSharper 2021.3 erkennt das Muster „Interpolated String Handlers“ in Bibliothekscode und kann jetzt an mehr Stellen die Verwendung von Zeichenfolgen-Interpolationsausdrücken empfehlen.
ReSharper hilft Ihnen, die optimale Performance aus record-Structs herauszuholen, indem es Ihnen empfiehlt, sie als readonly zu markieren. Um Typdeklarationen nicht unnötig mit Modifikatoren zu überfrachten, wird diese Inspektion nur angezeigt, wenn der record-Typ nicht mutierende Instanzmember hat und in der Projektmappe keine Mutationen über Setter erfolgen. Die projektmappenweite Analyse (SWEA) muss dafür aktiviert sein.
Mit C# 10 können Sie die Pattern-Matching-Syntax etwas vereinfachen, indem Sie für Zugriffe den Punkt-Operator statt verschachtelte Objektmuster verwenden.
ReSharper bietet eine entsprechende Inspektion mit Quick-Fix sowie eine Kontextaktion zum Rückgängigmachen der vom Quick-Fix vorgenommenen Änderungen an.
Zu guter Letzt:
Es ist nicht ungewöhnlich, dass jemand Code von anderswo kopiert – zum Beispiel von stackoverflow.com. Nullable-Referenztypen sind heute in C# enthalten, und es gibt bereits Codebeispiele, die die NRT-Syntax nutzen. Aber was passiert, wenn NRT in Ihrer Projektmappe nicht aktiviert ist? ReSharper bietet zwei neue Quick-Fixes, um diese Syntax aus eingefügtem Code zu entfernen: Replace with JetBrains.Annotations attributes und Remove nullable annotations without ‘#nullable’ context.
Von Zeit zu Zeit kann es zu Abweichungen zwischen der Nullability von Typargumenten und ihren Nullability-Einschränkungen kommen. Es gibt jetzt Quick-Fixes für solche Fälle, die unter anderem folgende Möglichkeiten bieten:
Die Korrektur von Parameterannotationen mit Nullable-Standardwerten kann mittels Bulk-Quick-Fix in einer Datei, einem Projekt oder der gesamten Projektmappe erfolgen.
Es gibt auch einen neuen Bulk-Quick-Fix, der Parameter nullbar macht, wenn sie innerhalb der Methode auf null überprüft werden.
Wir haben einige neue Quick-Fixes und eine Kontextaktion für static lokale/anonyme Funktionen mit Closures eingeführt:
Die neue Inspektion Simplify string interpolation mit entsprechendem Quick-Fix ersetzt Aufrufe von .PadLeft()
und .PadRight()
in den Platzhaltern von interpolierten Zeichenfolgen durch Ausrichtungsausdrücke.
Neben dem Hinzufügen der neuen C# 10-Datensatzstruktur record struct
haben wir auch die Unterstützung regulärer Structs erweitert. Viele verwenden für ihre DTOs immer noch Klassen mit Objektinitialisierern. Jetzt können Sie all diese Verwendungen schnell in Konstruktoren mit Parametern umwandeln. Dies kann entweder über die record
-Deklaration oder über einen beliebigen Objektinitialisierer erfolgen. Beachten Sie, dass auch DTOs konvertiert werden können, die einen Konstruktor mit Eigenschaftszuweisungen definieren.
ReSharper warnt Sie schon seit einiger Zeit vor uneinheitlichen Locks auf Feldern. In dieser Version fügen wir eine ergänzende Inspektion hinzu, die auch die Reihenfolge mehrerer gesperrter Ressourcen berücksichtigt und Sie über mögliche Deadlock-Zyklen informiert.
ReSharper hat die Plausibilitätsprüfungen für ganzzahlarithmetische Ausdrücke auf weitere Ganzzahltypen wie byte
, sbyte
, short
, ushort
, uint
, long
, ulong
und enum
erweitert. Dadurch wird es leichter, unerreichbare Verzweigungen zu vermeiden.
Um lange und komplexe Bedingungen leichter lesbar zu machen, haben wir eine Hervorhebung für Bedingungselemente hinzugefügt. Es werden Gruppen von logischen Operatoren hervorgehoben, z. B. Verkettungen von &&
und ||
in C#.
Quick-Fixes und Kontextaktionen benötigen jetzt weniger Zeit bei der Anwendung auf einen Ordner, ein Projekt oder eine Projektmappe.
Wenn Solution-Wide Error Analysis (SWEA) (Projektmappenweite Fehleranalyse) mit Monitor warnings aktiviert ist, überspringt ReSharper jetzt anhand der SWEA-Ergebnisse die Dateien, in denen das gesuchte Problem nicht vorhanden ist. Dadurch wird der Zeitaufwand für das Finden der zu behebenden Probleme erheblich reduziert.
Auch für diejenigen, die SWEA in ihren Projekten nicht aktiviert haben, haben wir eine gute Nachricht: ReSharper nutzt jetzt alle verfügbaren CPU-Kerne, um die Codeanalyse parallel durchzuführen. Dies reduziert die Gesamtzeit beim Ausführen von Quick-Fixes und Kontextaktionen.
Wir haben die Leistung des Daemons für Dateien mit riesigen Methoden erheblich verbessert. Dies gilt insbesondere für:
switch
-Ausdrücken. Wir haben einige weitere Randleistenmarkierungen hinzugefügt, damit Sie schnell durch die Vererbungsstruktur einer Klasse, Schnittstelle oder Struct navigieren können. Die neuen Symbole ↑O
und ↑I
zeigen an, dass eine Codeentität eine andere Klasse oder Schnittstelle erbt bzw. implementiert. Wenn die Vererbungslinie komplex ist, wird durch Auswahl des Symbols ein Menü mit allen übergeordneten Elementen bis hin zum Anfang der Vererbungshierarchie angezeigt. Wenn eine Klasse eine Schnittstelle und eine Klasse gleichzeitig implementiert bzw. erbt, zeigt ReSharper dies durch das ↑IO
-Symbol in der Randleiste an.
Darüber hinaus ist in dieser Version das Randleistensymbol für Klassenmember standardmäßig aktiviert. ReSharper zeigt in der linken Randleiste neben einem Klassenmember das Symbol ↓O
an, wenn der Klassenmember in abgeleiteten Klassen überschrieben wird. Durch Anklicken des Symbols können Sie:
Find Usages kann jetzt Verwendungen von benutzerdefinierten impliziten Umwandlungsoperatoren finden! Diese Funktion basiert auf demselben Mechanismus, der für die Typkonvertierungs-Hints verwendet wird.
Mit einer solchen Suche können Sie feststellen, ob benutzerdefinierte implizite Umwandlungsoperatoren verwendet werden und gegebenenfalls zu den Codeblöcken mit den Umwandlungen navigieren.
Bitte beachten Sie, dass dieser Algorithmus einige Zeit benötigt, bis die Ergebnisse vorliegen und angezeigt werden können.
Wenn Sie im Debug-Modus Go to Type of Symbol für eine Variable oder einen Parameter aufrufen, der einen Schnittstellentyp hat, zeigt Ihnen ReSharper nicht die Schnittstellendeklaration, sondern die im aktuellen Frame verwendete Implementierung an.
Sie können jetzt alle Parameter, Felder oder Eigenschaften einer Funktion mit dem Annotationsattribut [LanguageInjection] markieren. ReSharper interpretiert dann eine Zeichenfolge im entsprechenden Element als Codefragment der angegebenen Sprache. Die Injektion folgender Sprachen ist möglich: CSS, HTML, JavaScript, JSON und XML. Sobald Sie das Attribut hinzufügen, stehen für die Zeichenfolge eine korrekte Syntaxhervorhebung, Code-Completion und andere Funktionen zur Verfügung. Um LanguageInjection nutzen zu können, müssen Sie die neueste Version von JetBrains.Annotations zu Ihrem Projekt hinzufügen.
In dieser Version haben wir grundlegende Änderungen an der Funktion Copy FQN vorgenommen. Zunächst einmal wurde das Feature in Copy Code Reference umgetauft. Wir glauben, dass dieser Name die Funktionalität besser widerspiegelt.
Wir haben auch neue Funktionen hinzugefügt, die Sie verwenden können, wenn Sie Git als Versionsverwaltung verwenden. Bei Projekten, die aus GitHub geklont wurden, enthält das Copy Code Reference-Popup standardmäßig GitHub-bezogene Einträge. Diese generieren einen korrekten Link zu einem GitHub-Repository, um ein sofortiges Teilen zu ermöglichen.
Für Nicht-GitHub-Repositories können Sie jetzt in den ReSharper-Einstellungen selbst definierte URI-Vorlagen hinterlegen. All diese Vorlagen werden im Copy Code Reference-Popup angezeigt. Eine URI-Vorlage kann verschiedene vordefinierte Platzhalter enthalten: den aktuellen Branchnamen, den Dateinamen, die aktuelle Zeilennummer usw.
Auch das Popup-Fenster selbst wurde gründlich überarbeitet. Design, Symbole, Formatierung – alles ist neu.
if()
und while()
. if()
, foreach()
usw. auszurichten. Diese Option ist standardmäßig aktiviert. Mit ReSharper C++ 2021.3 müssen Sie nicht mehr zum Unreal Editor wechseln, um eine neue Klasse zu erstellen – alle vordefinierten Vorlagen für Unreal-Engine-Klassen sind jetzt in der Liste der ReSharper-Dateivorlagen verfügbar.
Um eine neue Klasse zu erstellen, gehen Sie zum Solution Explorer und öffnen Sie das Add-Menü mit einem Rechtsklick auf den gewünschten Projektordner (oder mit Strg+Alt+Einfg). Nachdem Sie eine Unreal-Engine-Vorlage von der Liste ausgewählt und der neuen Klasse einen Namen gegeben haben, generiert ReSharper C++ in den richtigen Ordnern – je nachdem, ob private oder public – die Header- und Quellcode-Dateien mit dem Vorlagencode.
Sie können designierte Initialisierer gemäß C++20 verwenden, um unkompliziert Boilerplate-Code für die Aggregatinitialisierung zu generieren. Wählen Sie einfach das entsprechende Element aus der Completion-Liste aus, um Designatoren für die Datenmember einzufügen, und geben Sie dann die Initialisierungswerte ein.
Darüber hinaus bietet ReSharper C++ 2021.3 Inspektionen, die Ihnen helfen, neue Bibliotheksfunktionen einzuführen – zum Beispiel um Elemente aus einem beliebigen Standardcontainer zu löschen, die Existenz eines Elements in einem assoziativen Container zu prüfen und Smart-Pointer mit Standardinitialisierung zu erstellen.
Beginnend mit dem .NET-5-SDK können Sie globale AnalyzerConfig-Dateien zum Konfigurieren der Analyzer-Optionen von Visual Studio verwenden. ReSharper 2021.3 kann Codestilinformationen aus diesen globalen AnalyzerConfig-Dateien auslesen und die ReSharper-Regeln entsprechend anpassen.
dotMemory kann jetzt gesampelte Daten zur Speicherallokation basierend auf ETW-Ereignissen abrufen. Im Vergleich zur traditionellen (statistischen) Erfassung von Allokationsdaten ist die Sampling-Methode zwar weniger genau, bietet aber eine Reihe von Vorteilen:
Bitte beachten Sie, dass diese Funktion nur unter Windows verfügbar ist.
Kostenlose 30-Tage-Testversion verfügbar