Das ist neu in ReSharper 2020.3

ReSharper 2020.3 bietet Kompatibilität mit C# 9-Funktionen, einen neuen Blickwinkel auf Inlay-Hinweise, Avalonia-Unterstützung, integrierte dynamische Programmanalyse und eine Reihe von kleinen Updates, die Ihnen bei der täglichen Entwicklung helfen.

Herunterladen

Kostenlose 30-Tage-Testversion verfügbar

C#-Unterstützung

Source Generators sind mit ziemlicher Sicherheit das Feature, über das im C#-Compiler am meisten gesprochen wird. Das ist verständlich: die Fähigkeit, neuen Code direkt im Kompilierungsprozess zu erzeugen und sofort zu verwenden, ist aufregend und könnte in vielen verschiedenen Situationen nützlich sein.

Was kann ReSharper hier tun? Nun, es kann das tun, was es am besten kann und die generierten Dateien bei Refaktorierungen berücksichtigen, Code-Editor-Funktionen bereitstellen und Ihnen helfen, zum generierten Code zu navigieren.

Partielle Methoden dürfen jetzt Ausgabeparameter, nicht-void Rückgabetypen und jede Art von Accessibility auslassen, was sie bei Source Generators nützlicher macht. Source Generators können die definierende Deklaration der partiellen Methode verwenden, um das Verhalten des generierten Codes anzupassen.

Eine weitere tolle Ergänzung sind nur init-Eigenschaften. Solche Eigenschaften können nur während der Initialisierung eines Objekts gesetzt werden. Endlich können Sie also Objekt-Initialisierer verwenden, ohne die Eigenschaft als änderbar anzugeben!

ReSharper kennt nur init-Eigenschaften und berücksichtigt sie bei der Vervollständigung Ihres Codes, führt eine generative Vervollständigung durch, analysiert, ob sich die Eigenschaft irgendwo geändert hat und bietet einen Quick-Fix an, um sie änderbar zu machen, falls Sie Ihre Meinung ändern.

Der perfekte Ort, um init anzuwenden, sind neue record-Typen. Dies sind Referenztypen mit einer Wertsemantik, die Ihnen helfen, Unveränderlichkeit zu erreichen, diesmal jedoch für das gesamte Objekt. Auch hier hält ReSharper mit der Sprache Schritt – von Quick-Fixes für die Wahl des bevorzugten Deklarationsstils bis hin zur grundlegenden Completion-Unterstützung.

Positionale Records haben eine vom Compiler generierte Deconstruct()-Methode. ReSharper unterstützt alle Dekonstruktionsfunktionen in solchen Objekten. Beachten Sie das Popup-Fenster beim Einfügen einer Variablen: Es bietet Ihnen die Wahl zwischen einer einzelnen Variable oder einer Dekonstruktionsdeklaration. Dieselbe Wahl wird angeboten, wenn eine Funktion auf eine Eigenschaft eines Record-Objekts zugreift.

Um von den großen Dingen abzurücken: Lokale Funktionen dürfen nun auch Attribute haben (sowie Parameter und Typparameter in lokalen Funktionen). Dies wird von ReSharpers Quick-Fixes unterstützt, einschließlich der praktischen Funktion, die Methode als [NotNull] oder [CanBeNull] durch Drücken von ! oder ? zu kommentieren.

Ein weiterer nützlicher Zusatz in C# 9 ist die Möglichkeit, einzigartige Programme zu schreiben. Keine Probleme mehr mit den Programmklassen: Sie können Ihren Einstiegspunkt-Code direkt nach den Using-Direktiven platzieren! Auch für die Arbeit mit Anweisungen der obersten Ebene gibt es eine Hilfe. Es gibt zwei Regeln für Anweisungen der obersten Ebene: Sie sollten vor jedem Typ oder Namespace stehen, und nur eine einzige Datei im Projekt kann Code der obersten Ebene enthalten. Beide Regeln sind leicht zu brechen, wenn Sie Code neu anordnen, kopieren und einfügen. ReSharper bietet Quick-Fixes, um dies zu beheben, indem Sie Ihren Code der obersten Ebene an den Anfang oder in eine andere Datei verschieben.

Da Code der obersten Ebene gleich Code ist, gibt es auch für diesen Code Refaktorierungen: Extract local variable und Extract method.

