rspec/rules/S3543/cfamily/rule.adoc
Fred Tingaud 51369b610e
Make sure that includes are always surrounded by empty lines (#2270)
When an include is not surrounded by empty lines, its content is inlined
on the same line as the adjacent content. That can lead to broken tags
and other display issues.
This PR fixes all such includes and introduces a validation step that
forbids introducing the same problem again.
2023-06-22 10:38:01 +02:00

61 lines
2.2 KiB
Plaintext

== Why is this an issue?
{cpp}14 introduced the ability to use a digit separator (``++'++``) to split a literal number into groups of digits for better readability.
To ensure that readability is really improved by using digit separators, this rule verifies:
* *Homogeneity*
** Except for the left-most group, which can be smaller, all groups in a number should contain the same number of digits. Mixing group sizes is at best confusing for maintainers, and at worst a typographical error that is potentially a bug.
* *Standardization*
** It is also confusing to regroup digits using a size that is not standard. This rule enforce the following standards:
*** Decimal numbers should be separated using groups of 3 digits.
*** Hexadecimal numbers should be separated using groups of 2 or 4 digits.
*** Octal and Binary should be separated using groups of 2, 3 or 4 digits.
Furthermore, using groups with more than 4 consecutive digits is not allowed because they are difficult for maintainers to read.
=== Noncompliant code example
[source,cpp]
----
long decimal_int_value = 1'554'3124; // Noncompliant; mixing groups of 3 and 4 digits
double decimal_float_value = 7'91'87'14.3456; // Noncompliant; using groups of 2 instead of 3 digits
long hexadecimal_value = 0x8'3A3'248'6E2; // Noncompliant; using groups of 3 instead of 2 or 4 digits
long octal_value = 0442'03433'13726; // Noncompliant; using groups of 5 instead of 2, 3 or 4 digits.
long binary_value = 0b01010110'11101010; // Noncompliant; using groups of 8 instead of 2, 3 or 4 digits.
----
=== Compliant solution
[source,cpp]
----
long decimal_int_value = 15'543'124;
double decimal_float_value = 7'918'714.3456;
long hexadecimal_value = 0x83'A324'86E2;
long octal_value = 04'4203'4331'3726;
long binary_value = 0b0101'0110'1110'1010;
----
include::../exceptions.adoc[]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]
include::../highlighting.adoc[]
'''
== Comments And Links
(visible only on this page)
include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]