четверг, 20 августа 2020 г.

Как ускорить редактирование текста в Delphi

 Данные советы проверялись на Delphi 10.3 Update2. 

1. Установить IDEFixPack ссылка. По ощущениям работать стало немного быстрее.
2. Если установлен CnPack ссылка, то может начать притормаживать дополнительная подсветка.

Настроить ее можно в меню "CnPack" - "Настройки" - вкладка "Настройка мастеров" - "Подсветка синтаксиса" - кнопка "Настройки".


У меня в больших модулях (больше 25000 строк) с настройками по умолчанию было заметно, что редактирование текста начинает притормаживать. Когда установил задержку в 500 мс, то тормоза в редактировании пропали, при это подсветка обновляется не сразу, а с небольшой задержкой. Для себя еще решил ограничить область подсветки "Процедура/Функция". И отключил отрисовку линий, так как в Delphi отрисовка линий и так включена. Работать стало комфортнее.


3. Можно поиграться с настройками в самой Delphi.

Меню "Tools" - "Options" - "User Interface"- "Editor Options".

Меню "Tools" - "Options" - "User Interface"- "Code Insight".

Особой разницы в скорости работы не заметил, оставил параметры по умолчанию.


5. После установки CnPack возможно подтормаживание при переключени вкладок с кодом, если на вкладке выделен текст (код).

Отключить это можно в меню - "CnPack" - "Настройки"

В окошке, на вкладке "Настройка мастеров" в списке "Редактор кода" нажимаем кнопку "Настройки".

В окошке "Настройки Расширений Редактора" выбираем вкладку "Вкладки/Редактирование".

И снимаем галочку "Отображать кнопку редактирования, если выделен блок кода".

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


Если вы знаете другие способы, напишите пожалуйста об этом в комментариях.


вторник, 18 августа 2020 г.

CodeVerifier - 0.6

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

Список изменений в версии 0.6:
  • Добавлен тест "Проверка правильности использования except в транзакциях", который находит код типа такого (предполагается, что должен быть except, а не finally):
      Commit;
    finally
      RollBack;
  • Добавлен тест "Проверка отсутствия Exit внутри try ... Commit...; except".
  • Добавлен тест "Поиск неиспользуемых процедур и функций" он ищет процедуры и функции, описанные в implementation части и не используемые ниже.
  • Добавлен тест "Поиск неиспользуемых переменных" он ищет переменные, описанные в implementation части и не встречающиеся ниже. 
  • Добавлен тест "Поиск вызова Create не от типа, а от переменой (тип определяется по формальным признакам вроде префикса "T")".
  • Добавлен тест "Возможно, вместо изменения массива через SetLength можно изменить его через Delete".
  • Исправлены ошибки, выявленные в работе программы.

Скачать новую версию можно на этой странице.

понедельник, 17 августа 2020 г.

Использование русских букв в названиях процедур, функций, переменных и т.д.

В одной из версий Delphi, по моему в той, где добавилась поддержка Юникода, появилась возможность использовать русские (или точнее не английские) буквы в названиях процедур, функций, переменных, констант и в прочих названиях. С одной стороны это круто. С другой стороны лучше так не делать. Практика показала, что смешивание латиницы и кириллицы приводит только к путанице.

Иногда бывает так, то русские буквы добавляются непроизвольно. Например, нужно заменить какую-нибудь букву на "c" или "a", а раскладка клавиатуры при этом не переключена на английскую и в код попадает русская буква. При этом глазами отличить эти буквы от английских невозможно. Из-за этого могут возникать косяки во время поиска по коду. Например, я помню как называется переменная, пытаюсь ее найти, а она не находится, приходится просматривать код глазами. Это раздражает.

Когда встречаются такие ситуации, то стараюсь сразу исправлять. Еще в программе для проверки кода CodeVerifier есть тест "Ищет слова, содержащие одновременно русские и английские буквы".  Периодически им проверяю весь код. Программу можно скачать на странице http://context.ivcons.ru/index.php?area=1&p=static&page=codeverifier

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

Избавляйтесь от хинтов и ворнингов в своих проектах

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

И всех призываю к тому же. Да, от части предупреждений пришлось избавиться не совсем честно, просто поставив в некоторых модулях директиву отключения проверок. Но так я делал только в модулях сторонних библиотек. В своих модулях переписал код так, чтобы он выглядел для компилятора хорошим.
Зато теперь сразу видно все новые предупреждения, которые появляются в коде, и можно их оперативно исправить. Несколько раз это спасало от возможных проблем в будущем.

Еще рекомендую тем, кто разрабатывает свои программы на Delphi перевести некоторые ворнинги в разряд ошибок.
В разряд ошибок я перевел следующие ворнинги:
For-Loop variable may be undefined after loop
Return value of function might be undefined
Variable might not been initialized

После этого проект не будет компилиться если встречаются такие ситуации. А любая их этих ситуаций приводит к тому, что программа работает неопределенным образом, например, на компьютере разработчика переменная инициализируется одним значением, а на компьютере пользователя другим. И разбираться почему программа вдруг начала работать не так, как задумывалось очень сложно. Лучше просто не допускать таких ситуаций.

Доработка DUnit

Пользуемся для тестирования своего проекта, написанного на Delphi фреймворком DUnit.
И вот какая штука. Тестов у нас много, иногда нужно запустить какой-нибудь конкретный тест, а добраться до этого теста проблематично. По умолчанию все дерево тестов развернуто. Приходится или пролистывать все тесты, либо сворачивать ветки дерева, а потом разворачивать нужные.
Примерно вот так выглядит список тестов:

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

Добавить нужную мне команду из вызывающего кода не получилось. Пришлось модифицировать исходники самого DUnit. Да, я знаю, что это не правильно. Другого способа просто не нашел. Если кто знает что-то получше, подскажите.

А сделал я следующее. Нашел где лежат исходники DUnit, у меня это каталог "...\Embarcadero\Studio\20.0\source\DUnit\src\". Там находится и модуль с формой GUITestRunner.
В нее добавил еще одну менюшку "Свернуть всё" с простеньким кодом:

procedure TGUITestRunner.itCollapseClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to TestTree.Items[0].Count - 1 do
    TestTree.Items[0].Item[i].Collapse(True);
end;
Вот такая красота получилась:

Выглядит странно, зато удобно :)
Настройки сообщения Ярлыки Delphi Ворнинги Предупреждения компилятора Тесты Хинты Чистый код Опубликовано 28.07.2020 14:43 Постоянная ссылка Местоположение Параметры