Конференция "Прочее" » FixInsight for Delphi
 
  • Cobalt © (25.05.15 13:05) [160]
    > Дмитрий Белькевич ©   (20.05.15 12:36) [158]
    >
    > >Некрасиво, конечно, но если нормального способа не предусмотрено,  то ничего другого не остается.
    >
    > Я у себя делал специальный таймер TThreadTimer - работающий
    > в параллельном потоке и вызывающий код в параллельном потоке,
    >  добавил методы Start, Stop и Restart. Почему что-то такое
    > не добавить в VCL/FMX? Неудобно же как есть.

    Мне кажется, не стоит нагружать Embarcadero вещами, которые может сделать каждый программист. Они со своими-то не справляются. А им это ещё поддерживать для разных платформ...
  • q1w2e © (26.05.15 14:09) [161]

    > Kerk ©   (23.05.15 13:42) [159]
    > Директивы компиляции в командной строке можно указывать
    > с помощью параметра --defines
    > А написано про это в документации :)

    Ну конечно, я это пробовал. Легче не стало. Директивы компиляции по какой-то причине у меня игнорируются, происходит парсинг всего текста модуля.

    Вот коротенький пример для иллюстрации:

    {$I Definitions.inc}
    unit Test;

    {$IFNDEF TEST}
    deprecated; // этот модуль предназначен только для тестовых сборок
    {$ENDIF}

    interface
    implementation
    end.



    Содержимое Definitions.inc:

    {$IFDEF TEST_1.DPR}
     {$DEFINE TEST}
    {$ENDIF}

  • Kerk © (26.05.15 14:52) [162]
    Покажи что в командной строке пишешь.
    А инклуды пока не поддерживаются, к сожалению.
  • q1w2e © (26.05.15 15:53) [163]
    Вообще-то ничего писать, по идее, не требуется в случае анализа проекта TEST_1.DPR, так как, во-первых, символ имени проекта определяется самим компилятором, и во-вторых, он присутствует в настроечных файлах проекта TEST_1.DOF и TEST_1.CFG.

    Однако, эксперимента ради я могу указать и впрямую этот символ в параметрах командной строки:

    FixInsightCL.exe --project=TEST_1.DPR --defines=TEST_1.DPR



    Если, как Вы пишите,  включения не поддерживаются, то все равно работать, видимо, не будет.
  • q1w2e © (26.05.15 15:59) [164]
    При работе с командной строкой можно ли как-то ограничить множество выполняемых проверок, например, перечислив их в какой-нибудь секции настроечного файла (.ficfg ?)? Где об этом почитать?
  • q1w2e © (01.06.15 16:18) [165]
    Было бы здорово разделить W504 на отдельно пропущенный inherited в конструкторе и деструкторе. Дело в том, что часто предупреждение в конструкторах ложное, так как имеется несколько перегруженных конструктуров, конструктор предка зовется лишь в одном, а остальные зовут этот первый. Например:

    type
     TValue = class
       constructor Create; overload;
       constructor Create(const AValue: Integer); overload;
       constructor Create(const AValue: string); overload;
     end;



    С деструкторами ситуация получше - там практически каждое срабатывание по делу, так как необходимость перегрузки деструкторов крайне редка.
  • Kerk © (01.06.15 16:26) [166]

    >  q1w2e ©   (26.05.15 15:59) [164]
    >
    > При работе с командной строкой можно ли как-то ограничить
    > множество выполняемых проверок, например, перечислив их
    > в какой-нибудь секции настроечного файла (.ficfg ?)? Где
    > об этом почитать?

    Можно. В IDE в диалоге настроек настраиваешь все как хочешь. В результате рядом с проектом появляется тот самый файл .ficfg. При работе через командную строку по умолчанию будут взяты настройки из файла, который лежит рядом с проектом, но ты можешь указать путь к другому файлу настроек с помощью параметра --settings.
  • Kerk © (01.06.15 16:27) [167]

    > q1w2e ©   (01.06.15 16:18) [165]
    >
    > Было бы здорово разделить W504 на отдельно пропущенный inherited
    > в конструкторе и деструкторе. Дело в том, что часто предупреждение
    > в конструкторах ложное, так как имеется несколько перегруженных
    > конструктуров, конструктор предка зовется лишь в одном,
    > а остальные зовут этот первый.

    Это уже сделано в следующей версии, которая пока не вышла. Думаю, в июне она появится на сайте.
  • q1w2e © (01.06.15 17:15) [168]
    К сожалению, работаю в delphi 5
  • q1w2e © (01.06.15 17:27) [169]
    Если еще интересуют идеи по отлову багов, то решусь предложить такой частый баг копипаста

    if Assigned(P) then
     Exit;
    P.DoSomething;



    ну или симметричный:


    if P = nil then
     P.DoSomething;



    Можно попробовать отловить такие обезниливания указателей хотя бы в простейших случаях.
  • Kerk © (01.06.15 20:30) [170]
    Вот так файл .ficfg выглядит для текущей версии (2015.04)
    http://pastebin.com/CNa89vdn

    Сохрани куда-нибудь. Отредактируй значения руками, там вроде очевидно что как.
  • q1w2e © (02.06.15 15:54) [171]
    Спасибо. С cfg- все ясно.

    1. Ошибка W521 иногда шумит:


     function GenerateTempFileName(const Dir: string): string;
     var
       I: Integer;
     begin
       for I := 0 to 65535 do
       begin
         Result := AddBk(Dir) + Format('~tmp%d.dbf', [I]);
         if not FileExists(Result) then
           Exit;
       end;
     end;



    2. Хороша была бы подсказка о неиспользованных параметрах, передаваемых в процедуру, но только при условии, что можно ее включать/выключать раздельно:
    - для вложенных процедур;
    - для процедур и функций глобальных для модуля (область видимости implementation);
    - для процедур и функций глобальных для программы (область видимости interface);
    - для конструкторов / деструкторов;
    - для виртуальных и динамических методов;
    - для методов-обработчиков событий объектов VCL;
    - для методов-обработчиков событий Windows;
    - для методов объектов с видимостью published;
    - для остальных методов.
  • q1w2e © (03.06.15 11:13) [172]
    Можно еще предложения?

    Если да, то было бы здорово ловить getеter-ы и setter-ы свойств, которые опрокидывают программу в рекурсию.


    procedure TMyClass.SetMyProperty(const Value: TMyType);
    begin
     if MyProperty <> Value then
       MyProperty := Value; { упс }
    end;

  • Kerk © (25.08.15 12:31) [173]
    Незаметно подкралась новая версия. 2015.08. Сделана полноценная поддержка директивы $INCLUDE. Анализируются теперь не только файлы напрямую включенные в проект, но и используемые файлы из search path (отключаемо).

    Плюс пара новых правил. Вот такое, например. W526 Pointer to a nested method

          procedure TMyClass.DoWork;

            procedure NestedMethod(List: TObjectList);
            var
              I: Integer;
            begin
              for I := 0 to List.Count - 1 do
                Foo(Self, List[I]);
            end;

          begin
            SetCallback(@NestedMethod); // <------
          end;


    Скачивать все там же :)
    http://sourceoddity.com/fixinsight/download.html
  • DayGaykin © (25.08.15 13:25) [174]
    На правах предложений:
    Меня очень порадовало в Intellij Idea следующее предупреждение:
    "'scrollLeft' should probably not be assigned to 'top'"
    на код:
    var top = document.scrollLeft;
  • DVM © (25.08.15 13:30) [175]

    > Kerk ©   (25.08.15 12:31) [173]

    Предложение: добавить в анализатор отслеживание ситуаций, когда адрес приводится к 4-байтовому целому. Полезно при переносе 32 бит кода в 64.
  • Игорь Шевченко © (25.08.15 16:16) [176]
    DVM ©   (25.08.15 13:30) [175]


    > Полезно при переносе 32 бит кода в 64.


    А что, регулярный процесс ? Просто интересно
  • DVM © (25.08.15 16:33) [177]

    > Игорь Шевченко ©   (25.08.15 16:16) [176]


    > А что, регулярный процесс ? Просто интересно

    Ну мне частенько такое встречалось (в последнее время правда реже, все что надо уже перенесено на 64 бит).
  • DVM © (25.08.15 16:39) [178]

    > Игорь Шевченко ©

    Да и безотносительно регулярности, ну ведь ошибка это явная, как в с++ использование int вместо size_t:

    http://www.viva64.com/ru/a/0050/)
  • Rouse_ © (25.08.15 18:09) [179]

    > Игорь Шевченко ©   (25.08.15 16:16) [176]
    > А что, регулярный процесс ? Просто интересно

    Конечно регулярный, более того скажу, нам ручками приходится перепарсивать исходники от DevExpress с целью поиска, поправили ли они очередной пак ошибок, которые мы высылали или нет.
    Поэтому в любом коде, где есть сторонние классы имх нужно делать такую проверку.
 
Конференция "Прочее" » FixInsight for Delphi
Есть новые Нет новых   [134432   +19][b:0.001][p:0.002]