Как бороться с предупреждениями / подсказками в сторонних библиотеках?
Мы используем FastReport для генерации отчетов. Действительно, мы платим за доступ к исходному коду.
В настоящее время мы используем последнюю стабильную версию FastReport. И хотя он достаточно стабилен для нашего производства, всякий раз, когда я компилирую, я вижу это:
[dcc32 Hint] fs_iinirtti.pas(369): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
[dcc32 Hint] fs_iclassesrtti.pas(656): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
[dcc32 Hint] fs_iclassesrtti.pas(1014): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
[dcc32 Hint] fs_idialogsrtti.pas(159): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
[dcc32 Hint] fs_igraphicsrtti.pas(252): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
[dcc32 Hint] fs_iformsrtti.pas(429): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list
Я не фанат подсказок, тем более предупреждений в моем коде. Сейчас, конечно, подсказка H2443, возможно, не самая тревожная из подсказок, но я все же хотел бы от нее избавиться.
К счастью, если бы это был наш собственный код, исправить H2443 тривиально (просто добавьте ссылку, которую он запрашивает). Но даже при том, что у нас есть доступ к стороннему исходному коду в этом сценарии, кажется неуместным внезапно изменять его.
Поэтому я задаюсь вопросом: стоит ли ждать, пока разработчики FastReport выпустят новую версию без ошибки, или я должен сам исправить ее, а затем просто перезаписать мою копию исходных файлов при выпуске новой версии?
Я полагаю, что этот вопрос технически можно обобщить на то, как обращаться с подсказками / предупреждениями в сторонних библиотеках. Я думал об уведомлении разработчиков, но это не проект с открытым исходным кодом / бесплатное программное обеспечение, поэтому исправление не будет длиться месяцами.
(Справедливости ради, я должен отметить, что раньше было больше подсказок в предыдущих версиях, поэтому, по крайней мере, есть шаги в правильном направлении.)
3 ответа
Это распространенная ошибка, которую я часто вижу среди разработчиков Delphi (а также многие сторонние поставщики делают это неправильно). Почему вы компилируете стороннюю библиотеку каждый раз, когда создаете свой проект?
Используйте DCU. Отделите их от источника и укажите путь вашей библиотеки к каталогу, в котором находятся DCU. Это не только ускоряет процесс сборки (поскольку он не компилирует сторонние источники снова, но использует DCU), но и не заполняет ваш проект сообщениями из сторонних библиотек.
Если вы хотите войти в источник этих компонентов (вы часто этого не хотите из моего опыта), вы можете добавить источники в путь просмотра и даже сделать отладку и выпустить DCU, которые вы используете.
Вот что я делаю:
Сторонние библиотеки получают собственный репозиторий контроля версий локально. Если они с открытым исходным кодом, я пытаюсь клонировать вышестоящий репозиторий. Если нет, то каждая новая версия является новым коммитом в ветке поставщика. Любые подсказки / предупреждения / ошибки, которые я исправляю, передаются в другую ветку и отправляются поставщику. Если они примут решение, отлично! Если нет, то у меня все еще есть патчи, и новые апстрим-версии просто сливаются в мою собственную ветку.
Есть два основных подхода, которые вы можете использовать.
Если вы готовы изменить исходный код, сделайте это. Вместо того, чтобы решать проблему, которая приводит к предупреждению / подсказке, просто отключите предупреждение / подсказку. Это наименее инвазивный способ решения проблемы. Скорее всего, сторонняя библиотека поставляется с включаемым файлом. Вы можете добавить директивы к этому включаемому файлу для подавления предупреждений / подсказок. Используйте контроль версий, чтобы упростить повторное применение этих модификаций каждый раз при получении новой версии стороннего кода.
Если вы не можете или не хотите изменять исходный код, вы можете обратиться к разработчикам с просьбой разрешить проблему.