Bei Zieltyp-basierte neuen Ausdrücken in C# 9 können wir den Typ nach dem neuen Schlüsselwort weglassen, wenn er aus dem Verwendungskontext abgeleitet werden kann. ReSharper bietet volle Unterstützung für diese Funktion, einschließlich der Möglichkeit, Verwendungen des Konstruktors zu finden und den bevorzugten Syntaxstil zu konfigurieren. Letzteres ermöglicht Ihnen die Verwendung der new()-Syntax, wenn ein erzeugter Typ offensichtlich ist, während in anderen Fällen eine explizite Typspezifikation erzwungen wird.

Übrigens, ReSharper's neue Typnamen-Hinweise können helfen, wenn alles new() in Ihrem Code außer Kontrolle gerät.

Mit der Kovarianz des Rückgabetyps sind Sie nicht mehr daran gebunden, in überschreibenden Member den gleichen Typ zurückzugeben wie in der Methode der Basisklasse. Es besteht keine Notwendigkeit mehr, eine Umgehung des Problems zu implementieren, um einen spezifischeren Typ zurückzugeben.

Pattern Matching entwickelt sich in der neuen Sprachversion weiter. Übereinstimmende Ausdrücke erlauben nun die Verwendung relationaler (<, >, usw.) und logischer (not, or, and) Muster, wobei ein Großteil der Ausführlichkeit der alten switch-Konstrukte wegfällt. ReSharper kann Sie dabei unterstützen, die Muster zu analysieren und sie im gewünschten Stil neu zu schreiben.

Als schließlich die Lambda-Verwerfungsparameter eingeführt wurden, hielten wir es für praktisch, einen Quick-Fix für sie hinzuzufügen.

Das war's ungefähr mit den wichtigsten sprachlichen Highlights. Es wurden kleinere Verbesserungen an der Sprache hinzugefügt, die auch in ReSharper 2020.3 unterstützt werden. Dazu gehören Zieltyp-basierte bedingte Ausdrücke, statische Lambdas, erweiterte GetEnumerator-Methoden in foreach, Funktionszeigertypen und native ganzzahlige Typen.

Inlay-Hinweise

Wir glauben an die Kraft der Inlay-Hinweise, aber wir wissen auch, dass die Umgebung so sauber und ordentlich wie möglich gehalten werden sollte. Wir haben uns einen neuen "Push-to-Hint"-Mechanismus für Inlay-Hinweise ausgedacht, um das Beste aus beiden Welten zu erhalten.

Im Push-to-Hint-Sichtbarkeitsmodus werden Hinweise nicht standardmäßig angezeigt. Sie werden angezeigt, wenn Sie Strg gedrückt halten (und werden ausgeblendet, sobald Sie sie loslassen) oder zweimal Strg drücken (in diesem Fall bleiben sie sichtbar, bis Sie Strg erneut zweimal drücken).

Wir haben recht detaillierte Einstellungen vorgesehen: Sie können ReSharper mitteilen, welche Hinweise immer aktiviert sein sollen, welche beim Drücken angezeigt werden sollen und welche Sie nicht wirklich interessieren. Verwenden Sie die 'Visibility'-Einstellung für jeden Hinweistyp.

Eine weitere Funktion, an der wir gearbeitet haben, sind die Hinweise für implizite Typ-Casts. Solche Casts können zu Datenverlust oder einer Performance-Verschlechterung führen, und ReSharper kann nun anzeigen, wo ein impliziter Cast stattfindet.

Wenn Sie mit Strg+Klick auf einen Hinweis zur Typkonvertierung klicken, gelangen Sie zur Implementierung der impliziten Konvertierung.

Inlay-Hinweise für XAML, die bereits in der Vorgängerversion verfügbar waren, haben jetzt auch das übliche Kontextmenü, mit dem Sie ihr Design konfigurieren können.

Formatierer

Wir verbessern laufend die Formatierungs-Engine mit weiteren detaillierten Einstellungen. Dies ist, was wir in dieser Version hinzugefügt haben.

Eine Reihe von Einstellungen um Eigenschaftsmuster anzuordnen: Sie können ReSharper anweisen, ein einfaches Muster auf einer einzelnen Zeile zu platzieren, und auch, wie lange Muster eingebunden werden sollen. Es gibt auch eine Einstellung, Eigenschaftsmuster in Spalten auszurichten.

