Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save airglow923/1fa3bda42f2b193920d7f46ee8345e04 to your computer and use it in GitHub Desktop.
Save airglow923/1fa3bda42f2b193920d7f46ee8345e04 to your computer and use it in GitHub Desktop.
clang-tidy readability-identifier-naming for Google's naming convention
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: CamelCase
- key: readability-identifier-naming.ClassMemberCase
value: lower_case
- key: readability-identifier-naming.ConstexprVariableCase
value: CamelCase
- key: readability-identifier-naming.ConstexprVariablePrefix
value: k
- key: readability-identifier-naming.EnumCase
value: CamelCase
- key: readability-identifier-naming.EnumConstantCase
value: CamelCase
- key: readability-identifier-naming.EnumConstantPrefix
value: k
- key: readability-identifier-naming.FunctionCase
value: CamelCase
- key: readability-identifier-naming.GlobalConstantCase
value: CamelCase
- key: readability-identifier-naming.GlobalConstantPrefix
value: k
- key: readability-identifier-naming.StaticConstantCase
value: CamelCase
- key: readability-identifier-naming.StaticConstantPrefix
value: k
- key: readability-identifier-naming.StaticVariableCase
value: lower_case
- key: readability-identifier-naming.MacroDefinitionCase
value: UPPER_CASE
- key: readability-identifier-naming.MacroDefinitionIgnoredRegexp
value: '^[A-Z]+(_[A-Z]+)*_$'
- key: readability-identifier-naming.MemberCase
value: lower_case
- key: readability-identifier-naming.PrivateMemberSuffix
value: _
- key: readability-identifier-naming.PublicMemberSuffix
value: ''
- key: readability-identifier-naming.NamespaceCase
value: lower_case
- key: readability-identifier-naming.ParameterCase
value: lower_case
- key: readability-identifier-naming.TypeAliasCase
value: CamelCase
- key: readability-identifier-naming.TypedefCase
value: CamelCase
- key: readability-identifier-naming.VariableCase
value: lower_case
- key: readability-identifier-naming.IgnoreMainLikeFunctions
value: 1
@airglow923
Copy link
Author

airglow923 commented Mar 5, 2021

@rsglobal As per Google C++ Style Guide,

All such variables with static storage duration (i.e., statics and globals, see Storage Duration for details) should be named this way. This convention is optional for variables of other storage classes, e.g., automatic variables, otherwise the usual variable naming rules apply.

this way refers to the naming convention of constant names.

@rsglobal
Copy link

@airglow923,

But it looks like .StaticVariableCase is designed not for consts:
With this rule I have the following failure:

error: invalid case style for static variable 'backend_manager' [readability-identifier-naming,-warnings-as-errors]

BackendManager &BackendManager::GetInstance() {
  static BackendManager backend_manager;                                                                    
                        ^~~~~~~~~~~~~~~ 
                        kBackendManager                     

@airglow923
Copy link
Author

@rsglobal I think you're right. I thought all such variables mean variables regardless of their constness. However, after going through Google's source code, I could see non-const static variables are written with snake case:

  1. protobuf/stubs/common.cc
  2. protobuf/io/coded_stream_unittest.cc
  3. protobuf/testing/googletest.cc
  4. protobuf/extension_set.cc
  5. googletest/include/gtest/internal/gtest-port.h
  6. googletest/test/gtest_pred_impl_unittest.cc

I'm going to fix the error Thanks for letting me know.

@rsglobal
Copy link

@airglow23,

Thank you.

Could you also add this lines?:

  - key:             readability-identifier-naming.ConstexprVariableCase                                               
    value:           CamelCase                                                                                         
  - key:             readability-identifier-naming.ConstexprVariablePrefix                                             
    value:           k                                                                                                  

Currently constexpr variables are lower_case for some reason on tidy-11.

And also there is one more false positive in macros:

error: invalid case style for macro definition 'DRM_DRMFBIMPORTER_H_' [readability-identifier-naming,-warnings-as-errors]   
#define DRM_DRMFBIMPORTER_H_
        ^~~~~~~~~~~~~~~~~~~~
        DRM_DRMFBIMPORTER_H 

Do you have any ideas how to fix it?

@airglow923
Copy link
Author

airglow923 commented Aug 1, 2021

@rsglobal

UPDATE

I forgot to mention that IgnoredRegexp is only supported in clang-tidy 12 onwards.


Thanks. I included ConstexprVariableCase and Prefix as well to the file.

I think the error is due to the trailing underline. You can make use of MacroDefinitionIgnoredRegexp to allow trailing underline.

For example,

- key: readability-identifier-naming.MacroDefinitionIgnoredRegexp
  value: '^[A-Z]+(_[A-Z]+)*_$'

Note that IgnoredRegexp uses POSIX Extended Regular Expressions (POSIX ERE) for its regex engine.

@rsglobal
Copy link

rsglobal commented Aug 4, 2021

@airglow923,

Thank you, it worked for me out-of-the-box after upgrading to v12.
I think it worth adding into your CheckOptions list

@airglow923
Copy link
Author

@rsglobal Updated. Thanks

@rsglobal
Copy link

Hello,

To fix this:

Data members of structs, both static and non-static, are named like ordinary nonmember variables. They do not have the trailing underscores that data members in classes have.

the following diff has to be applied:

-  - key:             readability-identifier-naming.MemberSuffix
+  - key:             readability-identifier-naming.PrivateMemberSuffix
     value:           _
+  - key:             readability-identifier-naming.PublicMemberSuffix
+    value:           ''

@airglow923
Copy link
Author

@rsglobal Thank you for pointing that out

@ehds
Copy link

ehds commented May 23, 2022

How to use it in CMake Project.

@HappyCerberus
Copy link

@ehds
Copy link

ehds commented May 24, 2022

@IshitaTakeshi
Copy link

@airglow923 Do you have any specific license on this repo?

@airglow923
Copy link
Author

@IshitaTakeshi No, I don't. You can use or modify it as you want.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment