Das ist neu in ReSharper 2020.2

ReSharper 2020.2 bietet neue Inspektionen und Quick-Fixes für C# 8 und nullfähige Verweistypen, Codebereinigung beim Speichern, einen überarbeiteten Unit-Test-Runner sowie Verbesserungen bei der Barrierefreiheit. Außerdem zündet ReSharper C++ die nächste Stufe bei der Unreal-Engine-Entwicklung und bietet zahlreiche Verbesserungen in den Bereichen C++/CLI-Unterstützung, Navigation und Codeanalyse.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar

Codeanalyse

Die Nullability-Codeanalyse erkennt jetzt mehr Fälle und kann Nullability-Fehler auch dann nachverfolgen, wenn im Programmfluss Dekonstruktion oder foreach-Schleifen vorkommen. Ein entsprechender Quick-Fix ist selbstverständlich ebenfalls verfügbar.

Die Codeanalyse berücksichtigt nun JetBrains.Annotations-Attribute für die API (sowohl NotNull als auch CanBeNull) – selbst wenn im Code nullfähige Verweistypen mit #nullable disable deaktiviert wurden.

Kontextaktionen, mit denen foreach zu LINQ und LINQ zu Code konvertiert werden kann, sind auch für IAsyncEnumerable<T> verfügbar – vorausgesetzt, das NuGet-Paket System.Linq.Async ist in Ihrem Projekt installiert.

Jetzt können Sie mit den entsprechenden Quick-Fixes auf einfache Weise Implementierungen für IEqualityComparer<T> und IComparer<T> generieren.

Die Codeanalyse berücksichtigt jetzt Compiler-Annotations (z. B. AllowNull und DisallowNull) bei der Nullability-Überprüfung von implementierten oder überschriebenen Membern.

Mit neuen Inspektionen und Quick-Fixes können Variablen und Rückgabetypen als „nicht nullfähig“ festgelegt werden, wenn sie an keiner Stelle nullfähige Werte enthalten oder zurückgeben.

Die Codeanalyse kann jetzt die dotnet_diagnostic-Regeln in der .editorconfig-Datei befolgen. Geben Sie die Severity der Inspektionen in der .editorconfig-Datei an, z. B. dotnet_diagnostic.CS1058.severity = hint, und ReSharper zeigt die Inspektionen entsprechend an.

Die Unterstützung für Standardimplementierungen in Schnittstellen wurde in dieser Version erweitert. In der linken Randleiste des Editors werden implementierte oder überschriebene Methoden markiert, und auch beim Refactoring und bei der Navigation wird dieses C#-Feature berücksichtigt.

In XAML-Code werden jetzt Inlay-Hints bereitgestellt. Es gibt Hints für Markup-Eigenschaftennamen und DataContext sowie für Margin- und Padding-Werte – so müssen Sie sich ihre Reihenfolge nicht merken.

Der Quick-Fix Suppress nullable warning with ! kann über das Alt+Enter-Menü für eine Projektmappe deaktiviert werden.

Codebereinigung

Jetzt können Sie ReSharper so konfigurieren, dass beim Speichern einer Datei automatisch die Codebereinigung durchgeführt wird. Es wurde auch Zeit, oder?

Endlich werden für diese Funktionalität keine Drittanbieter-Plugins mehr benötigt! Diese Funktion kann unter ReSharper | Options | Code Editing | Code Cleanup aktiviert werden.

Der Umfang der Codebereinigung kann jetzt detaillierter eingestellt werden – zum Beispiel auf kürzlich geänderte Dateien oder kürzlich geöffnete Dateien. Dadurch kann die Bearbeitungsdauer erheblich verkürzt werden, da die Codebereinigung nicht die gesamte Projektmappe verarbeiten muss. Für eine genauere Anpassung können Sie sogar angeben, was als „kürzlich“ gelten soll.

Dateien können nach Abschluss der Codebereinigung automatisch gespeichert werden. Diese Funktion kann unter ReSharper | Options | Code Editing | Code Cleanup aktiviert werden.

Es wurden mehrere Verbesserungen vorgenommen, um die Ausführungsdauer der Codebereinigung zu verkürzen:

  • Bei der Vorbereitung des Codes für die Bereinigung werden Analyzer nur dann ausgeführt, wenn die entsprechenden Kontrollkästchen im Cleanup-Profil aktiviert sind. Wenn in einem Profil beispielsweise die Option „Remove redundancies“ nicht aktiviert ist, werden die Analyzer, die für Redundanzen zuständig sind, nicht ausgeführt.
  • In einer Datei können mehrere Codekorrekturen gleichzeitig ausgeführt werden. Dadurch wird nicht nach jeder Korrektur die Analyse für die Syntaxhervorhebung neu gestartet.

