Исключить определенные заголовки из Clang-Tidy - PullRequest
2 голосов
/ 14 мая 2019

У меня есть несколько проектов со многими заголовками, которые я хочу проанализировать, но есть несколько заголовков, которые я не хочу анализировать с помощью clang-tidy

Моя папка имеет следующую иерархию

A \

    B\

        C\
           coco.h
        D\
    E\

Мои проекты находятся в папках C и D, и я хочу, чтобы они анализировали все заголовки в B, поэтому мое решение было HeaderFilterRegex: 'B / *' Есть много заголовков, которые я хочу включить, поэтому я не могу назвать каждый из них.

однако внутри папок C и D есть несколько заголовков, которые я бы хотел исключить (например, coco.h).

Я попытался поместить NO_LINT в cpp, который включает coco.h, и это не помогло,

Как я могу это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Я нашел обходной путь, который соответствует моей цели (у меня есть ограниченный список файлов, которые я хочу отфильтровать, и они имеют уникальные имена)

Я использую линейный фильтр и добавляю все файлы, которые я хочу отфильтровать. В диапазон строк я помещаю несуществующую строку, таким образом она отфильтровывает файл. В конце строкового фильтра я добавляю .h и .cpp, чтобы он фильтровал остальные файлы.

Eg.lets говорят, что я хочу отфильтровать только coco.cpp

-line-filter=[{"name":"coco.cpp","lines":[[9999999,9999999]]},{"name":".h"},{"name":".cpp"}]

Следует отметить одну вещь, и почему я подумал, что это не сработало, так это то, что строковый фильтр работает только после того, как он выполняет анализ, а заголовочный фильтр работает только для включений.

В coco.cpp у меня была строка (вызов шаблона), которая вызвала предупреждение, но предупреждение показывалось в заголовке, который должен был быть отфильтрован фильтром заголовка.

Оно не было отфильтровано, потому что предупреждение было из-за cpp, но фактическое предупреждение показывалось в заголовке, поэтому фильтр строки не помогал, пока я не поместил этот конкретный заголовок в фильтр строки.

Не очень интуитивно понятно.

0 голосов
/ 17 мая 2019

Можно (хотя и неуклюже) использовать для этого параметр header-filter.

Если вы переименуете файлы, которые вы не хотите обрабатывать, чтобы они имели суффикс, отличный от других файлов заголовков (скажем, .h_nolint вместо .h), вы можете использовать фильтр заголовков для сопоставления только таких файлов * .h, как этот. :

 -header-filter=\.h$

(clang-tidy использует POSIX ERE)

Конечно, это связано с необходимостью переименования всех соответствующих ссылок заголовка в коде в дополнение к переименованию файлов, но приличная IDE должна быть в состоянии справиться с этим.

...