Исправление кода для документа отличается от исправления кода для строки - PullRequest
0 голосов
/ 04 марта 2019

Я написал анализатор кода Roslyn и связанный CodeFixProvider, который работает.Когда я использую его против отдельных лампочек, он работает отлично, когда я решаю сделать весь документ, кажется, что получаются искаженные результаты, как будто несколько исправлений были объединены вместе.

Я использую WellKnownFixAllProviders для обеспечения инфраструктурыдля решения проблемы.Отладка кода и того, что происходит, все выглядит хорошо, но предварительно просмотренный (и принятый) документ, похоже, имеет некоторые дублированные или искаженные результаты.

1 Ответ

0 голосов
/ 06 марта 2019

WellKnownFixAllProvider работает путем пакетной обработки всех исправлений параллельно, передавая один и тот же неизменный документ.Каждое исправление возвращает результат одного изменения исходного документа, и эти измененные документы объединяются для получения окончательного результата.Это означает, что, если исправления перекрываются, объединение может привести к результатам, которых не было бы, если бы документ был видоизменен последовательно.

Единственное реальное лекарство от этого - либо не иметь перекрывающихся исправлений, либо написать свой собственный поставщик исправлений, которыйработает по порядку, а не параллельно.

Если CodeFixProvider используется для однократного изменения вашей кодовой базы, может оказаться возможным взломать обходной путь, когда ваш поставщик исправлений отслеживает его изменения и непроизводить противоречивые изменения.Но это было бы по своей природе хрупко, и это не то, что вы хотели бы сделать для исправления, которое будет использоваться широкой публикой.

...