[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8. Example of 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] [ ? ]

This document was generated by GNAT Mailserver on April, 18 2014 using texi2html