Next: Using gcc for Syntax Checking, Previous: Validity Checking, Up: Switches for gcc
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)
--
starting on a column that is a multiple of
the alignment level.
a (check attribute casing)
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.
b (blanks not allowed at statement end)
c (check comments)
gnatprep
(where –! is used) and the SPARK annnotation
language (where –# is used). For the purposes of this rule, a special
character is defined as being in one of the ASCII ranges
16#21#..16#2F# or 16#3A#..16#3F#.
--------------------------- -- This is a box comment -- -- with two text lines. -- ---------------------------
e (check end/exit labels)
end
statements ending subprograms and on
exit
statements exiting named loops, are required to be present.
f (no form feeds or vertical tabs)
h (no horizontal tabs)
i (check if-then layout)
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.
k (check keyword casing)
digits
used as attribute names to which this check
does not apply).
l (check layout)
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
.
For example, either of the following two layouts is acceptable:
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; |
m (check maximum line length)
Mnnn (set maximum line length)
n (check casing of entities in Standard)
Integer
and ASCII.NUL
).
o (check order of subprogram bodies)
p (check pragma casing)
r (check references)
s (check separate specs)
t (check token spacing)
abs
and not
must be followed by a space.
=>
must be surrounded by spaces.
<>
must be preceded by a space or a left parenthesis.
**
must be surrounded by spaces.
There is no restriction on the layout of the **
binary operator.
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 gnaty3abcefhiklmprst
, that is all checking
options are enabled with
the exception of -gnatyo,
with an indentation level of 3. This is the standard
checking option that is used for the GNAT sources.