szaszm commented on a change in pull request #1146: URL: https://github.com/apache/nifi-minifi-cpp/pull/1146#discussion_r679208828
########## File path: CONTRIB.md ########## @@ -15,24 +15,59 @@ # Apache NiFi - MiNiFi - C++ Contribution Guide - -We welcome all contributions to Apache MiNiFi. To make development easier, we've included -the linter for the Google Style guide. Google provides an Eclipse formatter for their style -guide. It is located [here](https://github.com/google/styleguide/blob/gh-pages/eclipse-cpp-google-style.xml). -New contributions are expected to follow the Google style guide when it is reasonable. -Additionally, all new files must include a copy of the Apache License Header. - +We welcome all contributions to Apache MiNiFi. All new files must include a copy of the Apache License Header. +To make development easier, we've included the linter for the Google Style guide. Google provides an Eclipse formatter +for their style guide. It is located +[here](https://github.com/google/styleguide/blob/gh-pages/eclipse-cpp-google-style.xml). +New contributions are expected to follow the Google Style Guide, except for the following points: +- Use .cpp extension for implementation files +- Use lowerCamelCase for functions, including accessors/mutators +- Use UPPER_SNAKE_CASE for constants +- Filenames are typically class names or a description of the contents in UpperCamelCase +- If a class is imitating something from STL, boost or similar, then STL-style lower_snake_case is used for naming the + class. UpperSnakeCase is used for most classes, in line with the Google Style Guide. +- Prefer `#pragma once` over include guards +- Forward declarations are OK +- Using-directives (`using namespace foo`) are discouraged, except for user-defined literal namespaces +- Some patterns in the codebase rely on objects with static storage duration without being trivially destructible and + initialized with a constant expression. It's OK to use these. +- Operator overloading and user-defined literal suffixes are OK +- Public mutable data members are allowed +- Inline function definition is OK +- Rvalue references, exceptions and RTTI are allowed +- Use gsl::narrow and gsl::narrow_cast in addition to standard casts. The codebase doesn't use abseil. +- We are more liberal regarding the use of `auto`. The Google Style Guide only allows using it when it makes the code + clearer. In MiNiFi C++, it's up to the personal preferences of the contributor. +- Template metaprogramming is OK as long as the usage is clear. Review comment: I think the "Prefer" part is a very specific use case and falls under the general goal of simple code anyway. I agree with the proposition, but wouldn't want to include it in the doc. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@nifi.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org