Unit-Tests

Wir haben unsere Unit-Test-Runner sowohl für das .NET-Framework als auch für .NET Core von Grund auf überarbeitet, um für beide Runtimes, die vom Visual-Studio-Prozess ausgeführt werden, denselben Runner verwenden zu können. Dadurch konnten eine Reihe von Problemen beim Erkennen, Ausführen und Debuggen von Unit-Tests gelöst werden, und wir haben jetzt die vollständige Kontrolle über Unit-Test-Hierarchien für .NET-Core-Tests.

Der neue Test-Runner bietet integrierte Unterstützung für:

  • MSFakes für die Unit-Test-Frameworks NUnit, xUnit und MSTest v2
  • TypeMock Isolator für NUnit, xUnit und MSTest v2

Die auffälligste Neuerung in der ReSharper-Benutzeroberfläche ist die Unterstützung des DisplayName-Attributs in .NET-Core-Tests für die Frameworks xUnit und NUnit.

Wenn Sie Filter auf den Unit-Test-Baum anwenden – z. B. Passed/Failed usw. – zeigen die Zähler zwei Werte an: die Gesamtzahl aller Tests und die Anzahl der Tests, die den Filterkriterien entsprechen.

Zwei neue Aktionen im Menü Navigate To bieten Ihnen folgende Möglichkeiten:

  • Alle Unit-Test-Sitzungen anzeigen, die diesen Test enthalten
  • Test im Toolfenster Unit Test Explorer anzeigen

Wir unterstützen jetzt die Assert.Multiple-Methode von NUnit, mit der mehrere Assertions geprüft werden können, ohne den Test nach dem ersten Fehler abzubrechen.

Die Zeitbereiche für die Gruppierung nach Dauer können direkt in den Optionen bearbeitet werden.

Verbesserte Barrierefreiheit

Diese Version bietet eine verbesserte Unterstützung für Screenreader wie JAWS, NVDA und Microsoft Narrator. Diese Screenreader haben jetzt einen besseren Zugriff auf:

  • Listen- und Baumelemente in ReSharper-Toolfenstern
  • Elemente im Optionsdialog
  • Elemente im Alt+Enter-Menü
  • Alle Go To-Dialoge
  • Das Code-Completion-Popup

x:Bind-Unterstützung

Gute Nachrichten für UWP-Entwickler: Die Unterstützung für kompilierte Bindungen mit x:Bind ist endlich verfügbar!

ReSharper löst x:Bind-Code korrekt auf und bietet mehrere Inspektionen mit passenden Quick-Fixes. Sie erhalten Warnungen bei fehlenden Eigenschaften-Settern, BindBack-Attributen und kollidierenden Überladungen. Darüber hinaus gibt es eine Reihe von Create from Usage-Quick-Fixes, um ein richtiges Feld, eine Eigenschaft oder eine Methode in C#-Codebehinds zu generieren.

Die IDE bietet Code-Completion und Parameterinfos für die Attribute propertyPath, BindBack und UpdateSourceTrigger innerhalb eines x:Bind-Ausdrucks.

Die Refactorings Change Signature und Safe Delete erkennen jetzt Methodenverwendungen in XAML-Code und aktualisieren sie entsprechend. Außerdem können Make Static/Const und Encapsulate Field direkt aus XAML-Code aufgerufen werden, und XAML-Verwendungen werden beim Aufruf aus C#-Codebehinds korrekt aktualisiert.

Die Nullability-Erkennung wurde in die x:Bind-Codeanalyse integriert. ReSharper zeigt jetzt Null-bezogene Inspektionen direkt im XAML-Code an, wenn der C#-Code CanBeNull- oder NotNull-Attribute enthält, z. B. „Possible System.NullReferenceException“ und „Possible null assignment to non-nullable entity“ für Argumente einer Methode, die in einem propertyPath verwendet wird.

Auch andere ReSharper-Funktionen wie Find Usages und Go to Declaration berücksichtigen x:Bind-Bindungen.

Befehlszeilentools von ReSharper

In Version 2020.1 wurde Rider auf MacOS und Linux von Mono auf .NET Core umgestellt. Ab dieser Version werden die ReSharper-Befehlszeilentools unter Windows, Linux und macOS auf .NET Core ausgeführt.

