3.2.5 Style Checking
The -gnatyx switch
causes the compiler to
enforce specified style rules. A limited set of style rules has been used
in writing the GNAT sources themselves. This switch allows user programs
to activate all or some of these checks. If the source program fails a
specified style check, an appropriate warning message is given, preceded by
the character sequence “(style)”.
The string x is a sequence of letters or digits
indicating the particular style
checks to be performed. The following checks are defined:
- 1-9
- Specify indentation level.
If a digit from 1-9 appears
in the string after -gnaty
then proper indentation is checked, with the digit indicating the
indentation level required.
The general style of required indentation is as specified by
the examples in the Ada Reference Manual. Full line comments must be
aligned with the
--
starting on a column that is a multiple of
the alignment level, or they may be aligned the same way as the following
non-blank line (this is useful when full line comments appear in the middle
of a statement.
- a
- Check attribute casing.
If the letter a appears in the string after -gnaty
then attribute names, including the case of keywords such as
digits
used as attributes names, must be written in mixed case, that is, the
initial letter and any letter following an underscore must be uppercase.
All other letters must be lowercase.
- A
- Use of array index numbers in array attributes.
If the letter A appears in the string after
-gnaty then when using the array attributes First, Last, Range,
or Length, the index number must be omitted for one-dimensional arrays
and is required for multi-dimensional arrays.
- b
- Blanks not allowed at statement end.
If the letter b appears in the string after -gnaty then
trailing blanks are not allowed at the end of statements. The purpose of this
rule, together with h (no horizontal tabs), is to enforce a canonical format
for the use of blanks to separate source tokens.
- c
- Check comments.
If the letter c appears in the string after -gnaty
then comments must meet the following set of rules:
- d
- Check no DOS line terminators present.
If the letter d appears in the string after
-gnaty then all lines must be terminated by a single ASCII.LF
character (in particular the DOS line terminator sequence CR/LF is not
allowed).
- e
- Check end/exit labels.
If the letter e appears in the string after -gnaty then
optional labels on
end
statements ending subprograms and on
exit
statements exiting named loops, are required to be present.
- f
- No form feeds or vertical tabs.
If the letter f appears in the string after -gnaty then
neither form feeds nor vertical tab characters are permitted
in the source text.
- g
- GNAT style mode
If the letter g appears in the string after -gnaty then
the set of style check switches is set to match that used by the GNAT sources.
This may be useful when developing code that is eventually intended to be
incorporated into GNAT. For further details, see GNAT sources.
- h
- No horizontal tabs.
If the letter h appears in the string after -gnaty then
horizontal tab characters are not permitted in the source text.
Together with the b (no blanks at end of line) check, this
enforces a canonical form for the use of blanks to separate
source tokens.
- i
- Check if-then layout.
If the letter i appears in the string after -gnaty,
then the keyword
then
must appear either on the same
line as corresponding if
, or on a line on its own, lined
up under the if
with at least one non-blank line in between
containing all or part of the condition to be tested.
- I
- check mode IN keywords
If the letter I (upper case) appears in the string
after -gnaty then mode
in
(the default mode) is not
allowed to be given explicitly. in out
is fine,
but not in
on its own.
- k
- Check keyword casing.
If the letter k appears in the string after -gnaty then
all keywords must be in lower case (with the exception of keywords
such as
digits
used as attribute names to which this check
does not apply).
- l
- Check layout.
If the letter l appears in the string after -gnaty then
layout of statement and declaration constructs must follow the
recommendations in the Ada Reference Manual, as indicated by the
form of the syntax rules. For example an
else
keyword must
be lined up with the corresponding if
keyword.
There are two respects in which the style rule enforced by this check
option are more liberal than those in the Ada Reference Manual. First
in the case of record declarations, it is permissible to put the
record
keyword on the same line as the type
keyword, and
then the end
in end record
must line up under type
.
This is also permitted when the type declaration is split on two lines.
For example, any of the following three layouts is acceptable:
type q is record
a : integer;
b : integer;
end record;
type q is
record
a : integer;
b : integer;
end record;
type q is
record
a : integer;
b : integer;
end record;
|
Second, in the case of a block statement, a permitted alternative
is to put the block label on the same line as the declare
or
begin
keyword, and then line the end
keyword up under
the block label. For example both the following are permitted:
Block : declare
A : Integer := 3;
begin
Proc (A, A);
end Block;
Block :
declare
A : Integer := 3;
begin
Proc (A, A);
end Block;
|
The same alternative format is allowed for loops. For example, both of
the following are permitted:
Clear : while J < 10 loop
A (J) := 0;
end loop Clear;
Clear :
while J < 10 loop
A (J) := 0;
end loop Clear;
|
- Lnnn
- Set maximum nesting level
If the sequence Lnnn, where nnn is a decimal number in
the range 0-999, appears in the string after -gnaty then the
maximum level of nesting of constructs (including subprograms, loops,
blocks, packages, and conditionals) may not exceed the given value. A
value of zero disconnects this style check.
- m
- Check maximum line length.
If the letter m appears in the string after -gnaty
then the length of source lines must not exceed 79 characters, including
any trailing blanks. The value of 79 allows convenient display on an
80 character wide device or window, allowing for possible special
treatment of 80 character lines. Note that this count is of
characters in the source text. This means that a tab character counts
as one character in this count but a wide character sequence counts as
a single character (however many bytes are needed in the encoding).
- Mnnn
- Set maximum line length.
If the sequence Mnnn, where nnn is a decimal number, appears in
the string after -gnaty then the length of lines must not exceed the
given value. The maximum value that can be specified is 32767.
- n
- Check casing of entities in Standard.
If the letter n appears in the string
after -gnaty then any identifier from Standard must be cased
to match the presentation in the Ada Reference Manual (for example,
Integer
and ASCII.NUL
).
- o
- Check order of subprogram bodies.
If the letter o appears in the string
after -gnaty then all subprogram bodies in a given scope
(e.g. a package body) must be in alphabetical order. The ordering
rule uses normal Ada rules for comparing strings, ignoring casing
of letters, except that if there is a trailing numeric suffix, then
the value of this suffix is used in the ordering (e.g. Junk2 comes
before Junk10).
- p
- Check pragma casing.
If the letter p appears in the string after -gnaty then
pragma names must be written in mixed case, that is, the
initial letter and any letter following an underscore must be uppercase.
All other letters must be lowercase.
- r
- Check references.
If the letter r appears in the string after -gnaty
then all identifier references must be cased in the same way as the
corresponding declaration. No specific casing style is imposed on
identifiers. The only requirement is for consistency of references
with declarations.
- S
- Check no statements after THEN/ELSE.
If the letter S appears in the
string after -gnaty then it is not permitted to write any
statements on the same line as a THEN OR ELSE keyword following the
keyword in an IF statement. OR ELSE and AND THEN are not affected,
and a special exception allows a pragma to appear after ELSE.
- s
- Check separate specs.
If the letter s appears in the string after -gnaty then
separate declarations (“specs”) are required for subprograms (a
body is not allowed to serve as its own declaration). The only
exception is that parameterless library level procedures are
not required to have a separate declaration. This exception covers
the most frequent form of main program procedures.
- t
- Check token spacing.
If the letter t appears in the string after -gnaty then
the following token spacing rules are enforced:
- The keywords abs and not must be followed by a space.
- The token
=>
must be surrounded by spaces.
- The token
<>
must be preceded by a space or a left parenthesis.
- Binary operators other than
**
must be surrounded by spaces.
There is no restriction on the layout of the **
binary operator.
- Colon must be surrounded by spaces.
- Colon-equal (assignment, initialization) must be surrounded by spaces.
- Comma must be the first non-blank character on the line, or be
immediately preceded by a non-blank character, and must be followed
by a space.
- If the token preceding a left parenthesis ends with a letter or digit, then
a space must separate the two tokens.
- A right parenthesis must either be the first non-blank character on
a line, or it must be preceded by a non-blank character.
- A semicolon must not be preceded by a space, and must not be followed by
a non-blank character.
- A unary plus or minus may not be followed by a space.
- A vertical bar must be surrounded by spaces.
- u
- Check unnecessary blank lines.
Check for unnecessary blank lines. A blank line is considered
unnecessary if it appears at the end of the file, or if more than
one blank line occurs in sequence.
- x
- Check extra parentheses.
Check for the use of an unnecessary extra level of parentheses (C-style)
around conditions in
if
statements, while
statements and
exit
statements.
In the above rules, appearing in column one is always permitted, that is,
counts as meeting either a requirement for a required preceding space,
or as meeting a requirement for no preceding space.
Appearing at the end of a line is also always permitted, that is, counts
as meeting either a requirement for a following space, or as meeting
a requirement for no following space.
If any of these style rules is violated, a message is generated giving
details on the violation. The initial characters of such messages are
always “(style)
”. Note that these messages are treated as warning
messages, so they normally do not prevent the generation of an object
file. The -gnatwe switch can be used to treat warning messages,
including style messages, as fatal errors.
The switch
-gnaty on its own (that is not
followed by any letters or digits),
is equivalent to gnaty3aAbcefhiklmnprst
, that is all checking
options enabled with the exception of -gnatyo,
-gnatyd, -gnatyu, and -gnatyx.
an indentation level of 3 is set. This is similar to the standard
checking option that is used for the GNAT sources.
The switch
-gnatyN
clears any previously set style checks.