Das ist neu in ReSharper 2021.1

ReSharper 2021.1 bietet eine aktualisierte Codeanalyse, Unterstützung für ASP.NET-Routenvorlagen, Umbenennung von Tupelkomponenten und vieles mehr.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar

Codeanalyse

Weitere zusammenführbare Codemuster

Die Inspektion Merge into pattern kann jetzt mit viel mehr Codemustern umgehen. Zusammenführen von Nullprüfungen mit anderen Prüfungen zu einer einzigen Musterprüfung:

Umwandlung von Prüfungen mit ?.-Ausdrücken für bedingten Zugriff in verschachteltes Pattern-Matching:

Verflachung von if-Hierarchien durch Zusammenführen der Prüfungen:

Und schließlich können Muster in einem einfachen Dekonstruktionsmuster var (a, b) durch Erweiterung in die vollständige Form zusammengeführt werden:

Erweiterte C#-9.0-Unterstützung

Wir haben die Unterstützung für Records in C# 9.0 erweitert. Die Refactorings Extract interface und Extract superclass funktionieren jetzt mit Record-Deklarationen. Dasselbe gilt für File Layout und die Features im Zusammenhang mit der XML-Dokumentation.

Wir haben eine Reihe von neuen Inspektionen und Aktionen eingeführt. Redundant explicit property declaration für Eigenschaften in Record-Deklarationen kann hilfreich sein, wenn Sie Ihren Code zu Records mit Positionsparametern und impliziten Eigenschaftsdeklarationen migrieren möchten. Ein entsprechender Quick-Fix Remove explicit property ist ebenfalls enthalten.

Wenn Sie einen Record in eine Klasse umwandeln möchten, kümmert sich die Aktion To class um die Positionsparameter und den primären Konstruktor. Eine Aktion To record für die umgekehrte Umwandlung steht ebenfalls zur Verfügung.

Wenn Sie Positionsparameter und einen primären Konstruktor in gewöhnliche Eigenschaften, einen normalen Konstruktor und eine explizite Deconstruct()-Methode umwandeln möchten, hilft Ihnen die Kontextaktion To explicit constructor.

Wir helfen Ihnen auch, Ordnung in Ihrem Code zu schaffen: Die Inspektion Redundant 'record' type declaration body und der dazugehörige Quick-Fix ersetzen einen leeren Record-Typdeklarationskörper durch ein Semikolon.

Find usages sucht nun nach den Verwendungen des primären Konstruktors eines Records sowie den Verwendungen einer impliziten Deconstruct()-Methode.

Temporäre Variable in Inline-Wert umwandeln

Wir freuen uns, Ihnen eine neue Inspektion vorstellen zu können: Inline temporary variable. Manchmal verwenden wir in einem Programm denselben Wert unter verschiedenen Namen. Wäre in solchen Fällen nicht eine transparentere Lösung möglich? Sicher – und ReSharper hilft Ihnen, diese Lösung umzusetzen.

Dabei kann sogar der eine oder andere Bug zum Vorschein kommen, wenn die temporäre Variable mit einem anderen Wert initialisiert oder später im Code geändert werden sollte.

Weitere Neuerungen

Logische not-Muster können Ihre Typprüfungen viel lesbarer machen. ReSharper bietet Ihnen daher die Möglichkeit, die !()-Syntax durch ein not-Muster zu ersetzen.

ReSharper schlägt nun vor, statt Slice und Substring den Bereichsoperator zu verwenden, wenn dadurch der Code einfacher wird.

Die Inspektion Namespace does not correspond to file location wird jetzt in Dateien mit Top-Level-Code unterdrückt.

Eine weitere neue Inspektion prüft, ob eine Auto-Eigenschaft durch eine berechnete Eigenschaft ersetzt werden kann. Ein passender Quick-Fix kann die Ersetzung gleich durchführen.

In Bezug auf die Unterstützung von C# 10.0 haben wir bereits die ersten Schritte unternommen und ReSharper das Arbeiten mit dem Feature Constant interpolation strings beigebracht.

In einem kommenden Blogbeitrag werden wir die Codeanalyse in Version 2021.1 detailliert beleuchten – bleiben Sie gespannt!

Routenvorlagen in ASP.NET Core

Routenvorlagen werden in MVC-Anwendungen häufig verwendet, um die Zuordnung von HTTP-Anfragen zu den Endpunkten der Anwendung zu konfigurieren. In Version 2021.1 unterstützt ReSharper Routenvorlagen durch Strukturnavigation, Inspektionen und Quick-Fixes. Sehen wir uns einige Beispiele an.

Die einfachsten Inspektionen prüfen Routenvorlagen auf Syntaxfehler: versehentliche Verwendung einer Catch-All-Route in der Mitte der Vorlage, Deklarieren des Catch-All-Parameters als optional, Angabe eines Standardwerts für einen optionalen Parameter usw.

