Превратите предупреждения в ошибку только в пределах поставляемой разницы - PullRequest
0 голосов
/ 12 декабря 2018

В компании, в которой я работал, система сборки была настроена так, чтобы предупреждения превращались в ошибки только в измененном коде.Это работало, предоставляя генерацию diff (обычно между веткой, которую вы пытались объединить, и master, а затем передавая эту разницу в какой-либо инструмент компиляции, и инструмент генерировал бы предупреждения только в пределах поставляемого diff.

ThisЭто было здорово, поскольку это позволило вам, например, отказаться от какой-либо функции, и заставить систему сборки запретить людям вводить новые варианты использования этой функции, а затем удалить старые использования этой функции.

К сожалению, я не смотрелна настройке достаточно близко, прежде чем я покинул компанию, и не знаю, как его повторить. Мой вопрос: Как я могу повторить эту настройку?

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

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Clang поддерживает GCC #pragma diagnostic.

Например:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"

// ... changed code here ...

#pragma GCC diagnostic pop

MSVC также имеет нечто подобное:

#pragma warning(push, 3)
// ... changed code here ...
#pragma warning(pop)
0 голосов
/ 12 декабря 2018

Если бы мне пришлось это реализовать, моей первой идеей было бы:

  1. Получить объединенный файл.
  2. Анализировать diff, чтобы выяснить, какие регионы были изменены.
  3. Создайте новый файл и введите #pragma директивы 1 , которые локально включают / отключают предупреждения вокруг измененных областей.
  4. Также вставьте директивы #line, чтобы они выглядели как предупреждения / ошибкиИсходя из исходного файла.
  5. Скомпилируйте измененный файл и сохраните предупреждения / ошибки компилятора.
  6. Удалите измененный файл.
  7. Представьте диагностику компилятора пользователю.

1 Например, https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas для GCC.

...