Ich habe eine kleine Roslyn-basierte Anwendung für die Code-Formatierung von VB.NET/C# Projekten basierend auf einem sample provided at codeplex. Diese Anwendung ist eine neue Version des älteren Code Formatter, die ich auf DTE, in dem basierend entwickelte ich auf jede Datei in einer bestimmten Lösung wie diese programmatisch Visual Studio Befehl ausführen Edit.FormatDocument
:Wie wird die Fallkorrektur in der Lösung ausgeführt?
projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument");
Das ist nicht mehr akzeptabel, ich daher begann mit der Entwicklung der neuen Version, die dieselbe Aufgabe wie der Befehl FormatDocument ausführen würde. Eines der Merkmale dieses Befehls in VB.NET Quelldatei ist, dass es Gehäuse sowohl für Schlüsselwörter und Namen korrigiert, zB:
public
wirdPublic
,- Variable als
fooBar
definiert, sondern alsfoobar
=> Nutzung verwendet Änderungen anfooBar
- usw.
Zuerst dachte ich, dass Microsoft.CodeAnalysis.Formatting.Formatter.FormatAsync(...)
allein die Arbeit machen würde, aber es scheint, wie es Pflege der Whitespaces nimmt nur. Deshalb fing ich an, anderswo zu suchen und entdeckte die Methode Microsoft.CodeAnalysis.CaseCorrection.CaseCorrector.CaseCorrectAsync(...)
, aber die CaseCorrector
Klasse ist leider internal
. Es lässt mich jedoch darüber nachdenken, ob es sich nicht um einen Fehler handelt, bei dem die Methode CaseCorrectAsync
public
ist.
Gibt es eine vernünftige Möglichkeit, Fallkorrektur in meiner neuen Roslyn-basierten App auszuführen?
Ob es ein Fehler ist: Nein, sehr wahrscheinlich ist es nicht. Viele von Roslyns Helfern sind "intern", aber das Team ist offen für Anfragen, sie öffentlich zu machen, nachdem Sie die Notwendigkeit dafür demonstriert haben. Sie sollten dafür wahrscheinlich ein Problem im Repo erstellen. –
Denken Sie daran, dass wir [Open Source] (https://github.com/dotnet/roslyn) sind, und Sie können uns daher leicht an die Gabel bringen und für Ihre eigenen Tools veröffentlichen. Aber natürlich, füge auch den Fehler ein. –
@JasonMalinowski Wenn ich noch eine Frage habe - gibt es einige Anweisungen, wie man Roslyn-Nugget-Pakete lokal mit den Modifikationen erstellen kann (z. B. indem ich CaseCorrector public mache)? –