Clang tidy не работает должным образом для статической переменной-члена

Я запускаю 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
};

Холодно, вы показываете код, другими словами минимальный воспроизводимый пример?

273K 31.01.2023 19:34

Я добавил фрагмент кода. Это очень тривиально, хотя, я не вижу, как это может быть более полезным.

Danny 31.01.2023 20:05

Это работает отлично. int s_myVariable_ не является статической переменной-членом.

273K 31.01.2023 20:06

Извините, опечатка, когда я вытащил соответствующий фрагмент кода. Я исправил это. Вы уверены, что это работает для вас? Clang-tidy очень четко понимает правила, которые он решает применить здесь, и он продолжает исправлять мою переменную на sMyVariable_

Danny 31.01.2023 21:20

Ваш разговор о переформатировании заставил меня подумать, что вы имеете в виду «формат лязга», а не «аккуратный лязг»…?.

Jesper Juhl 31.01.2023 21:48

Похоже, что по какой-то причине нет определений для статических переменных-членов... StaticXXX относится только к переменным, не являющимся членами.

sklott 31.01.2023 23:05

@sklott Я заметил это, и я думаю, что проблема в этом. Похоже, что не может быть супер чистого способа применить это правило для статических членов.

Danny 01.02.2023 00:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне тоже было трудно найти это в документации. Похоже, что стили именования статических переменных-членов определяются с помощью 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_ ко всем членам класса, даже нестатическим? Это нежелательно.

Danny 08.02.2023 03:31

Это не для меня. Насколько я могу судить из документации, указанной выше, ClassMemberX влияет только на статические переменные-члены. Существуют и другие стили, определяемые MemberCaseX, PrivateMemberX, ProtectedMemberX и т. д., которые влияют на другие переменные-члены области. Я не уверен, что они каким-то образом переопределяют ClassMemberX или это полностью отдельные стили, но их определение должно помочь получить нужное форматирование.

Marc 08.02.2023 07:16

Другие вопросы по теме