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