Leere Zeilen können jetzt um Eigenschafts- oder Ereignis-Accessors herum hinzugefügt werden.

Für Visual Basic gibt es die Option, nach dem unären +/- Operator ein Leerzeichen hinzuzufügen.

Es gibt auch einige Updates für die .editorconfig-Unterstützung. ReSharper unterstützt jetzt die Roslyn-Eigenschaften: file_header_templates, dotnet_sort_system_directives_first, und dotnet_separate_import_directive_groups.

Es gibt auch einen neuen Parameter "Spaces around '='" beim Export nach .editorconfig. Er wird in bestehenden Dateien automatisch erkannt und kann für neue Dateien manuell gesetzt werden. Er ist standardmäßig auf "true" gesetzt.

Dynamische Programmanalyse

Wir haben ReSharper um die Dynamische Programmanalyse (DPA) erweitert, um Sie bei der Analyse und Erstellung von besserem Code zu unterstützen, indem Closures und Zuweisungen zu großen und kleinen Objekt-Heaps im Memory erkannt werden.

Das Beste daran ist, dass Sie nichts weiter tun müssen als Ihre übliche Routine des Programmierens, Ausführens und Debuggens. DPA läuft im Hintergrund weiter und ist nach jedem Start Ihres Projekts mit einem Bericht fertig. Achten Sie einfach auf das Symbol in der rechten unteren Ecke.

Weitere Informationen über DPA finden Sie in diesem Blogbeitrag.

Strukturelles Entfernen

Vielleicht ist Ihnen die strukturelle Navigation bereits vertraut: Sie ermöglicht es Ihnen, Codeabschnitte nach ihrer Struktur, einem Schlüsselwort, einem Block, einer Methode usw. auszuwählen.

Wenn Sie die Aktionen Extend oder Shrink Selection verwenden, erfordern sie einen weiteren Schritt, um ein Komma, einen Punkt oder eine Klammer auszuwählen, was leicht zu übersehen ist. Wenn Sie einen Block löschen würden, würde dies zu einem Codefehler führen. ReSharper wird in diesem Fall ein wenig aufräumen: Wenn etwas strukturell ausgewählt wurde, versucht ReSharper, es strukturell zu löschen, wenn Sie die Rücktaste oder Entfernen drücken.

Befehlszeilentools

Wenn Sie mit einer großen Code-Basis arbeiten, dauert jede lösungsweite Operation sehr lange, bis sie ausgeführt wird. Haben Sie schon einmal darauf gewartet, dass nach der Änderung einiger Dateien die gesamte Lösung neu formatiert wird? Nun, jetzt können Sie das Konsolentool CleanupCode ausführen, ohne auf die Lösungsdatei zu zeigen: Geben Sie einfach einen Satz von Dateien oder Ordnern an. Die Befehlszeile sieht dann so aus: cleanupcode.exe [Path to folder] [Path to file] [Path to another file]

Bitte beachten Sie, dass das Tool nur den Code formatiert - eine Bereinigung ist in diesem Modus nicht verfügbar.

Eine weitere Sache, die in unseren Konsolentools seit einiger Zeit fehlte, war die Unterstützung für Plugins. Nun, es ist wieder da! Im Moment ist sie nur unter Windows verfügbar. Um es nutzen zu können, müssen Sie die ID des Plugins kennen. Gehen Sie zum JetBrains Marketplace, öffnen Sie die Plugin-Seite, gehen Sie auf die Registerkarte 'Versions', klicken Sie auf eine beliebige Version und es wird Ihnen die Plugin-ID angezeigt. Benutzen Sie danach die Taste -x=[ID] zusammen mit der Plugin-ID, wenn Sie InspectCode oder CleanupCode starten, und das Konsolentool wird das Plugin automatisch herunterladen und aktivieren: cleanupcode.exe -x=[ID] [Path to solution file].

Bitte beachten Sie, dass das Plugin mit der Version des Tools kompatibel sein muss. Also, plugins are not yet supported if you’re using the .NET Core global tools mechanism to install ReSharper’s command line tools.

Navigation

Hatten Sie jemals Schwierigkeiten bei der Textsuche? Vielleicht nach Strings in Ihrem Code oder nach einem Kommentar? Oder hat ein Tippfehler in Ihrem Text Sie daran gehindert, tatsächlich etwas zu finden?

Find Text führt nun neben der exakten Suche auch eine allgemeine 'Fuzzy'-Suche durch, wobei mögliche Tippfehler und fehlende Wörter berücksichtigt werden. Die Ergebnisse werden unterhalb der Ergebnisse der regulären Substring-Suche im Abschnitt Fuzzy angezeigt. Tipp: Diese Funktion kann sehr hilfreich sein, wenn Sie nach einem bestimmten formatierten String-Build suchen.

Avalonia-Unterstützung

Codeanalyse

Wie für alle WPF-ähnlichen Frameworks typisch ist, bietet die Codeanalyse eine Vielzahl gängiger Code-Inspektionen mit entsprechenden Quick-Fixes sowohl für C#-CodeBehind- als auch für .axaml-Dateien, einschließlich “Possible ‘System.NullReferenceException’” und “Class/Property {...} is obsolete: Use {...}”.

Zusätzlich zu den üblichen WPF-Inspektionen gibt es viele Avalonia-spezifische Inspektionen, wie z. B. “Path to resource is case-sensitive” oder “ColumnDefinitions tag can be converted to attribute” Inspektionen mit Quick-Fixes. Für letztere gibt es eine Kontextaktion für das Attribut ColumnDefinitions="*,Auto,*", um es wieder in ein <Grid.ColumnDefinitions>-Tag umzuwandeln.

Wir haben eine ordnungsgemäße Unterstützung für die Syntax “$self", “$parent”, “^” und “#” in Avalonia-Bindungen sowie eine ordnungsgemäße Validierung von Indizierungen im Array $parent[] hinzugefügt.

Es gibt erweiterte Unterstützung für CompiledBinding und die x:CompileBindings-Erweiterung. ReSharper weiß, dass hier DataType erforderlich ist und fordert Sie auf, diesen für Bindungen in Ihrem Code anzugeben.

Der Quick-Fix “Create from usage” ist für alle Arten von Avalonia-Eigenschaften verfügbar.

Die Avalonia XAML-Unterstützung versteht jetzt das CSS-ähnlichen Styling-System.

Inlay-Hinweise helfen Ihnen, den Code vor Ihnen besser zu verstehen.

Code-Completion

Code-Completion und Parameter-Informationen sind für alle XAML-Schlüsselwörter, alle Arten von Markup-Erweiterungen, x:Name, Style Eigenschaften, Source Eigenschaften für StyleInclude und vieles mehr verfügbar.

Navigation

Sie können leicht zu kompilierten Bindungsdatentypen, gebundenen Eigenschaften, Avalonia-Steuerungstyp und x:Name-Deklarationen navigieren. ReSharper kann auch direkt von XAML zu dekompiliertem externen Code einschließlich Style-Setter-Eigenschaften und zu referenzierten xmlns-Namespaces wechseln.

Find Usages

Find Usages hilft Ihnen, alle Verwendungen von Methodenbindungen, x:Name-Attributen, Style-Klassen und -Setters sowie alle Arten von Eigenschaften zu finden.

Refaktorierungen

Die Refactorings Rename und Safe Delete erkennen jetzt alle Arten von Verwendungen im Avalonia XAML-Code und aktualisieren sie entsprechend.

Hierarchie und Code-Struktur

Sie können die Hierarchie und Struktur des Avalonia XAML-Codes beobachten.

Decompiler-Updates

Der integrierte Decompiler von ReSharper hat ebenfalls Updates zur Unterstützung weiterer C#-Funktionen erhalten. Wir haben auch den Synchronisationsmechanismus zwischen IL Viewer und den Quellcode verbessert.

Speziell für übergeordnete Anweisungen haben wir einen Knoten <Top-level Entry Point> im Assembly Explorer hinzugefügt. Sie können auf diesen Knoten doppelklicken oder die Kontextmenü-Navigation auf diesem Knoten verwenden, um zu den tatsächlichen Anweisungen der obersten Ebene im dekompilierten Code zu gelangen.

Private Source Link wird jetzt unterstützt. Nachdem Sie zu den externen Quellen navigiert haben, die eine Verbindung zu einem privaten Quellserver erfordern, zeigt ReSharper eine Benachrichtigung an und lässt Sie Ihre Anmeldedaten eingeben; es sei denn, Sie haben diese bereits in den Einstellungen von Visual Studio angegeben; in diesem Fall werden sie automatisch angewendet (für GitHub und BitBucket).

Blazor

Wir verbessern laufend die Unterstützung für Blazor. Bei dieser Iteration ging es darum, generische Typparameter und ihre Typinferenz aus Verwendungen zu unterstützen und Leistungsrückschläge beim Öffnen von Lösungen zu eliminieren. Die vollständige Liste der behobenen Probleme finden Sie in unserem öffentlichen Bug-Tracker.

Perfekter Unreal-Engine-Begleiter

Unreal Engine

ReSharper C++ 2020.3 bietet eine nahtlose Integration mit UnrealHeaderTool, um Ihnen zu helfen, Probleme abzufangen, die normalerweise erst zur Kompilierungszeit entdeckt werden. ReSharper C++ führt UnrealHeaderTool im Hintergrund aus und zeigt die Analyseergebnisse in Echtzeit direkt im Editor an.

Um seine HLSL-Unterstützung zu verbessern, bringt ReSharper C++ Kontrollflussanalyse-Inspektionen in Shader-Dateien. Durch die Live-Verfolgung von Änderungen an Build-Konfigurationsdateien kann ReSharper immer das aktuellste Projektmodell verwenden.

Weitere Informationen

Noch bessere C++20-Unterstützung

C++20

ReSharper C++ 2020.3 implementiert die C++20-Änderungen der Vergleichsregeln. Mit umfangreichen Inspektionen und Fehlermeldungen können Sie sich auf ReSharper C++ verlassen, wenn Sie genau verstehen müssen, wie sich Ihr Code verhält. Die neuen Quick-Fixes erleichtern Ihnen die Arbeit mit Vergleichs-Operatoren.

Darüber hinaus bietet ReSharper C++ 2020.3 neue Inspektionen, die Sie bei der Übernahme der C++20-Reihenbibliothek unterstützen, und fügt Unterstützung für den in Visual Studio 16.8 eingeführten Standardmodus der C++20-Coroutinen hinzu.

Weitere Informationen

Timeline-Inspektionen dotUltimate

Timeline-Inspektionen

dotMemory verwendet die Timeline-Daten, um automatische Inspektionen direkt auf dem Timeline-Diagramm zu ermöglichen.

Derzeit stehen drei Inspektionen zur Verfügung:

  • Hoher Garbage Collection Druck
  • Angeheftete Objekte in Gen0
  • Schnelle Wachstumsrate für Large Objects Heap

Weitere Informationen

Verbesserte kontinuierliche Tests dotUltimate

Verbesserte kontinuierliche Tests

Jetzt können Sie verfeinern, welche Projekte erstellt werden sollen, wenn eine kontinuierliche Testsitzung ausgelöst wird. Dadurch können Sie kontinuierliche Testsitzungen beschleunigen. Das Feature funktioniert sowohl in Visual Studio als auch in Rider.

Weitere Informationen

Weitere Updates

  • Unterstützung für nullbare Annotationen bei nicht eingeschränkten generischen Typen (einschließlich Standardeinschränkung).
  • Wir haben ein kleines Update für die TypeScript-Unterstützung implementiert: ReSharper unterstützt jetzt Nullish-Coalescing und die optionale Verkettung.
  • Wir haben einen neuen Quick-Fix hinzugefügt, die Ihnen hilft, eine sequentielle Musterprüfung in eine komplexe Pattern-Matching-Prüfung umzuwandeln.
  • Im Rahmen des Refaktorierungs "Change Signature" haben wir das Tool zum Einstellen des Standardwerts für den hinzuzufügenden Parameter neu gestaltet - das Tool, das geöffnet wird, wenn Sie "Resolve with call tree" wählen. Die Navigation zum Code ist jetzt durch einen Doppelklick auf einen Knoten verfügbar. Es gibt eine neue Option namens "Create default parameter", die Sie direkt in den Code führt, um den Wert festzulegen. Schließlich werden für verschiedene in der Baumstruktur ausgewählte Fixes unterschiedliche Farben angewendet. Wir hoffen, dass dies die Auflösung von Verwendungen erleichtert!
Herunterladen

Kostenlose 30-Tage-Testversion verfügbar