Convert function names to snake case with clang-tidy

2 min read 05-10-2024
Convert function names to snake case with clang-tidy


Taming CamelCase: Converting Function Names to Snake Case with Clang-Tidy

C++ developers often grapple with the choice of naming conventions. While CamelCase is prevalent, many prefer the readability of snake_case, especially for function names. Manually renaming hundreds of functions can be tedious and error-prone. Thankfully, Clang-Tidy, a powerful static analysis tool, can automate this process, saving you time and ensuring consistency.

The Problem: Inconsistent Naming

Imagine a project with a mix of CamelCase and snake_case function names. This can lead to confusion, especially when collaborating with others who might follow different conventions. Here's an example:

// Example with inconsistent naming
void calculateAverage(int a, int b);
int get_max_value(int a, int b);

This code snippet uses calculateAverage in CamelCase and get_max_value in snake_case. This inconsistency makes the code harder to read and maintain.

Clang-Tidy to the Rescue

Clang-Tidy comes equipped with a modernize-use-trailing-return-type check, which can be adapted to enforce snake_case for function names. Here's how to configure it:

Checks:
  - modernize-use-trailing-return-type:
      IncludeModernize: true
      TrailingReturnTypeStyle: 'trailing'
      ModernizeFunctionNames: true
      FunctionNamingConvention: 'snake_case'

In this configuration:

  • IncludeModernize: true enables all modernization checks.
  • TrailingReturnTypeStyle: 'trailing' specifies trailing return type style.
  • ModernizeFunctionNames: true enables function name modernization.
  • FunctionNamingConvention: 'snake_case' enforces snake_case for function names.

Now, when Clang-Tidy runs on your project, it will identify all CamelCase function names and suggest replacing them with snake_case.

Going Beyond Function Names

The FunctionNamingConvention option isn't limited to just function names. You can also use it to enforce snake_case for other entities, such as:

  • Variables: Consistent naming makes your code clearer and easier to understand.
  • Constants: Using snake_case for constants emphasizes their immutability.
  • Namespaces: Adopting snake_case for namespaces can enhance code organization.

Automating the Conversion

Clang-Tidy offers a powerful --fix option that allows you to automatically apply suggested fixes. Simply run:

clang-tidy -fix --checks=modernize-use-trailing-return-type *.cpp

This command will automatically fix all reported issues and convert function names to snake_case.

Benefits of Enforcing Snake Case

Adopting snake_case for function names provides numerous benefits:

  • Improved Readability: Snake_case makes function names easier to parse and understand, especially for long names.
  • Consistency: Enforcing snake_case creates a consistent naming style throughout your codebase, making it easier to maintain and collaborate on.
  • Reduced Cognitive Load: Consistent naming reduces the cognitive burden on developers, allowing them to focus on the logic rather than deciphering naming conventions.

Conclusion

Clang-Tidy offers a powerful tool for enforcing consistent naming conventions, making your code cleaner, more readable, and easier to maintain. By leveraging the FunctionNamingConvention option, you can effortlessly convert function names to snake_case and improve the overall quality of your C++ projects.

References and Resources