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

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

Посмотрите тут, хотя я не уверен что автор открыл исходники.
и логично предоставить возможность подключать / отключать их по одному

Так есть же возможность через ruleset (или как он там называется)

Я почему-то думал, что шарить их сложно. Беглый гугл показал, что это реалистично, надо подумать тогда.

А не лучше ли сразу писать хорошо? Например, перетащить все константы в отдельный модуль.
Или это для тех, кто регулярками для поиска пользоваться не умеет, чтобы немного порефакторить?

Да, конечно лучше бы сразу писать хорошо. Я выбрал анализаторы перед другим рассматриваемом вариантом «машина времени». Код по факту уже был написан так, когда мне достался.
Но и это еще не все. Вопрос в том, как добиться этого «сразу писать хорошо». Какие варианты? Изначально мы полагались на внедрение code review. Но вопрос в том, что code review требует времени ревьюеров. Если их мало, они становятся узким местом. Если много, то вопрос в том, как добиться унификации и соблюдения стандартов среди ревьюеров. Процесс распространения культурных изменений в компании — дело не одного дня, и часто — не одного месяца.

Про рефакторинг. В принципе, для небольших проектов просто поискать по солюшену — не сложно. Для крупных — сложнее. Начинаешь утопать в false позитивах и допустимых случаях — в комментариях можно. В SoapDocumentMethodAttribute можно. Пропустить один — довольно легко.


К тому же анализаторы поддерживают однажды свершенные победы (выпилены все хардкоды URLов) в актуальном состоянии.

Вы ещё попросите разработчиков сразу писать код без багов.

https://www.sonarqube.org


Может интегрироваться в IDE — http://www.sonarlint.org


На работе пользуемся более чем для пяти языков, при необходимости сами пишем плагины и новые правила.

Кстати, да. Хороший способ контролировать качество кода. Плюс, если есть желание искать не только запахи и частные случаи, можно добавить сторонние плагины. Я думаю вы знаете, что я рекомендую :).
Идея искать особые случаи понятно. А не было ли желания, использовать ещё и полноценный анализатор кода (например, PVS-Studio) для поиска широкого спектра ошибок? При бурном развитии проекта и росте количества сотрудников, анализатор окажется хорошим помощником по контролю того, что творится в коде.

Вообще на предыдущем месте работы мы попробовали PVS-Studio. Вывод был — хороший инструмент, но непонятно насколько много added value по сравнению с Resharper (который у нас все равно есть).
Впрочем, если пришлете тестовый ключ, попробую и на этой кодовой базе, она должна быть хуже. leo@bastilia.ru

Ключ отправил.
P.S. Отмечу, что попробовать PVS-Studio for Windows можно и без запроса лицензии. Скачиваем, устанавливаем, проверяем проект и рассматриваем ошибки.
В статье слишком много «захардкоженно». Можно было бы один раз написать что-то вроде «жестко вшитых» (в скобочках указать hardcoded) и не использовать этот термин больше.
НЛО прилетело и опубликовало эту надпись здесь
А как вы отделяете новый код от старого? На уровне проектов, классов?
НЛО прилетело и опубликовало эту надпись здесь
Все равно не понимаю. Вы просто тянете дату последнего коммита, и если коммит старше 3 месяцев — помечаете файл как старый? Или какой-то кеш поддерживаете, куда изредка заносите новые файлы?
НЛО прилетело и опубликовало эту надпись здесь

Я вот так хотел бы сделать с правилом «обязательно xmldoc ко всему публичному», но пока не разобрался, как.

Можно ли с помощью Roslyn написать например анализатор того, что в catch блоке программист не забыл залогировать ошибку? Основная проблема — логирование может быть вызвано не сразу, а например может быть вызван метод, который уже и залогирует. То есть нужно лезть внутрь по цепочке вызовов. Поможет ли в этом случае семантическая модель или roslyn не подходит для такого вида проверок?

Семантическая не факт что поможет. Синтаксическая с семантической — да. Только для средних-больших проектов не рекомендую делать именно анализатор, лучше Standalone tool — построение семантической модели может много времени занять.
НЛО прилетело и опубликовало эту надпись здесь

Чем перебирать весь стек вниз, я бы сделал так:
Опознавать вызовы нескольких стандартных библиотек для логирования;
Предоставить атрибут, которым можно пометить метод, чтобы он считался «логирующим». Тогда вы можете прометить им свои обертки.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.