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
@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