Next: List of Rules, Previous: Predefined Rules [Contents][Index]
gnatcheck UsageHere is a simple example. Suppose that in the current directory we have a project file named gnatcheck_example.gpr with the following content:
project Gnatcheck_Example is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Main use ("main.adb");
package Check is
for Default_Switches ("ada") use ("-rules", "-from=coding_standard");
end Check;
end Gnatcheck_Example;
And the file named coding_standard is also located in the current directory and has the following content:
----------------------------------------------------- -- This is a sample gnatcheck coding standard file -- ----------------------------------------------------- -- First, turning on rules, that are directly implemented in gnatcheck +RAbstract_Type_Declarations +RAnonymous_Arrays +RLocal_Packages +RFloat_Equality_Checks +REXIT_Statements_With_No_Loop_Name -- Then, activating compiler checks of interest: +RStyle_Checks:e -- This style check checks if a unit name is present on END keyword that -- is the end of the unit declaration
And the subdirectory src contains the following Ada sources:
pack.ads:
package Pack is
type T is abstract tagged private;
procedure P (X : T) is abstract;
package Inner is
type My_Float is digits 8;
function Is_Equal (L, R : My_Float) return Boolean;
end Inner;
private
type T is abstract tagged null record;
end;
pack.adb:
package body Pack is
package body Inner is
function Is_Equal (L, R : My_Float) return Boolean is
begin
return L = R;
end;
end Inner;
end Pack;
and main.adb
with Pack; use Pack;
procedure Main is
pragma Annotate
(gnatcheck, Exempt_On, "Anonymous_Arrays", "this one is fine");
Float_Array : array (1 .. 10) of Inner.My_Float;
pragma Annotate (gnatcheck, Exempt_Off, "Anonymous_Arrays");
Another_Float_Array : array (1 .. 10) of Inner.My_Float;
use Inner;
B : Boolean := False;
begin
for J in Float_Array'Range loop
if Is_Equal (Float_Array (J), Another_Float_Array (J)) then
B := True;
exit;
end if;
end loop;
end Main;
And suppose we call gnatcheck from the current directory using
the gnat driver:
gnat check -Pgnatcheck_example.gpr
As a result, gnatcheck is called to check all the files from the
project gnatcheck_example.gpr using the coding standard defined by
the file coding_standard. As the result, the gnatcheck
report file named gnatcheck.out will be created in the current
directory, and it will have the following content:
RULE CHECKING REPORT 1. OVERVIEW Date and time of execution: 2009.10.28 14:17 Tool version: GNATCHECK (built with ASIS 2.0.R for GNAT Pro 6.3.0w (20091016)) Command line: gnatcheck -files=... -cargs -gnatec=... -rules -from=coding_standard Coding standard (applied rules): Abstract_Type_Declarations Anonymous_Arrays EXIT_Statements_With_No_Loop_Name Float_Equality_Checks Local_Packages Compiler style checks: -gnatye Number of coding standard violations: 6 Number of exempted coding standard violations: 1 2. DETECTED RULE VIOLATIONS 2.1. NON-EXEMPTED VIOLATIONS Source files with non-exempted violations pack.ads pack.adb main.adb List of violations grouped by files, and ordered by increasing source location: pack.ads:2:4: declaration of abstract type pack.ads:5:4: declaration of local package pack.ads:10:30: declaration of abstract type pack.ads:11:1: (style) "end Pack" required pack.adb:5:19: use of equality operation for float values pack.adb:6:7: (style) "end Is_Equal" required main.adb:9:26: anonymous array type main.adb:19:10: exit statement with no loop name 2.2. EXEMPTED VIOLATIONS Source files with exempted violations main.adb List of violations grouped by files, and ordered by increasing source location: main.adb:6:18: anonymous array type (this one is fine) 2.3. SOURCE FILES WITH NO VIOLATION No files without violations END OF REPORT
Next: List of Rules, Previous: Predefined Rules [Contents][Index]