Как NRefactory может сохранить оригинальное форматирование
Привет, я использую NRefactory для извлечения константы String и перестановки ее статической переменной для i18n, я могу успешно это сделать, но когда я вывожу свой код с помощью GetText(), он не сохраняет первоначальное форматирование. Я хочу сделать это с минимальным изменением форматирования.
Благодарю.
2 ответа
Если вы хотите сохранить текущее форматирование, вы можете использовать DocumentScript
применить модификации по АСТ. Работает на основе TextLocation
свойство хранится в синтаксическом дереве.
Для создания скрипта вам необходимо сделать это:
IDocument document = new StringBuilderDocument("source code");
CSharpFormattingOptions policy = FormattingOptionsFactory.CreateAllman();
var options = new TextEditorOptions();
var script = new DocumentScript(document, policy, options);
Теперь вы можете использовать такие методы, как Replace, Remove, InsertAfter и т. Д. На AST. Он работает как с узлами ast, так и со смещениями.
Он также отслеживает изменения, поэтому вам не нужно беспокоиться о конфликтах при множественных изменениях.
Для большего количества примеров на NRefactory вы можете также проверить мой блог.
Взгляните на часть "Изменение кода C#" (последний раздел) статьи NRefactory CodeProject.