-
> Дмитрий Белькевич © (20.05.15 12:36) [158] > > >Некрасиво, конечно, но если нормального способа не предусмотрено, то ничего другого не остается. > > Я у себя делал специальный таймер TThreadTimer - работающий > в параллельном потоке и вызывающий код в параллельном потоке, > добавил методы Start, Stop и Restart. Почему что-то такое > не добавить в VCL/FMX? Неудобно же как есть. Мне кажется, не стоит нагружать Embarcadero вещами, которые может сделать каждый программист. Они со своими-то не справляются. А им это ещё поддерживать для разных платформ...
-
> Kerk © (23.05.15 13:42) [159] > Директивы компиляции в командной строке можно указывать > с помощью параметра --defines > А написано про это в документации :)
Ну конечно, я это пробовал. Легче не стало. Директивы компиляции по какой-то причине у меня игнорируются, происходит парсинг всего текста модуля. Вот коротенький пример для иллюстрации:
unit Test;
deprecated;
interface
implementation
end.
Содержимое Definitions.inc:
-
Покажи что в командной строке пишешь. А инклуды пока не поддерживаются, к сожалению.
-
Вообще-то ничего писать, по идее, не требуется в случае анализа проекта TEST_1.DPR, так как, во-первых, символ имени проекта определяется самим компилятором, и во-вторых, он присутствует в настроечных файлах проекта TEST_1.DOF и TEST_1.CFG. Однако, эксперимента ради я могу указать и впрямую этот символ в параметрах командной строки:
FixInsightCL.exe --project=TEST_1.DPR --defines=TEST_1.DPR
Если, как Вы пишите, включения не поддерживаются, то все равно работать, видимо, не будет.
-
При работе с командной строкой можно ли как-то ограничить множество выполняемых проверок, например, перечислив их в какой-нибудь секции настроечного файла (.ficfg ?)? Где об этом почитать?
-
Было бы здорово разделить W504 на отдельно пропущенный inherited в конструкторе и деструкторе. Дело в том, что часто предупреждение в конструкторах ложное, так как имеется несколько перегруженных конструктуров, конструктор предка зовется лишь в одном, а остальные зовут этот первый. Например:
type
TValue = class
constructor Create; overload;
constructor Create(const AValue: Integer); overload;
constructor Create(const AValue: string); overload;
end;
С деструкторами ситуация получше - там практически каждое срабатывание по делу, так как необходимость перегрузки деструкторов крайне редка.
-
> q1w2e © (26.05.15 15:59) [164] > > При работе с командной строкой можно ли как-то ограничить > множество выполняемых проверок, например, перечислив их > в какой-нибудь секции настроечного файла (.ficfg ?)? Где > об этом почитать?
Можно. В IDE в диалоге настроек настраиваешь все как хочешь. В результате рядом с проектом появляется тот самый файл .ficfg. При работе через командную строку по умолчанию будут взяты настройки из файла, который лежит рядом с проектом, но ты можешь указать путь к другому файлу настроек с помощью параметра --settings.
-
> q1w2e © (01.06.15 16:18) [165] > > Было бы здорово разделить W504 на отдельно пропущенный inherited > в конструкторе и деструкторе. Дело в том, что часто предупреждение > в конструкторах ложное, так как имеется несколько перегруженных > конструктуров, конструктор предка зовется лишь в одном, > а остальные зовут этот первый.
Это уже сделано в следующей версии, которая пока не вышла. Думаю, в июне она появится на сайте.
-
К сожалению, работаю в delphi 5
-
Если еще интересуют идеи по отлову багов, то решусь предложить такой частый баг копипаста
if Assigned(P) then
Exit;
P.DoSomething;
ну или симметричный:
if P = nil then
P.DoSomething;
Можно попробовать отловить такие обезниливания указателей хотя бы в простейших случаях.
-
Вот так файл .ficfg выглядит для текущей версии (2015.04) http://pastebin.com/CNa89vdnСохрани куда-нибудь. Отредактируй значения руками, там вроде очевидно что как.
-
Спасибо. С 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; - для остальных методов.
-
Можно еще предложения? Если да, то было бы здорово ловить getеter-ы и setter-ы свойств, которые опрокидывают программу в рекурсию.
procedure TMyClass.SetMyProperty(const Value: TMyType);
begin
if MyProperty <> Value then
MyProperty := Value;
end;
-
Незаметно подкралась новая версия. 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
-
На правах предложений: Меня очень порадовало в Intellij Idea следующее предупреждение: "'scrollLeft' should probably not be assigned to 'top'" на код: var top = document.scrollLeft;
-
> Kerk © (25.08.15 12:31) [173]
Предложение: добавить в анализатор отслеживание ситуаций, когда адрес приводится к 4-байтовому целому. Полезно при переносе 32 бит кода в 64.
-
DVM © (25.08.15 13:30) [175]
> Полезно при переносе 32 бит кода в 64.
А что, регулярный процесс ? Просто интересно
-
> Игорь Шевченко © (25.08.15 16:16) [176]
> А что, регулярный процесс ? Просто интересно
Ну мне частенько такое встречалось (в последнее время правда реже, все что надо уже перенесено на 64 бит).
-
-
> Игорь Шевченко © (25.08.15 16:16) [176] > А что, регулярный процесс ? Просто интересно
Конечно регулярный, более того скажу, нам ручками приходится перепарсивать исходники от DevExpress с целью поиска, поправили ли они очередной пак ошибок, которые мы высылали или нет. Поэтому в любом коде, где есть сторонние классы имх нужно делать такую проверку.
|