Bitte beachten: Die ReSharper-Befehlszeilentools werden nicht mehr mit Mono ausgeliefert, und die Tools für MacOS und Linux setzen jetzt .NET Core 3.1 voraus.

Ein weiterer Vorteil der Umstellung von Mono auf die .NET-Core-Runtime besteht darin, dass die ReSharper-Befehlszeilentools jetzt als globales .NET-Core-Tool installiert werden können. Führen Sie zur Installation den folgenden Befehl aus:

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

Die Ausführung der Tools erfolgt mit jb tool_name [Optionen], zum Beispiel:

jb inspectcode projektmappe.sln -o=<pathToOutputFile>

Typ- und Projektabhängigkeitsdiagramme

In dieser Version wurde die yFiles-Engine, mit der das Diagramm erstellt wird, auf die neueste Version aktualisiert. Zusätzlich zu unseren eigenen Optimierungen bringt die neue yFiles-Version eine weitere Performance-Verbesserung beim Zeichnen des Diagramms.

Jetzt ist es möglich, das erstellte Diagramm in neue Formate zu exportieren:

  • GraphML-Dateiformat für die weitere Analyse in externen Tools
  • XPS-Dateiformat zum Drucken großer Diagramme, die nicht im PNG-Format exportiert werden können

Das Diagramm-Toolfenster unterstützt jetzt das dunkle Design von Visual Studio.

Navigationsupdates

Die Navigation zu den Verwendungen von Typen aus externen Assemblies ist jetzt um einiges einfacher. ReSharper kann direkt von den Go to Type-Suchergebnissen zu Find Usages navigieren. Probieren Sie es aus: Suchen Sie nach einem Typ, markieren Sie ihn mit der Tastatur oder durch Hinbewegen der Maus und rufen Sie mit den entsprechenden Tastenkürzeln Find Usages oder Go to Usage auf.

Ab Version 2020.2 können Sie einige ReSharper-Aktionen – zum Beispiel die Anzeige der Kurzdokumentation – direkt aus den Dialogen Go to Symbol und Go to File Member aufrufen, indem Sie die Tastenkürzel drücken, die im jeweiligen Tastenbelegungsschema definiert sind.

Neue Peek-Aktionen

Mehrere neue Peek-Aktionen wurden hinzugefügt, um das Ergebnis gängiger ReSharper-Aktionen in einer Peek-Definition-Ansicht anzuzeigen.

Rufen Sie die Aktion Peek Implementation auf, um die Implementierung in einer Peek-Ansicht zu öffnen. Klicken Sie dazu mit dem Mausrad, während Sie Strg+Alt gedrückt halten, oder drücken Sie Strg+Alt+Q, während sich der Textcursor auf einem Symbol befindet.

Rufen Sie die Aktion Peek Base Symbols auf, um alle Basissymbole in einer Peek-Ansicht aufzulisten. Drücken Sie zum Ausführen einfach Umschalt+Alt+Q auf einem Symbol.

Rufen Sie die Aktion Peek Usages auf, um die Verwendungen in einer Peek-Ansicht anzuzeigen. Klicken Sie dazu mit dem Mausrad auf ein Symbol, während Sie Strg gedrückt halten.

Refaktorierungen

In dieser Version wurde der Conflicts-Dialog als separater Schritt in der Refactorings-Oberfläche implementiert. Die bisher verwendete einfache Liste wurde durch eine nach Dateien gruppierte Baumstruktur ersetzt.

Wenn die Refactorings Introduce parameter oder Introduce field für einen Ausdruck aufgerufen werden, fragt ReSharper nach, auf welchen Teil des Ausdrucks das Refactoring angewendet werden soll.

Verbesserte Unreal-Engine-Funktionen

Unreal Engine

ReSharper C++ 2020.2 unterstützt das Unreal-Engine-Projektmodell, einschließlich optimierter Autoimport-Vorschläge für include-Direktiven und Unterstützung für verschiedene Projektmappen-Konfigurationen. ReSharper C++ hält sich zudem enger an die Unreal-Engine-Richtlinien. Dazu wurden die Severities der Inspektionen und die Aktionen zur Codegenerierung angepasst.

Um die Navigation zu vereinfachen, behandelt Search Everywhere/Go To Symbole aus Engine-Quellen jetzt genauso wie Bibliothekssymbole. Es gibt auch mehrere neue Inspektionen, die Sie bei der Umsetzung der Unreal-Engine-Richtlinien unterstützen und Sie daran erinnern, die Projektdateien im Unreal Editor zu aktualisieren.

Bessere C++/CLI-Unterstützung

C++/CLI

Da die ReSharper-Lizenz nun sowohl ReSharper als auch ReSharper C++ umfasst, wurde die Unterstützung für C++/CLI – das eine Brücke zwischen den Sprachen bildet – an vielen Stellen aktualisiert, und die Interoperabilität zwischen C++/CLI und C# wurde verbessert.

ReSharper C++ findet abgeleitete Symbole in C#-Code, und Go to Base Symbols sowie Go to Derived Symbols funktionieren jetzt mit importierten CLR-Entitäten.

ReSharper C++ schaut Ihnen jetzt bei der Speicherallokation über die Schulter und schlägt einen Quick-Fix vor, um gcnew durch new bzw. umgekehrt zu ersetzen, wenn der Zieltyp ungültig ist. Eine weitere Inspektion warnt Sie, wenn Sie bei einer verwalteten Klasse oder Schnittstelle den C++-Bezeichner final verwenden. Die IDE schlägt dann vor, stattdessen sealed zu verwenden. Außerdem können Sie jetzt mit einem Quick-Fix Casts im C-Stil durch safe_cast ersetzen.

Das ist neu in ReSharper C++

Assembly Explorer

  • NuGet-v3-Paketfeeds werden jetzt an folgenden Stellen unterstützt: Open from NuGet, Open from NuGet packages cache und Open NuGet packages.config.
  • Elemente mit ähnlichen Namen werden jetzt in den Dialogen Open from NuGet und Open from NuGet packages cache in einem ausklappbaren Eintrag zusammengefasst.
  • NuGet-Pakete werden alphabetisch sortiert.

Weitere Features

Formatierung

ReSharper richtet jetzt Spalten mit ähnlichem Code korrekt aus, auch wenn nur ein Teil der ausgerichteten Gruppe formatiert wird, sodass beim Hinzufügen eines Semikolons oder einer Klammer die Ausrichtung nicht mehr verloren geht.

.NET-Tools und -Erweiterungen

dotCover dotUltimate

Es gibt einige Verbesserungen im dotCover-Konsolenrunner:

  • Mit dem Parameter --reportype = SummaryXml können Sie einen neuen zusammenfassenden Bericht erstellen, der angibt, wie viele Klassen, Methoden und Anweisungen insgesamt abgedeckt sind.
  • Der Runner kann jetzt mehrere Berichtstypen gleichzeitig erstellen: --reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • Der Runner für Linux (Debian, Ubuntu) kann jetzt Analysen auf ARM64-Systemen durchführen.

Weitere Informationen

dotTrace dotUltimate

dotTrace kann sowohl als eigenständiges Programm als auch bei der Rider-Integration den nativen Teil von Mono/Unity-Anwendungen unter Windows profilen. Wenn Sie eine Sitzung mit der Option Enable native profiling starten, werden in den Performance-Snapshots sowohl native als auch verwaltete Aufruflisten angezeigt. Diese Funktion kann für die Analyse von Leistungsengpässen in Unity-Spielen hilfreich sein.

Auch beim dotTrace-Konsolenprofiler gibt es mehrere Verbesserungen:

  • Sie können die Profiling-Sitzung steuern (Snapshots erstellen, vom profilierten Prozess trennen usw.), indem Sie Befehle an stdin oder an eine Datei senden.
  • Der Linux-Profiler (Debian, Ubuntu) kann jetzt Anwendungen auf ARM64-Systemen profilen.

Weitere Informationen

dotMemory dotUltimate

Sie können jetzt angeheftete Objekte als separaten Objektsatz öffnen. Auch Objekte, die von den GC-Roots aus nicht erreichbar sind, lassen sich als separater Objektsatz öffnen.

Am dotMemory-Befehlszeilenprofiler wurden folgende Verbesserungen vorgenommen:

  • Der Befehlszeilenprofiler steht jetzt nicht nur auf Windows, sondern auch auf Linux und MacOS zur Verfügung.
  • Der Linux-Profiler (Debian, Ubuntu) kann Anwendungen jetzt nicht nur auf x64-Systemen, sondern auch auf ARM64-Systemen profilen.

Weitere Informationen

dotPeek 

Bei dotPeek wurde die Unterstützung für die neuesten C#-Versionen weiter verbessert. Die neue Version bietet unter anderem:

  • Ausdruckskörper-Member
  • Throw-Ausdrücke
  • Standardparameter und benannte Argumente
  • NullablePublicOnly-Attribut

Weitere Informationen

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar