Pull to refresh

Comments 11

О, интересно, JetBrains пошли по пути использования собственных инструментов, тогда как PVS выбрали Roslyn.
Время покажет, какой из вариантов окажется перспективнее.
JetBrains перспективнее, это любому понятно!
Евгений Рыжков
Работаю: 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.