| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
gnatcheck Usage Here 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 a 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 |
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |