Конференция "Прочее" » FixInsight for Delphi
 
  • Kerk © (06.10.14 19:55) [0]
    Я наконец довел тот проект, которым занимался в последние месяцы, до состояния, когда его можно показать публике.

    Встречайте FixInsight: http://sourceoddity.com/fixinsight/

    FixInsight - статический анализатор, позволяющий находить потенциально проблемные места в коде на Delphi. Больше информации и скриншоты есть по ссылке.

    Например, вот такой нездоровый код, когда некто оставил пустым блок except будет найден автоматически:

          try
            DoWork;
          except
          end;



    Что сэкономит кому-то немного времени :)

    Полный список отслеживаемых ситуаций можно посмотреть вот тут http://sourceoddity.com/fixinsight/doc.html#rules

    Бета версия, не все совершенно. Но это только начало :)
  • Kerk © (06.10.14 19:56) [1]
    Первые отзывы есть вот тут
    http://plus.google.com/107032218922460039706/posts/9CNAy6cTLR1
  • silver © (06.10.14 20:04) [2]
    как и говорил - давно пора :-)
  • Дмитрий С © (06.10.14 20:39) [3]
    Привет. Пустой finally опасен тем, что в нем забыли что-то написать ?

    Object "Foo" created in TRY block
    Я раньше часто так делал. Даже писал на мастерах об этом как то. По-моему ничего криминального
  • silver © (06.10.14 21:13) [4]

    > Привет. Пустой finally опасен тем, что в нем забыли что-
    > то написать ?

    опасен, создал - удали


    > Object "Foo" created in TRY blockЯ раньше часто так делал.
    >  Даже писал на мастерах об этом как то. По-моему ничего
    > криминального

    почти та же причина
    в этом блоке выбросит ктонить исключение - объект останется неудаленным
  • Дмитрий Белькевич © (06.10.14 23:20) [5]
    Спасибо. Есть польза от статических анализаторов, нашел несколько неточностей.

    Использую еще вот такое:

    http://www.peganza.com/#PAL

    читал про такой для плюсов:

    http://www.viva64.com/ru/d/

    в качестве затравок для будущих идей.

    из пеганзы хотелось бы довольно легко реализуемые:

    "const s string" вместо "s string" в параметрах функций
    то же самое для открытых массивов

    если бы в анализе format кроме числа переменных был тип - было бы супер! бывают там ошибки из-за сменившихся типов переменных.
  • RWolf © (06.10.14 23:34) [6]

    > silver ©   (06.10.14 21:13) [4]
    > > Пустой finally опасен тем, что в нем забыли что-то написать ?
    > опасен, создал - удали

    Сильное утверждение. Всё равно, что сказать «if без else опасен».
    Нередко попадаются операции, которые кидают бесполезные в контексте задачи исключения.
  • DVM © (06.10.14 23:37) [7]

    > Kerk ©   (06.10.14 19:55) 


    > Но это только начало :)

    надо идеи начинать собирать


    > Дмитрий Белькевич ©   (06.10.14 23:20) [5]


    > если бы в анализе format кроме числа переменных был тип
    > - было бы супер!

    Но функция Format сама же интерпретирует свою строку, это не часть языка.
  • DVM © (06.10.14 23:41) [8]

    > RWolf ©   (06.10.14 23:34) [6]
    >


    > Нередко попадаются операции, которые кидают бесполезные
    > в контексте задачи исключения.

    Чревато все же ошибками. Так можно ненароком задавить постороннее исключение, а не то которое мы ожидаем и потом долго искать проблему. Если уж давить то хотя бы выборочно.
  • Kerk © (06.10.14 23:56) [9]

    > Дмитрий Белькевич ©   (06.10.14 23:20) [5]
    > DVM ©   (06.10.14 23:37) [7]

    Да, идеи активно ищутся :)
    Не все пока можно реализовать, но многое вполне в рамках возможного.
  • Юрий Зотов © (07.10.14 01:21) [10]
    ИМХО.

    Для начинающих - полезно. Для профи - вряд ли, потому что таких очевидных ляп они уже практически не делают.

    Тем не менее, впечатление хорошее.
  • Германн © (07.10.14 01:24) [11]

    > Kerk ©   (06.10.14 19:55)
    >
    > Я наконец довел тот проект, которым занимался в последние
    > месяцы, до состояния, когда его можно показать публике.
    >
    > Встречайте FixInsight

    А почему поддерживаемые версии Дельфи начинаются с Д2010?
  • Германн © (07.10.14 01:32) [12]

    >  silver ©   (06.10.14 21:13) [4]
    >
    > > Object "Foo" created in TRY blockЯ раньше часто так делал.
    >
    > >  Даже писал на мастерах об этом как то. По-моему ничего
    > > криминального
    >
    > почти та же причина
    > в этом блоке выбросит ктонить исключение - объект останется
    > неудаленным

    Угу. Почти та же причина, но с точностью до наоборот. Возникнет исключение в конструкторе - объект не будет создан. А что тогда пытаемся удалить в finally?
  • Kerk © (07.10.14 01:46) [13]

    > Юрий Зотов ©   (07.10.14 01:21) [10]

    Отвечу своей имхой :)
    Это всем полезно, потому что никто не совершенен. Тем более когда в проекте много людей. А так как работает оно автоматически и довольно быстро, то даже если хотя бы иногда будет что-то находить, то уже хорошо и полезно.

    Вот возьмем простой пример:

    if Abc then;
     raise Exception.Create('abc');



    Это даже не ошибка. Просто опечатка - палец скользнул. Глазами тут проблему найти не так уж легко, а анализатор легко справится. Уже справляется.

    Таких маленьких примеров я много могу приводить.

    >  Германн ©   (07.10.14 01:24) [11]
    > А почему поддерживаемые версии Дельфи начинаются с Д2010?

    В D2010-XE7 пакет компилируется без изменений. В 2009 не компилируется. У меня пока времени не было разобраться, чего она от меня хочет. Но так вообще принципиальных ограничений нет.
  • Германн © (07.10.14 01:54) [14]

    > В 2009 не компилируется. У меня пока времени не было разобраться,
    >  чего она от меня хочет. Но так вообще принципиальных ограничений
    > нет.

    Я вообще-то имел в виду Д2007. Последнюю неюникодную, но в то же время "первую" Rad Studio.
  • Kerk © (07.10.14 01:57) [15]
    Ответ тот же самый :)
    У меня в планах поддержка всех версий, начиная с 2006. Но что успел, то успел :)
  • Юрий Зотов © (07.10.14 02:10) [16]
    > Kerk ©   (07.10.14 01:46) [13]
    >
    > if Abc then;
    >  raise Exception.Create('abc');


    Пример неудачный, поскольку:

    1. Безусловные исключения проявляют сами себя и поэтому легко ловятся на первых же этапах тестирования. Отладчик покажет точку возникновения исключения, а не увидеть в ней пустой оператор может разве что слепой.

    2. Последующий код будет отмечен компилятором, как недостижимый, причем даже и без тестирования. И если мы придерживаемся профессионального стиля кодинга "варнингов быть не должно", то не увидеть этот единственный варнинг тоже может разве что слепой.

    PS
    Возможно, есть и более сложные примеры. Но в материале по ссылке я таких не нашел. Там ошибки именно уровня начинающих - чем и было обусловлено мое ИМХО.
  • Юрий Зотов © (07.10.14 02:20) [17]
    Кстати, а комментарии учитываются? Будет ли поймано вот такое:
    // if Abc then;
    raise Exception.Create('abc');



    Или вот такое:
    // if Abc then;
    // raise Exception.Create('abc');

  • Kerk © (07.10.14 02:21) [18]
    Юрий Зотов ©   (07.10.14 02:10) [16]

    > Последующий код будет отмечен компилятором, как недостижимый,
    >  причем даже и без тестирования.

    Не будет. Delphi так не умеет. А вот FixInsight умеет.
    Думаю, одного только этого аргумента достаточно.

    Разговоры про начинающих-заканчивающих считаю неконструктивными. Все люди ошибаются, бывают невнимательными, у всех есть коллеги разной степени оригинальности. Идеальных людей я пока только в интернете на форумах видел :)

    Но имхо есть имхо. Это нормально.
  • Kerk © (07.10.14 02:22) [19]

    > Юрий Зотов ©   (07.10.14 02:20) [17]
    >
    > Кстати, а комментарии учитываются?

    Конечно учитываются :)
 
Конференция "Прочее" » FixInsight for Delphi
Есть новые Нет новых   [134433   +21][b:0.001][p:0.001]