如何抑制特定 clang-tidy 警告

发布时间 2023-09-16 20:40:10作者: Zijian/TENG

⚠️ clang-tidy 的规则能够帮助检查潜在的问题,不要盲目抑制警告!

可以通过添加 NOLINT, NOLINTNEXTLINE, 以及 NOLINTBEGINNOLINTEND 注释来抑制某些(或所有)clang-tidy 警告。

  • NOLINT 抑制同一行的警告
  • NOLINTNEXTLINE 抑制下一行的警告
  • NOLINTBEGINNOLINTEND 抑制多行警告
  • 上述 3 种标记都可以增加一对圆括号,来抑制特定类型的警告,可以用逗号分隔,抑制多种类型的警告;通配符也是可以的!
class Foo {
  // 抑制本行所有的警告
  Foo(int param); // NOLINT

  // 可以增加说明,解释抑制警告的理由
  Foo(char param); // NOLINT: Allow implicit conversion from `char`, because <some valid reason>

  // 只抑制 google-explicit-constructor 和 google-runtime-int 两种类型的警告
  Foo(double param); // NOLINT(google-explicit-constructor, google-runtime-int)

  // 抑制所有 `google` 开头的警告
  Foo(bool param); // NOLINT(google*)

  // 抑制所有以 `-avoid-c-arrays` 结尾的警告
  int array[10]; // NOLINT(*-avoid-c-arrays)

  // 抑制下一行 google-explicit-constructor 和 google-runtime-int 警告
  // NOLINTNEXTLINE(google-explicit-constructor, google-runtime-int)
  Foo(bool param);

  // 抑制下一行所有 `google` 开头的警告
  // NOLINTNEXTLINE(google*)
  Foo(bool param);

  // 抑制下一行以 `-avoid-c-arrays` 结尾的警告
  // NOLINTNEXTLINE(*-avoid-c-arrays)
  int array[10];

  // 抑制 NOLINTBEGIN 和 NOLINTEND 之间所有的 google-explicit-constructor 和 google-runtime-int 警告
  // NOLINTBEGIN(google-explicit-constructor, google-runtime-int)
  Foo(short param);
  Foo(long param);
  // NOLINTEND(google-explicit-constructor, google-runtime-int)

  // 抑制 NOLINTBEGIN 和 NOLINTEND 之间所有的 google 开头的警告
  // NOLINTBEGIN(google*)
  Foo(bool param);
  // NOLINTEND(google*)

  // 抑制 NOLINTBEGIN 和 NOLINTEND 之间所有的以 `-avoid-c-arrays` 结尾的警告
  // NOLINTBEGIN(*-avoid-c-arrays)
  int array[10];
  // NOLINTEND(*-avoid-c-arrays)
};

Reference

https://clang.llvm.org/extra/clang-tidy/#suppressing-undesired-diagnostics