Я работаю над небольшим кусочком кода roslyn, чтобы попытаться выполнить несколько простых рефакторингов внутри проекта расширения Visual Studio для MAC.
Я хочу реорганизовать этот код:
public class Test
{
private const object a = null;
public const int c = 0;
}
в этот код
public class Test
{
public const int c = 0;
private const object a = null;
}
До сих пор мне удавалось получить список ISymbol, представляющий мои константы, правильно упорядочить их, а затем преобразовать их в список SyntaxNode, подобный этому
var orderedMembers = orderer.OrderAll(classMembers);
var nodes = orderedMembers.Select(o => o.DeclaringSyntaxReferences.FirstOrDefault().GetSyntax())
.Where(node => node != null)
.ToList();
Пока все хорошо.Вывод будет таким:
public class Test
{
public const int c = 0;
private const object a = null;
}
Теперь мой последний шаг - добавление нескольких строк после моей последней константы, чтобы определить разделение между моими константами и тем, что может последовать.
Кажется, яможно сделать это, добавив в конце мой Синтаксический узел пустые следы / ведущие.Итак, я попробовал это (жестко запрограммировано для простоты прямо сейчас):
nodes[1] = nodes[1].WithTrailingTrivia(SyntaxFactory.CarriageReturnLineFeed);
Затем я вставляю свои новые узлы в мой узел объявления класса «Test» и превращаю его в строку (здесь «editor» являетсяэкземпляр Microsoft.CodeAnalysis.Editing.DocumentEditor, представляющий файл, который я открыл с vs для mac IDE):
editor.InsertMembers(classNode, 0, nodes);
var newDocument = editor.GetChangedDocument();
(await newDocument.GetTextAsync()).ToString();
, и это то, что он генерирует:
public class Test
{
public const int c = 0;
}
Итак, синтаксический узелЯ пытался добавить викторины в, не генерируется при вызове GetTextAsync в моем недавно отредактированном документе.
Я впервые играю с Roslyn, поэтому я предполагаю, что упустил что-то важное об использованииМелочи, но я не могу найти, что это такое.Любые идеи о том, как добавить несколько новых строк после определенного синтаксического узла?