我想使用 clang-tidy 'readability-identifier-naming' 模块来清理我的代码,但我未能在具有类属性和方法的简短示例中正确使用它。
我使用了以下 .clang-tidy 文件:
Checks: '-*,readability-identifier-naming'
CheckOptions:
- { key: readability-identifier-naming.ClassCase, value: CamelCase }
- { key: readability-identifier-naming.VariableCase, value: lower_case }
- { key: readability-identifier-naming.FunctionCase, value: lower_case }
- { key: readability-identifier-naming.MemberPrefix, value: m_ }
- { key: readability-identifier-naming.ParameterCase, value: lower_case }
Run Code Online (Sandbox Code Playgroud)
在此代码上:
class one_class
{
public:
int OneMethod(int OneArgument);
int OneAttribute;
};
int one_class::OneMethod(int OneArgument)
{
OneAttribute = 42;
return OneArgument + 1;
}
int main(void)
{
int OneVariable = 0;
one_class c;
OneVariable = c.OneMethod(OneVariable);
c.OneAttribute = 21;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是这样的代码:
class OneClass
{
public:
int one_method(int one_argument);
int m_OneAttribute;
};
int OneClass::one_method(int one_argument)
{
OneAttribute = 42; // must be m_OneAttribute =
return one_argument + 1;
}
int main(void)
{
int one_variable = 0;
OneClass c;
one_variable = c.OneMethod(one_variable); // must be c.one_method(...)
c.OneAttribute = 21; // must be c.m_OneAttribute = ...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
类方法 OneMethod() 的声明和定义已经正确转换,但 main() 函数中的方法调用没有。类属性 OneAttribute 也是如此。生成的代码不再编译。
我用这个命令行调用了 clang-tidy :
clang-tidy-5.0 -checks='readability-identifier-naming' -fix test.cpp --
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 16.04 上从软件包安装了 clang 5.0 和 clang 3.8。
我究竟做错了什么 ?
你没有做错任何事。clang-tidy只是出于某种原因不包括这种情况。这可能只是一个错误,尽管如果是这样的话,它似乎是一个很明显的错误。
有趣的是clang-rename可以正确地进行这样的重命名,并且表明 clang-tidy 的失败并不是因为技术可行性。
可能值得在此处提交关于此的错误:https : //bugs.llvm.org/enter_bug.cgi?product=clang-tools-extra
尽管有一个相关的错误,您应该将自己抄送给自己以获得更多关注
https://bugs.llvm.org/show_bug.cgi?id=41122
看起来它可能已在 2020-01 中修复:
https://bugs.llvm.org/show_bug.cgi?id=41122#c2
但这可能意味着 Clang 版本 < 11 将不会有修复,除非它被向后移植。