Clang-tidy header-filter 正则表达式:Makefile -> .clang-tidy

Bra*_*fer 5 regex yaml makefile clang-tidy

我正在尝试将硬编码的配置选项clang-tidy从我们的 Makefile 移动到.clang-tidyYAML 文件。截至目前,我们将 run-clang-tidy-6.0.py 称为:

# Run clang-tidy. The header filter includes files in the foo and bar/baz directories
# but it excludes files ending in .g.h (auto-generated headers).
run-clang-tidy-6.0.py -header-filter='.*(foo|bar\/baz).*(?<!\.g\.h)$$' > clang-tidy-output.txt
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是如果我有HeaderFilterRegex: '.*(foo|bar\/baz).*(?<!\.g\.h)$$'in .clang-tidy,过滤就不会按预期工作。

我尝试了围绕哪些字符被转义/未转义的各种事情,因为我知道 Make 和 YAML 有不同的期望,但我无法做到恰到好处。IE:

  • 替换 $$ -> $
  • 双重转义 \ ( \ -> \\)
  • 删除 '\' 有人可以向我解释这个正则表达式在 YAML 文件中的适当格式吗?

非常感激!

小智 2

据我所知,正则表达式应该在 YAML 文件中写为字符串,并且反斜杠应该用另一个反斜杠转义。在您的场景中,YAML 文件应包括:

HeaderFilterRegex: '.*(foo|bar\\/baz).*(?<!\\.g\\.h)$'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,正斜杠之前和点之前的反斜杠会用另一个反斜杠转义。反斜杠用于转义美元符号之前的反斜杠和否定后向断言内的点。要在 YAML 中将正则表达式括起来,请使用单引号或双引号。如果使用双引号,则必须转义反斜杠和其他几个特定于 YAML 的符号,例如美元符号。举个例子:

HeaderFilterRegex: ".*(foo|bar\\/baz).*(?<!\\.g\\.h)$"
Run Code Online (Sandbox Code Playgroud)