Routenparameter können zu interessanten Problemen führen. Was passiert, wenn Sie im Controller und in der Aktion einen identisch benannten Parameter deklarieren? ReSharper weist Sie darauf hin.

Andererseits kommt es auch vor, dass Parameter fehlen. In diesem Fall schlägt ReSharper vor, sie entweder über das Attribut des Controllers oder über die Aktion hinzuzufügen. Wenn es eine Typeinschränkung gibt, wird diese verwendet, um den Typ des Parameters abzuleiten.

Apropos Einschränkungen: Diese eignen sich gut für eine Codeanalyse. ReSharper prüft, ob die angewendete Einschränkung korrekt ist und ob ein Parameter die Einschränkung tatsächlich erfüllt.

ReSharper versucht zudem anhand der Einschränkung zu erkennen, ob der Parametertyp enger definiert werden könnte, und schlägt in diesem Fall vor, den Typ zu ändern. Wenn Sie absichtlich einen anderen Typ für den Parameter verwendet haben, können Sie den Vorschlag einfach verwerfen.

ReSharper erkennt auch benutzerdefinierte Einschränkungen. Sollten sie einmal nicht erkannt werden, annotieren Sie Ihre Einschränkungsklasse mit dem Attribut [RouteParameterConstraint], das von JetBrains.Annotations bereitgestellt wird.

Wie bei anderen Features aus unserem Standard-Funktionsumfang stehen Ihnen Funktionen zur Code-Completion, Strukturnavigation und Codeumstellung zur Verfügung.

Sie müssen Routenparameter nicht mehr manuell umbenennen: Das Rename-Refactoring unterstützt Sie dabei.

Alle oben genannten Features funktionieren derzeit für attributbasiertes Routing. Wir freuen uns auf Ihr Feedback zu diesen Neuerungen.

Weitere Informationen zu den Routenvorlagen in ASP.NET Core finden Sie in diesem Blogbeitrag.

Tupel-Elemente umbenennen

Benannte Tupel gehören seit C# 7 zum Alltag, aber bisher mussten ihre Komponenten manuell umbenannt werden. Damit ist jetzt Schluss – Sie können nun einfach das Refactoring verwenden.

Navigation

Eine neue Navigationsaktion ist ebenfalls verfügbar: Navigate to Windows Explorer. Sie finden sie im Menü Navigate | Navigate to. Alternativ können Sie Strg+Umschalt+A drücken und den Namen der Aktion eingeben. Dies kann für Dateiaktionen nützlich sein. Sie könnten zum Beispiel die Datei selbst oder deren Pfad innerhalb des Repositorys kopieren oder den VCS-Verlauf der Datei mit Git-Erweiterungen für Windows Explorer untersuchen.

Performance

Wir arbeiten zwar weiterhin daran, ReSharper in seine Einzelteile zu zerlegen, für den „Out-of-Process“-Modus anzupassen und wieder zusammenzusetzen – aber nichtsdestotrotz beheben wir konkrete Leistungsprobleme, wo immer wir sie finden. Hier sind einige Highlights.

  • Wir haben bei großen Projektmappen die mögliche Tippgeschwindigkeit in Razor-Dateien erhöht.
  • Die Anhebung der Eingabegeschwindigkeit kommt allen großen Dateien zugute, die von ReSharper-Analyzern untersucht werden.
  • Wir haben die Performance und Reaktionsschnelligkeit der Data-Tips im Debugger verbessert.
  • Durch einen optimierten Umgang mit gemeinsam verwendeten Dokumenten belegt ReSharper jetzt weniger Arbeitsspeicher.
  • Auch bei der Ausführung von JavaScript- und TypeScript-Unit-Tests wurde die Performance verbessert.

Formatierung und Codestile

Wir haben einige neue Einstellungen eingeführt:

  • Sie können jetzt auswählen, ob vor und innerhalb von Zieltyp-basierten new()-Klammern ein Leerzeichen gesetzt werden soll.
  • Der Zeilenumbruch vor einem Zuweisungsoperator kann jetzt aktiviert oder deaktiviert werden.
  • Label-Anweisungen können ausgerückt werden.

Bei benutzerdefinierten Namensregeln haben wir die Reihenfolge der Anwendung geändert – spezifischere Regeln gehen jetzt vor.

Und schließlich haben wir eine neue Aktion für die Auswahlformatierung hinzugefügt. Damit können Sie ReSharper anweisen, nur die Einrückungen des ausgewählten Codes anzupassen, anstatt eine komplette Neuformatierung durchzuführen.

Wir haben auch eine Reihe von Fehlern behoben – die Details finden Sie in unserem Issue-Tracker.

