У меня есть проект STM32, который компилируется с использованием CMake и генерирует файл compile_commands.json. STM32CubeMX генерирует файл сборки (т. е. start_stm32f103xb.s) и добавляет его в базу данных компиляции.
Всякий раз, когда я запускаю use-clang-tidy.py, он пытается проанализировать этот файл и возвращает ошибку:
D:\git\leany\Core\startup_stm32f103xb.s:28:3: error: expected identifier or '(' [clang-diagnostic-error]
28 | .syntax unified
| ^
Меня не удивляет ошибка, поскольку clang пытается скомпилировать файл ASM как C, но мне интересно, можно ли вообще игнорировать этот файл или любой файл asm. Кроме того, мне бы очень хотелось, чтобы clang-tidy был частью моих процедур CI/CD, поскольку я хочу, чтобы мой собственный код (расположенный в Components/) был как можно более чистым. Кроме того, я не могу прикасаться к файлам, созданным STM32CubeMX, а также к файлам CMake, которые он создает.
Вот кодовая база: Github
Я пытался создать файл .clang-tidy в корне проекта с упоминанием «Проверки: «-*»», но он просто отменяет все проверки, включая те, которые расположены в Components/.
Я также пробовал добавлять в него разделы HeaderFileExtensions
и ImplementationFileExtensions
, чтобы учитывать только файлы *.h и *.c, но это ничего не меняет.
Согласно документу, если вы бежите
clang-tidy --dump-config
вы получите список поддерживаемых параметров конфигурации:
---
Checks: '-*,some-check'
WarningsAsErrors: ''
HeaderFileExtensions: ['', 'h','hh','hpp','hxx']
ImplementationFileExtensions: ['c','cc','cpp','cxx']
HeaderFilterRegex: ''
FormatStyle: none
InheritParentConfig: true
User: user
CheckOptions:
some-check.SomeOption: 'some value'
Похоже, эти варианты могут работать:
HeaderFileExtensions: ['', 'h','hh','hpp','hxx']
ImplementationFileExtensions: ['c','cc','cpp','cxx']
Я изменил корневой файл .clang-tidy с помощью HeaderFileExtensions и ImplementationFileExtensions, чтобы учитывать только *.h и *.c, но результат тот же. --dump-config показывает только те, которые сейчас
Я нашел решение на форуме LLVM!
Из справки я не понял, что [files ...]
ожидал регулярного выражения.
Я только что добавил files ".*(?<!\.s)$"
в конце команды, чтобы отфильтровать файл сборки.
Я попытался создать файл .clang-tidy в корне проекта, и он возвращает следующее сообщение: > Ошибка анализа D:/git/leany\.clang-tidy: неверный аргумент > D:/git/leany /cmake/stm32cubemx/../..\.clang-tidy:5:1: ошибка: неизвестный ключ 'ExcludeRegex' > ExcludeRegex: '.*\.(s|S|asm)$' > ^~~~~ ~~~~~~~ Это может быть какой-то устаревший аргумент в пользу clang-tidy :/ Если так, то жаль, поскольку это был бы довольно чистый вариант