Я запускаю clang-tidy для своего проекта. Вот соответствующие параметры именования из моего файла .clang-tidy:
- key: readability-identifier-naming.ClassMemberCase # e.g., int myClassMember_
value: camelBack
- key: readability-identifier-naming.ClassMemberSuffix # e.g., int myClassMember_
value: _
- key: readability-identifier-naming.GlobalConstantCase # e.g., int MyGlobalConstant (please don't make globals)
value: CamelCase
- key: readability-identifier-naming.IgnoreMainLikeFunctions # Doesn't apply clang checks to main() args
value: 1
- key: readability-identifier-naming.MacroDefinitionCase # e.g., #define MY_MACRO = "PleaseDon'tUseMacrosAnywhere"
value: UPPER_CASE
- key: readability-identifier-naming.MacroDefinitionIgnoredRegexp
value: '^[A-Z]+(_[A-Z]+)*_$'
- key: readability-identifier-naming.MemberCase # e.g., int myMember_ = 42;
value: CamelCase
- key: readability-identifier-naming.MemberSuffix # e.g., int myMember_ = 42;
value: _
- key: readability-identifier-naming.ParameterCase # e.g., void MyFunction(int parameter, int anotherParam);
value: camelBack
- key: readability-identifier-naming.StaticConstantCase # e.g., static const std::string s_myStaticConstant = "I hope this works!"
value: camelBack
- key: readability-identifier-naming.StaticConstantPrefix # e.g., static const std::string s_myStaticConstant = "I hope this works!"
value: s_
- key: readability-identifier-naming.StaticVariableCase # e.g., static std::string s_myStaticVar = "I hope this works!"
value: camelBack
- key: readability-identifier-naming.StaticVariablePrefix # e.g., static std::string s_myStaticVar = "I hope this works!"
value: s_
- key: readability-identifier-naming.StructCase # e.g., struct MyStruct { ... };
value: CamelCase
- key: readability-identifier-naming.VariableCase # e.g., int myVariable = 10;
value: camelBack
К сожалению, clang tidy превращает мои статические переменные-члены класса в sMyVariable_
вместо s_myVariable_
. Кажется, что параметры для членов класса переопределяют параметры для статических переменных:
warning: invalid case style for class member 's_myVariable_' [readability-identifier-naming]
int MyClass::s_myVariable_ = 1;
Есть ли способ сделать статические правила именования более приоритетными, чем правила именования членов? Спасибо!
Пример кода:
class MyClass{
static int s_myVariable_; // Clang-tidy doesn't like this
};
Я добавил фрагмент кода. Это очень тривиально, хотя, я не вижу, как это может быть более полезным.
Это работает отлично. int s_myVariable_
не является статической переменной-членом.
Извините, опечатка, когда я вытащил соответствующий фрагмент кода. Я исправил это. Вы уверены, что это работает для вас? Clang-tidy очень четко понимает правила, которые он решает применить здесь, и он продолжает исправлять мою переменную на sMyVariable_
Ваш разговор о переформатировании заставил меня подумать, что вы имеете в виду «формат лязга», а не «аккуратный лязг»…?.
Похоже, что по какой-то причине нет определений для статических переменных-членов... StaticXXX относится только к переменным, не являющимся членами.
@sklott Я заметил это, и я думаю, что проблема в этом. Похоже, что не может быть супер чистого способа применить это правило для статических членов.
Мне тоже было трудно найти это в документации. Похоже, что стили именования статических переменных-членов определяются с помощью ClassMemberCase, ClassMemberPrefix и ClassMemberSuffix.
Для желаемого форматирования
class MyClass{
static int s_myVariable_; // Clang-tidy doesn't like this
};
поле CheckOptions
файла .clang-tidy будет иметь следующие ключи/значения:
- { key: readability-identifier-naming.ClassMemberPrefix, value: s_ }
- { key: readability-identifier-naming.ClassMemberCase, value: camelBack }
- { key: readability-identifier-naming.ClassMemberSuffix, value: _ }
Привет, Марк, не будет ли это префиксом s_
ко всем членам класса, даже нестатическим? Это нежелательно.
Это не для меня. Насколько я могу судить из документации, указанной выше, ClassMemberX
влияет только на статические переменные-члены. Существуют и другие стили, определяемые MemberCaseX
, PrivateMemberX
, ProtectedMemberX
и т. д., которые влияют на другие переменные-члены области. Я не уверен, что они каким-то образом переопределяют ClassMemberX
или это полностью отдельные стили, но их определение должно помочь получить нужное форматирование.
Холодно, вы показываете код, другими словами минимальный воспроизводимый пример?