Я пытаюсь реализовать диагностический анализатор для инициализатора коллекции и его соответствующего поставщика кода.Невозможно специально пройти через дерево синтаксиса?
Неправильный код:
var sampleList= new List<string>();
sampleList.Add("");
sampleList.Add("");
После CodeFix:
var sampleList= new List<string>(){"", ""};
Но я застрял на эту проблему, что как только я получаю узел LocalDeclarationStatement, я не знаю, если существует способ получить следующий соседний узел от родителя.
На рисунке выше я требую как ExpressionStatement после анализа LocalDeclarationStatement
ТРЕБОВАНИЯ для анализатора
- Идентифицировать
LocalDeclarationStatement
, коллекции, которая уже инициализирована, но оленья кожа содержитCollectionInitializerExpression
- Найти, если в самой следующей строке есть оператор выражения, который является usin г
Add
метод на одной и той же коллекции
ТРЕБОВАНИЕ для кодекса исправить
- Обеспечение синтаксиса инициализатора Collection для смежных утверждений выражений, которые используют
Add
метод на коллекции - Все другие intermitten использования метода Add по сборке следует избегать.
Это отлично работает! Я действительно ценю это. –
Как удалить дополнительные строки кода (смежные 'Add' invocations), которые были заменены синтаксисом Collection Initializer с использованием того же провайдера CodeFix. Я смог предоставить исправление для инициализатора коллекции, но не смог удалить другие последовательные строки 'Add' invocation. –
@JerricLynsJohn Пробовал ли метод расширения «RemoveNode»? – svick