Проверьте наш Smart Differencer инструмент, который сравнивает абстрактные синтаксические деревья,
и сообщает о различиях в терминах нетерминалов («языковые конструкции»)
что AST представляют и правдоподобные действия по редактированию (вставка, удаление, перемещение), а также обнаружение согласованного переименования.
В настоящее время он обрабатывает только Java и COBOL, но основан на DMS, которая
имеет парсеры для широкого спектра языков, включая C #.
РЕДАКТИРОВАНИЕ 08.09.2009: C # SmartDifferencer теперь доступен для бета-тестеров.
Инструмент уже обрабатывает согласованное переименование по всему файлу как
семантически тривиальный (при условии, что ссылки на другие файлы
соответственно переименованный символ), а также переименовывает в области видимости.
Мы планируем учесть семантически тривиальные изменения, такие как
как перемещение объявления метода в классе для Java и C #.
РЕДАКТИРОВАТЬ Октябрь 2010: Доступны производственные версии. Загрузка Eval
доступно на сайте.
РЕДАКТИРОВАТЬ Май 2012 : Вы можете посмотреть пример C # на этой странице.
В настоящее время он не выполняет семантически нулевые правки. Частным примером является перетасовка методов в теле класса; мы все знаем, что это не влияет на семантику в C #. Наш инструмент сравнивает синтаксис (через AST), а не семантику, поэтому он не понимает этот конкретный нюанс и, следовательно, скажет пользователю, что «это было перемещено», а не молчит. Мы планируем обрабатывать подобные случаи когда-нибудь в будущем, но, эй, у каждого продукта должна быть версия 1: -} [В качестве тонкого замечания методы тасования в классе Java также семантически нулевые, но тасуют поля не связано с порядком оценки инициализаторов. Я не знаю, верно ли это и для C #, но меня это не удивит.]