[ 
https://issues.apache.org/jira/browse/MINIFICPP-1617?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marton Szasz updated MINIFICPP-1617:
------------------------------------
    Description: 
CONTRIB.md refers to the google style guide, but the codebase and practice 
differs from that in many ways.

A quick list:
 * we use .cpp, not .cc for impl files
 * New code should prefer\{{ #pragma once}} over include guards.
 * I think forward declarations are fine in the codebase.
 * I think using-directives ({{using namespace}}) are acceptable, but not 
encouraged in our codebase.
 * We use objects with static storage duration in quite a few places, e.g. 
processor properties. Most of these don't follow the rule of being trivially 
destructible and initialized with a constant expression.
 * We use inheritance way more than is recommended by the style guide. I think 
we should improve this, so will not include as an exception.
 * We're more liberal regarding operator overloading and user-defined literals.
 * We allow public mutable data members
 * We allow functions to be defined inline when it makes sense
 * We have default arguments on virtual functions in many cases. We should 
improve on this, so I'm not including it in CONTRIB.md.
 * We use rvalue references
 * We use exceptions
 * We use RTTI
 * We use {{gsl::narrow}} and {{gsl::narrow_cast}} in addition to standard 
casts. We don't use abseil.
 * We're more liberal regarding the use of {{auto}}. The style guide says use 
it only when it makes the code clearer, but I think we allow using it according 
to personal preferences.
 * I think we're OK with template metaprogramming as long as the usage is clear.
 * In naming, we use lowerCamelCase for functions, including accessors/mutators 
and usually UPPER_SNAKE_CASE for constants. For filenames, we usually use the 
class name or some reasonable name typically in UpperCamelCase, except when 
it's meant to imitate some other header, like gsl.h. If a type name is 
imitating something from STL, boost or similar, then STL-style lower_snake_case 
is used (e.g. {{utils::make_unique}}).
 * Static data members might be named differently than 
snake_with_trailing_underscore_, I can't recall a good example atm. I think 
they are snake_case.
 * Enums are either FULL_CAPS_SNAKE or UpperCamelCase.
 * We don't use file-level comments to describe the contents of a file, we only 
include the license boilerplate.
 * Function comments use Javadoc style {{/** */}}
 * Line length is not really limited, but the linter checks for 200 characters. 
Use NOLINT comment when it makes sense to have a longer line.
 * continuation indentaion is ok both with 2 levels and aligned

  was:
CONTRIB.md refers to the google style guide, but the codebase and practice 
differs from that in many ways.

A quick list:
 * we use .cpp, not .cc for impl files
 * New code should prefer{{ #pragma once}} over include guards.
 * I think forward declarations are fine in the codebase.
 * I think using-directives ({{using namespace}}) are acceptable, but not 
encouraged in our codebase.
 * We use objects with static storage duration in quite a few places, e.g. 
processor properties. Most of these don't follow the rule of being trivially 
destructible and initialized with a constant expression.
 * We use inheritance way more than is recommended by the style guide. I think 
we should improve this, so will not include as an exception.
 * We're more liberal regarding operator overloading and user-defined literals.
 * We allow public mutable data members
 * We allow functions to be defined inline when it makes sense
 * We have default arguments on virtual functions in many cases.
 * We use rvalue references
 * We use exceptions
 * We use RTTI
 * We use {{gsl::narrow}} and {{gsl::narrow_cast}} in addition to standard 
casts. We don't use abseil.
 * We're more liberal regarding the use of {{auto}}. The style guide says use 
it only when it makes the code clearer, but I think we allow using it according 
to personal preferences.
 * I think we're OK with template metaprogramming as long as the usage is clear.
 * In naming, we use lowerCamelCase for functions, including accessors/mutators 
and usually UPPER_SNAKE_CASE for constants. For filenames, we usually use the 
class name or some reasonable name typically in UpperCamelCase, except when 
it's meant to imitate some other header, like gsl.h. If a type name is 
imitating something from STL, boost or similar, then STL-style lower_snake_case 
is used (e.g. {{utils::make_unique}}).
 * Static data members might be named differently than 
snake_with_trailing_underscore_, I can't recall a good example atm. I think 
they are snake_case.
 * Enums are either FULL_CAPS_SNAKE or UpperCamelCase.
 * We don't use file-level comments to describe the contents of a file, we only 
include the license boilerplate.
 * Function comments use Javadoc style {{/** */}}
 * Line length is not really limited, but the linter checks for 200 characters. 
Use NOLINT comment when it makes sense to have a longer line.
 * continuation indentaion is ok both with 2 levels and aligned


> Update CONTRIB.md where it differs from practice
> ------------------------------------------------
>
>                 Key: MINIFICPP-1617
>                 URL: https://issues.apache.org/jira/browse/MINIFICPP-1617
>             Project: Apache NiFi MiNiFi C++
>          Issue Type: Improvement
>            Reporter: Marton Szasz
>            Priority: Major
>             Fix For: 0.11.0
>
>
> CONTRIB.md refers to the google style guide, but the codebase and practice 
> differs from that in many ways.
> A quick list:
>  * we use .cpp, not .cc for impl files
>  * New code should prefer\{{ #pragma once}} over include guards.
>  * I think forward declarations are fine in the codebase.
>  * I think using-directives ({{using namespace}}) are acceptable, but not 
> encouraged in our codebase.
>  * We use objects with static storage duration in quite a few places, e.g. 
> processor properties. Most of these don't follow the rule of being trivially 
> destructible and initialized with a constant expression.
>  * We use inheritance way more than is recommended by the style guide. I 
> think we should improve this, so will not include as an exception.
>  * We're more liberal regarding operator overloading and user-defined 
> literals.
>  * We allow public mutable data members
>  * We allow functions to be defined inline when it makes sense
>  * We have default arguments on virtual functions in many cases. We should 
> improve on this, so I'm not including it in CONTRIB.md.
>  * We use rvalue references
>  * We use exceptions
>  * We use RTTI
>  * We use {{gsl::narrow}} and {{gsl::narrow_cast}} in addition to standard 
> casts. We don't use abseil.
>  * We're more liberal regarding the use of {{auto}}. The style guide says use 
> it only when it makes the code clearer, but I think we allow using it 
> according to personal preferences.
>  * I think we're OK with template metaprogramming as long as the usage is 
> clear.
>  * In naming, we use lowerCamelCase for functions, including 
> accessors/mutators and usually UPPER_SNAKE_CASE for constants. For filenames, 
> we usually use the class name or some reasonable name typically in 
> UpperCamelCase, except when it's meant to imitate some other header, like 
> gsl.h. If a type name is imitating something from STL, boost or similar, then 
> STL-style lower_snake_case is used (e.g. {{utils::make_unique}}).
>  * Static data members might be named differently than 
> snake_with_trailing_underscore_, I can't recall a good example atm. I think 
> they are snake_case.
>  * Enums are either FULL_CAPS_SNAKE or UpperCamelCase.
>  * We don't use file-level comments to describe the contents of a file, we 
> only include the license boilerplate.
>  * Function comments use Javadoc style {{/** */}}
>  * Line length is not really limited, but the linter checks for 200 
> characters. Use NOLINT comment when it makes sense to have a longer line.
>  * continuation indentaion is ok both with 2 levels and aligned



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to