Using gnatpp Ada Source Code Formatter
Using gnatpp
The GNAT pretty print tool can format Ada source code files, to ensure they
follow a set of formatting rules. The program is named: gnatpp
.
On Ubuntu 20.04-02 LTS it is included in the package named: ‘asis-programs’ so can be install with the command:
sudo apt install asis-programs
If you are using the AdaCore GNAT Community Edition 2020 than it comes
pre-installed with that distribution. To obtain more information about
using ‘gnatpp
’ on the command line you can run the program and view the
help output:
gnatpp --help
An example command used directly from the CLI is shown below, which will reformat all the Ada body and spec source files in the current directory:
gnatpp -i3 -v -w -rnb *.adb *.ads
The above will format all Ada source code files (ie *.adb *.ads
) with
three (3) spaces indent, and display output verbosely and include any
warnings.
WARNING: The command will also replace the existing source files with
the newly formatted versions, without creating backups of the originals. If
you want to try the program out first, either make sure you have backup of
the files first, or remove the ‘-rnb
’ option from the command above, which
stands for ‘replace no backups’.
An alternative approach, and probably easier one, is to add a
‘Pretty_Printer’ section to the projects ‘.gpr’ file, and include the
preferred settings to be used by gnatpp
when executed. An example
configuration extract from a project file is below:
-- to apply run : gnatpp -Pmyproject.gpr
package Pretty_Printer is
for Default_Switches ("ada") use ("-i3", "-M120", "-v", "-w", "-rnb", "-A1", "-A2",
"-A3", "-A4", "-A5", "--no-separate-is", "--no-separate-loop-then");
end Pretty_Printer;
To apply the above gnatpp
settings to all the source code files included in
the project, the following command can be used:
gnatpp -Pmyproject.gpr
On occasion a source code file may contain a block of code that should not be
formatted by gnatpp
when it is run. In order to temporarily disable the
processing within a section of the source code, the areas to be left ‘as is’
can be marked with ‘--!pp off
’ to disable processing, and then ‘--!pp on
’
to re-enable the process when ready to resume the normal formatting rules.
An example to stop the reformatting of an array block is shown below:
-- more code to be formatted above
subtype Word is String (1 .. 3);
type Word_List is array (Positive range <>) of Word;
--!pp off
-- above disables gnatpp formatting of array block below
Words_List_Array : constant Word_List :=
("aah", "aal", "aas", "aba", "abb", "abo", "abs", "aby", "ace", "ach",
"act", "add", "ado", "ads", "adz", "aff", "aft", "aga", "age", "ago",
"zho", "zig", "zin", "zip", "zit", "ziz", "zoa", "zol", "zoo", "zos",
"zuz", "zzz");
--!pp on
-- above re-enables 'gnatpp' formatting
-- code to be formatted continues below
There are lots of options to suit most peoples preferences for formatting
their Ada source code, so be sure to read the commands help output. The source
code for the gnatpp
command is available on GitHub in the
AdaCore libalang-tools repo –
look in the ‘src’ sub directory for the source codes files starting
with ‘pp-’ in their names.
That’s it!! Time to build or development some Ada programs…
How to Get More Information
More general information and support for installing Ada can be found at the site:
The AdaCore tools and libraries are all on GitHub here:
There are plenty of good articles for more background on Ada such as:
One great free resource to learn the Ada language, so you can write your own programs is available here:
You can also download a nice PDF book to read of the above course here:
Article Details
- Title: Using gnatpp Ada Source Code Formatter
- Published Date : 06 Feb 2021