Как стать автором
Обновить

Комментарии 14

Если у вас есть пожелания к изложению материала или вы желаете узнать поподробнее про какие-нибудь аспекты, то пишите, буду рад предложениям.
откуда качать крепкие нервы? :)
Даются от рождения. В качестве кратковременной замены можно использовать успокоительное по предварительной консультации с врачом.
Немного не понятно что происходит после
context.RegisterRefactoring(CodeAction.Create("Хотите, поменяю?", newDocument))

В newDocument будет новое дерево со всем нашим кодом в файле?
Он будет заменять его целиком?
Просто ситуация: у нас в файле больше 1000 строк, поменяли что то в последней, что произойдет?
Одно дело если мы поменяли одну ноду, тут я могу предположить что он заменит только ее. А другое дело, если мы что то добавляли, переименовывали и т.д. Наверное все же придется менять все дерево, а это должно быть не так уж и быстро, поменять и перерисовать, провести анализ, наложить глифи и т.д.
Нет, все зависит от количества изменений. Под изменением подразумевается замена, добавление, удаление. В roslyn проделали большую работу, они поддерживают два персистентных неизменяемых дерева (красное и зеленое). В результате любая операция с нодами не приводит к большому оверхеду. Чуточку можно почитать здесь: blogs.msdn.com/b/ericlippert/archive/2012/06/08/persistence-facades-and-roslyn-s-red-green-trees.aspx. Суммируя: не бойтесь, но делайте профайлинг вашего кода. На скорость работы отрисовки в студии — забейте. Рефакторинги применяются только если юзер пожелает (для этого и есть асинхронные CodeAction), и отрисовываются уж точно только если юзер пожелает
Спасибо. Буду ждать продолжение.
Вместо вот такой конструкции:
         .Select(n => n as T)
         .Where(n => n != null)
обычно пишут просто .OfType<T>()
OfType кажется кинет Exception если будет null
Нет, не кинет.
Да, верно, раньше там был Чуточку другой код, поэтому OfType использовать было нельзя
Увы, это требует поддержку от IDE. Я не уверен, но скорее всего можно написать костыль с ограниченной функциональностью, который будет реализовывать часть фич из 2015-й студии (а именно — выдергивание провайдеров рефакторингов, передача им проанализированного документа, применение изменений, ну и естественно нужно как-то получить проанализированный документ). В мои цели это не входит. Я жду релиза VS 2015, C# 6 и asp vnext. До этого я работаю на превью VS 2015.
Хотя вспомнил, Roslyn появлялся еще как CTP для 2010-й студии; причем уже тогда были шаблоны проектов Code Refactorings. Думаю если порыскать по интернету, то можно найти инструкции как завести Roslyn в 2012/2013-студии. Но искать скорее всего придется долго + API наверное будет отличаться.
Спасибо, буду гуглить. Я просто разрабатываю коммерческое расширение для студии, в котором некоторые возможности рефакторинга весьма пригодились бы, и заставлять людей покупать VS 2015 — не решение, когда много у кого еще стоит 2012, которая их вполне устраивает. Похоже, придется приводить все к наименьшему общему знаменателю и делать все под API студии 2012, при этом таская с собой 15 мегабайт сборок Roslyn =/
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации