clang-tidy игнорирует именование идентификаторов читаемости в Windows

Я хочу использовать clang-tidy, чтобы обеспечить соблюдение правил стиля моей компании. Работаю на Windows 10. Установил LLVM v6.0.1. Вот мой тестовый файл:

class foo_bar
{
public:
  foo_bar() = default;

private:
  int bar_;
};

И вот командная строка, которую я запускаю:

clang-tidy.exe -checks='-*,readability-identifier-naming' -config="{CheckOptions: [ {key: readability-identifier-naming.ClassCase, value: CamelCase} ]}" test.cpp -- -std=c++11

clang-tidy не выводит никаких ошибок (я ожидал проблемы с именем класса). Я не понимаю, в чем моя ошибка. Кто-нибудь может направить меня?

Я попробовал ту же командную строку с тем же файлом в Ubuntu 16.04.4 и получил желаемый результат:

1 warning generated.
C:\Users\Cyril\dev\clang_test\main.cpp:1:7: warning: invalid case style for class 'foo_bar' [readability-identifier-naming]
class foo_bar
      ^

person Cyril    schedule 06.08.2018    source источник
comment
похоже, вам нужно использовать CamelCase с именами ваших классов (FooBar)   -  person FrankS101    schedule 06.08.2018
comment
Я надеялся, что clang-tidy проверит эту опцию и, увидев, что имя плохо отформатировано, выдаст ошибку. Я неправильно понимаю, что должен делать clang-tidy?   -  person Cyril    schedule 06.08.2018
comment
Если вы хотите, чтобы это была ошибка, а не предупреждение, используйте -warnings-as-errors   -  person FrankS101    schedule 06.08.2018
comment
Я попробовал, но выхода нет. Я тестировал ту же командную строку в Linux, она работает нормально. Возможно ли, что у clang-tidy есть проблема в Windows?   -  person Cyril    schedule 06.08.2018
comment
Протестируйте его еще немного - кажется, что он действительно выполняет проверки по умолчанию вместо того, чтобы запускать тот, который вы хотите. Поскольку в вашем коде нет ничего плохого с точки зрения проверок clang-tidy по умолчанию, вывода нет. См. Мой ответ для обходного пути.   -  person pablo285    schedule 10.08.2018


Ответы (2)


Кажется, что у clang-tidy в Windows проблема с комбинацией параметров -checks и -config.

Фактически вы можете поместить все в -config:

clang-tidy.exe -config="{Checks: '-*,readability-identifier-naming', CheckOptions: [ {key: readability-identifier-naming.ClassCase, value: CamelCase} ]}" test.cpp -- -std=c++11

Это дает желаемый результат

X:\test.cpp:1:7: warning: invalid case style for class 'foo_bar' [readability-identifier-naming]
class foo_bar
      ^~~~~~~
      FooBar

Проверено на LLVM 6.0 в Windows.

person pablo285    schedule 09.08.2018

Если вы используете Windows Cmd Shell (cmd.exe), то проблема заключается в использовании одинарной кавычки (') в параметре -checks в этой строке.

clang-tidy.exe -checks='-*,readability-identifier-naming' ....

если вы измените это на (используя вместо этого ("))

clang-tidy.exe -checks="-*,readability-identifier-naming" ....

тогда он будет работать правильно.

Это не проблема при использовании bash в Windows только при запуске в cmd.exe.

person MyDeveloperDay    schedule 17.01.2019