Pull to refresh

Comments 11

О, интересно, JetBrains пошли по пути использования собственных инструментов, тогда как PVS выбрали Roslyn.
Время покажет, какой из вариантов окажется перспективнее.
Евгений Рыжков
Работаю: PVS-Studio
Это что, вброс или крик души? :)
Это была неудачная шутка, поэтому если серьезно, то у разного подхода есть причины.

ReSharper работает с кодом, который только пишется, «на лету» его разбирая. И для ReSharper очень важно работать максимально быстро. PVS-Studio работает по-другому — мы проверяем полностью готовый файл. Плохо ли это? Нет, так как мы имея полный файл можем делать более мощный анализ. И при этом потратить на него чуть больше времени.

Ну а говорить какой вариант лучше смысла нет. Надо пробовать разные инструменты на своем конкретном проекте и смотреть, что больше понравится.
И для ReSharper очень важно работать максимально быстро. PVS-Studio работает по-другому — мы проверяем полностью готовый файл. Плохо ли это? Нет, так как мы имея полный файл можем делать более мощный анализ. И при этом потратить на него чуть больше времени.

Разве решарпер не умеет анализировать полные файлы? Он все анализирует, и полные и неполные.
У решарпера, как я понимаю, основное преимущество перед рослином в том что структуры в памяти, которые решарпер строит, изменяемы. Поэтому он должен быть намного быстрее чем рослин (хотя я не думаю что кто-то проводил детальное сравнение по этому поводу). Для решарпера можно писать свои дополнения со своими inspections, хотя особого изобилия полезных дополнений не видно (возможно из-за того что существующих достаточно, а может jetbrains стоило бы как то стимулировать сообщество)

Решарпер кстати, можно запускать из командной строки, и эта утилита (resharper command line tools) вообще бесплатна.
Возможно ли при помощи Roslyn сделать анализ (возьмем для примера задачу подсчетам синтаксиса) не только для c#? для своего кастомного ЯП
Если для разбора и анализа кода использовать именно Roslyn API, то возможен только анализ C# и VB.
Ну, если цель — семантика, и преобразование 1:1 необязательно, то C-подобные языки можно аккуратненько транслировать в псевдо-C#. Минусы: поддержка своего транслятора. Плюсы: иногда это легко реализовать; за парсинг будет отвечать Roslyn; ну и fun.
«Следует помнить, что при анализе мы работаем с узлами, а не с объектами. Поэтому для получения информации, например, о типе объекта не сработают ни оператор is, ни метод GetType, так как они предоставляют информацию об узле, а не об объекте.» Может наоборот? —
так как они предоставляют информацию об объекте, а не оузле.
Имеется в виду анализируемый код.
Если у вас есть класс Foo в код, и во время анализа вы получаете условный ISymbol описывающий Foo — ISymbol is Foo вернет false.
Sign up to leave a comment.