EditorConfig

EditorConfig wird in der .NET-Community immer beliebter, und wir verbessern kontinuierlich die Integration des Tools in ReSharper. Wir haben folgende Änderungen vorgenommen:

  • Das Lesen der Namensregel-Einstellungen aus EditorConfig und das Schreiben von benutzerdefinierten Namensregeln wurde verbessert.
  • Wenn die Namensregeln durch EditorConfig überschrieben werden, zeigt ReSharper eine Benachrichtigung in den Namenseinstellungen an.
  • Die EditorConfig-Option csharp_indent_case_contents_when_block wird jetzt unterstützt.

Unit-Tests

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. Dies bedeutet, dass Sie nicht mehr an die Frameworks gebunden sind, die wir unmittelbar unterstützen. Sie können die Funktion in ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest aktivieren.
  • Wir haben für Visual Studio 2019 die MSTest-Unterstützung in UWP-Projekten implementiert.
  • Einige von Ihnen sind auf das Problem der sogenannten „Spawn-Prozesse“ gestoßen: Manchmal bleibt ein vom Test-Runner gestarteter Prozess auch dann noch aktiv, wenn der Runner seine Arbeit beendet hat. Mit einer neuen Einstellung können Sie festlegen, wie in diesem Fall vorgegangen werden soll. Sie haben die Wahl zwischen folgenden Möglichkeiten: Benutzer fragen, nichts tun oder Prozess beenden. Und wenn Sie nach einem Prozess gefragt werden, wird Ihre Antwort unter ReSharper | Options | Tools | Unit Testing | Test Runner gespeichert. Sie können diese Einstellung jederzeit löschen, wenn Sie sich anders entscheiden.
  • Wir haben eine Reihe von Inspektionen für die AutoFixture-Bibliothek in NUnit implementiert. ReSharper prüft nun, ob der Typ des Testwerts korrekt ist, stellt sicher, dass das Attribut [InlineAutoData] keine redundanten Argumente enthält, und warnt Sie, wenn das [TestFixture]- oder [Test]-Attribut für die Testklasse oder -methode fehlt.
  • Wir haben die QUnit-Unterstützung auf Version 2.14.0 aktualisiert.

C++-Unterstützung

ReSharper C++ 2021.1 unterstützt mehrere neue Sprachmerkmale aus C++20 und C++17: Klassentypen in Nichttyp-Vorlagenparametern, Argument-Ableitungsregeln für C++20-Klassenvorlagen und noexcept als Teil des Funktionstyps. Es gibt auch neue Code-Completion-Vorschläge für Coroutinen, die sowohl bei der Standard-Completion als auch in Postfix-Completion-Vorlagen verfügbar sind: co_await, co_yield und co_return.

C++-Syntaxstil

Wir haben eine Sammlung von Syntaxstil-Einstellungen eingeführt, mit denen Sie bei Syntaxkonstruktionen Ihren bevorzugten Codestil durchsetzen können. Mithilfe von unterstützenden Inspektionen, Quick-Fixes und den Kontextaktionen Apply Syntax Style und Cleanup selection können Sie den neuen Stil problemlos auf Ihren Codebestand anwenden und neuen Code entsprechend formatieren.

Weitere Updates

  • Wir haben eine Aktion hinzugefügt, um GitHub-Links mit dem Feature Copy FQN zu kopieren. Beim Aufruf von Copy Fully-qualified name im Hauptmenü (ReSharper | Edit) oder mit dem Tastenkürzel Strg+Umschalt+A führt ReSharper den Kopiervorgang aus und öffnet ein Kontextmenü, in dem Sie aus einer Vielzahl von Formaten wählen können, falls Sie ein vom Standard abweichendes Format benötigen. Dieses Menü bietet jetzt auch GitHub-Links an.
  • Wenn Sie in C#, VB.NET oder JavaScript – einschließlich Razor-Pages – reguläre Ausdrücke in Zeichenfolgen verwenden, dürfte es Ihnen gelegen kommen, dass die Funktion zum Erweitern/Reduzieren der Auswahl jetzt auch in Injektionen funktioniert.
  • Wir bieten jetzt Hinweise zur Typkonvertierung für Tupelkonvertierungen.
  • In File Layout ist für Methoden die neue Einschränkung Body verfügbar. Damit können Sie unterschiedliche Regeln für Methoden mit Block- und Ausdruckskörper festlegen.

Neuer Startbildschirm in dotTrace und dotMemory dotUltimate

Wir haben den Startbildschirm in dotTrace und dotMemory komplett überarbeitet. Sie können jetzt viel einfacher neue Profiling-Sitzungen konfigurieren und starten, mit Snapshots arbeiten und andere grundlegende Vorgänge ausführen.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar