如何为clang-tidy的readability-input-naming规则配置可选函数前缀?
解决clang-tidy readability-input-naming规则的可选前缀需求
问题场景
我在项目中使用clang-tidy的readability-input-naming规则强制函数命名遵循CamelCase风格,但需要允许部分函数带有Win32_或Linux_前缀,且前缀后的命名仍要遵守CamelCase规则。示例如下:
// 合规的现有风格 void DoSomething(void); // 需要允许的新风格 void Win32_DoSomething(void); void Linux_DoSomething(void);
之前尝试过两种方法都不可行:
- 用忽略正则表达式跳过前缀开头的函数:会导致规则完全失效,无法约束前缀后的命名
- 用
NOLINTNEXTLINE(readability-input-naming)禁用行检查:同样会让规则对这些函数完全不生效
想问是否可以设置这类可选前缀,同时保留规则对函数名的约束?
解决方案
可以通过自定义readability-input-naming的函数命名正则表达式来实现。在项目的.clang-tidy配置文件中,针对该规则添加以下配置:
ReadabilityInputNaming: Function: '^(Win32_|Linux_)?[A-Z][a-zA-Z0-9]*'
正则说明
^(Win32_|Linux_)?:允许函数名开头为Win32_、Linux_,或者没有前缀(?标识该部分可选)[A-Z][a-zA-Z0-9]*:要求前缀后的部分(或无前缀时的整个函数名)必须以大写字母开头,后续可跟大小写字母或数字,严格遵循CamelCase风格
生效效果
- 不带前缀的函数:必须符合纯CamelCase(如
DoSomething合规,doSomething、do_something不合规) - 带前缀的函数:前缀必须是指定的
Win32_或Linux_,且前缀后的部分必须是CamelCase(如Win32_DoSomething合规,Win32_doSomething、Linux_do_something不合规)
内容的提问来源于stack exchange,提问作者junglie85
相关产品推荐
相关产品推荐

