Я выяснил, как открыть решение, а затем выполнить итерацию через проекты, а затем документы. Я зациклился на том, как искать классы C#, Enums, Structs и Interfaces, которые могут иметь постороннюю точку с запятой в конце объявления (стиль C++). Я хотел бы удалить их и сохранить файлы .cs обратно на диск. В моей нынешней компании написано около 25 решений, с которыми я бы справился. Примечание. Причина, по которой мы это делаем, - продвижение вперед с лучшим набором стандартов кодирования. (И я хотел бы узнать, как использовать Рослин, чтобы сделать эти 'простой' корректировки)Удалите лишние точки с запятой в C# с помощью Roslyn - (замените w пустым пустяком)
Пример (ОБНОВЛЕНО):
class Program
{
static void Main(string[] args)
{
string solutionFile = @"S:\source\dotnet\SimpleApp\SimpleApp.sln";
IWorkspace workspace = Workspace.LoadSolution(solutionFile);
var proj = workspace.CurrentSolution.Projects.First();
var doc = proj.Documents.First();
var root = (CompilationUnitSyntax)doc.GetSyntaxRoot();
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
foreach (var decl in classes)
{
ProcessClass(decl);
}
Console.ReadKey();
}
private static SyntaxNode ProcessClass(ClassDeclarationSyntax node)
{
ClassDeclarationSyntax newNode;
if (node.HasTrailingTrivia)
{
foreach (var t in node.GetTrailingTrivia())
{
var es = new SyntaxTrivia();
es.Kind = SyntaxKind.EmptyStatement;
// kind is readonly - what is the right way to create
// the right SyntaxTrivia?
if (t.Kind == SyntaxKind.EndOfLineTrivia)
{
node.ReplaceTrivia(t, es);
}
}
return // unsure how to do transform and return it
}
}
Пример кода я хочу, чтобы Transform
using System;
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
};
// note: the semicolon at the end of the Person class
Я думаю, я могу найти узел, используя TypeOf(), но я не знаю, как сказать «следующий токен» оттуда. У меня есть кодовая база у меня дома, я обновлю вопрос с тем, что у меня есть сегодня. Благодарю. Мне в основном нужна помощь с «следующий токен, если с запятой преобразовать, чтобы удалить точку с запятой», а затем сохранить обратно на диск. –
BuddyJoe
Точка с запятой не будет токеном NEXT, это будет последний токен класса. Вы можете вызвать GetLastToken и проверить его вид, или есть именованное свойство, которое будет либо по умолчанию (SyntaxToken), либо действительным токеном. Я думаю, что это будет только SelicolonToken. –
Можете ли вы изменить свой вопрос на простом примере, чтобы я был на 100% уверен, что вы пытаетесь снять. Благодаря! –