IWYU addition for cpp tasks #38
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Данное дополнение позволяет анализировать файлы test/* и src/* на наличие всех необходимых и отсутствие лишних заголовочных файлов.
В случае локального использования выдаёт результаты проверки, как warning'и при билде, при этом не мешая далее запуститься стандартному тестированию решения на тестах. При недоступности include-what-you-use для CMake, будет выдано предупреждение при сборке CMake.
В случае тестов с помощью GitHub Actions, по ходу подготовки к билду скачивает include-what-you-use (
sudo apt-get install -y iwyu) и проводит проверку. Предупреждения, выданные им, показываются по всем файлам, но после билда ран завершится сexit 1, таким образом, тесты не пропустят решение с лишними/недостающими заголовочными файлами.Для корректности работы проверок и получения ожидаемого результата добавлен mapping file

libstdcxx.impкоторый поясняет iwyu какому приватному заголовку соответствует стандартный публичный заголовок (при поиске нужного заголовка iwyu может найти приватный заголовк-источник символа). Такая проблема гораздо меньше проявляется в libc++, потому что в нём публичные заголовки лучше обрабатывают приватные и iwyu находит публичные версии. Необходимость такого маппинга видна при использовании в коде, например,std::vectorв сборке с debug.Такой mapping file получается с помощью поставляемого с include-what-you-use файла
iwyu-mapgen-libstdcxx.py, который сопоставляет каждому приватному заголовку публичный заголовок, который его включает.Далее несколько примеров вывода тестирования в разных условиях:
solution2.cppесть#include <type_traits>, но ничего из него не используется. При этом используетсяstd::vectorбез соответствующего заголовка, но программа компилируется, так как вsolution.hесть#include <vector>. При тестировании вывелись связанные с этим предупреждения и тесты завершились сexit 1:exit 1:#include <set>вsolution.cpp: