[Ada] Style check for mixed-case identifiers
authorBob Duff <duff@adacore.com>
Wed, 3 Jul 2019 08:14:38 +0000 (08:14 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 3 Jul 2019 08:14:38 +0000 (08:14 +0000)
This patch implements a new switch, -gnatyD, enables a style check that
requires defining identifiers to be in mixed case.

2019-07-03  Bob Duff  <duff@adacore.com>

gcc/ada/

* par-ch3.adb (P_Defining_Identifier): Call
Check_Defining_Identifier_Casing.
* style.ads, styleg.ads, styleg.adb
(Check_Defining_Identifier_Casing): New procedure to check for
mixed-case defining identifiers.
* stylesw.ads, stylesw.adb (Style_Check_Mixed_Case_Decls): New
flag for checking for mixed-case defining identifiers.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document new feature.
* gnat_ugn.texi: Regenerate.

From-SVN: r272972

gcc/ada/ChangeLog
gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
gcc/ada/gnat_ugn.texi
gcc/ada/par-ch3.adb
gcc/ada/style.ads
gcc/ada/styleg.adb
gcc/ada/styleg.ads
gcc/ada/stylesw.adb
gcc/ada/stylesw.ads

index 6a4fcfd9249c77aa476337c0f0a2866efc317b54..750100e90621cdfea1a108c0cf9ce3cc3e6f79d8 100644 (file)
@@ -1,3 +1,16 @@
+2019-07-03  Bob Duff  <duff@adacore.com>
+
+       * par-ch3.adb (P_Defining_Identifier): Call
+       Check_Defining_Identifier_Casing.
+       * style.ads, styleg.ads, styleg.adb
+       (Check_Defining_Identifier_Casing): New procedure to check for
+       mixed-case defining identifiers.
+       * stylesw.ads, stylesw.adb (Style_Check_Mixed_Case_Decls): New
+       flag for checking for mixed-case defining identifiers.
+       * doc/gnat_ugn/building_executable_programs_with_gnat.rst:
+       Document new feature.
+       * gnat_ugn.texi: Regenerate.
+
 2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>
 
        * doc/gnat_ugn/building_executable_programs_with_gnat.rst
index 9af50cc7b8d8eda7aac3b7f4c0236f1e3b0666ad..57c3fe1573b0511067368549693472feef820997 100644 (file)
@@ -4690,6 +4690,16 @@ checks to be performed. The following checks are defined:
   allowed).
 
 
+.. index:: -gnatyD (gcc)
+
+:switch:`-gnatyD`
+  *Check declared identifiers in mixed case.*
+
+  Declared identifiers must be in mixed case, as in
+  This_Is_An_Identifier. Use -gnatyr in addition to ensure
+  that references match declarations.
+
+
 .. index:: -gnatye (gcc)
 
 :switch:`-gnatye`
index 752c2acbfeec3791873cdd80f1c34a000410b7be..7371a76ae3113135f06da2bbb53a184fec0ec068 100644 (file)
@@ -13515,6 +13515,20 @@ character (in particular the DOS line terminator sequence CR/LF is not
 allowed).
 @end table
 
+@geindex -gnatyD (gcc)
+
+
+@table @asis
+
+@item @code{-gnatyD}
+
+@emph{Check declared identifiers in mixed case.}
+
+Declared identifiers must be in mixed case, as in
+This_Is_An_Identifier. Use -gnatyr in addition to ensure
+that references match declarations.
+@end table
+
 @geindex -gnatye (gcc)
 
 
index 75c17c38afd18c32d7e9a2f41ced01a2080f3d8a..aff14ed18b5f551a63e68a1a20b09ba83ce72a99 100644 (file)
@@ -228,8 +228,12 @@ package body Ch3 is
          raise Error_Resync;
       end if;
 
+      if Style_Check then
+         Style.Check_Defining_Identifier_Casing;
+      end if;
+
       Ident_Node := Token_Node;
-      Scan; -- past the reserved identifier
+      Scan; -- past the identifier
 
       --  If we already have a defining identifier, clean it out and make
       --  a new clean identifier. This situation arises in some error cases
index b1684a71b03d74b68bf2ac5cce70f2d67bb7d567..0e75389e3677429bec1bb392d927a255afd99962 100644 (file)
@@ -125,6 +125,9 @@ package Style is
    --  Called with Scan_Ptr pointing to the first minus sign of a comment.
    --  Intended for checking any specific rules for comment placement/format.
 
+   procedure Check_Defining_Identifier_Casing
+     renames Style_Inst.Check_Defining_Identifier_Casing;
+
    procedure Check_Dot_Dot
      renames Style_Inst.Check_Dot_Dot;
    --  Called after scanning out dot dot to check spacing
@@ -219,4 +222,5 @@ package Style is
    --  lower case letters. On entry Token_Ptr points to the keyword token.
    --  This is not used for keywords appearing as attribute designators,
    --  where instead Check_Attribute_Name (True) is called.
+
 end Style;
index 56526d83f20a845b0235ce41684d551f7c92c56e..fc2364b43f378a637ad58fe42803eab4d9b70d01 100644 (file)
@@ -610,6 +610,27 @@ package body Styleg is
       end if;
    end Check_Comment;
 
+   --------------------------------------
+   -- Check_Defining_Identifier_Casing --
+   --------------------------------------
+
+   procedure Check_Defining_Identifier_Casing is
+   begin
+      if Style_Check_Mixed_Case_Decls then
+         case Determine_Token_Casing is
+            when All_Upper_Case | All_Lower_Case =>
+               Error_Msg_SC -- CODEFIX
+                 ("(style) bad capitalization, mixed case required");
+
+            --  The Unknown case is something like A_B_C, which is both all
+            --  caps and mixed case.
+
+            when Mixed_Case | Unknown =>
+               null; -- OK
+         end case;
+      end if;
+   end Check_Defining_Identifier_Casing;
+
    -------------------
    -- Check_Dot_Dot --
    -------------------
index d93121f2923f77a296d4d92b4d0320c543a31b7f..f176c0282a17aa17ac9f8458898c477686293da0 100644 (file)
@@ -91,6 +91,11 @@ package Styleg is
    --  Called with Scan_Ptr pointing to the first minus sign of a comment.
    --  Intended for checking any specific rules for comment placement/format.
 
+   procedure Check_Defining_Identifier_Casing;
+   --  The current token is an identifier that will be a defining
+   --  identifier. Check that it is mixed case, if the appropriate
+   --  switch is set.
+
    procedure Check_Dot_Dot;
    --  Called after scanning out dot dot to check spacing
 
index 549f826c61ec13994c7abb26963ebafaa679de45..929e2d7d9bdebd883a9b6a5bae38d13612e850ac 100644 (file)
@@ -79,6 +79,7 @@ package body Stylesw is
       Style_Check_Boolean_And_Or        := False;
       Style_Check_Comments              := False;
       Style_Check_DOS_Line_Terminator   := False;
+      Style_Check_Mixed_Case_Decls      := False;
       Style_Check_End_Labels            := False;
       Style_Check_Form_Feeds            := False;
       Style_Check_Horizontal_Tabs       := False;
@@ -168,6 +169,7 @@ package body Stylesw is
       end if;
 
       Add ('d', Style_Check_DOS_Line_Terminator);
+      Add ('D', Style_Check_Mixed_Case_Decls);
       Add ('e', Style_Check_End_Labels);
       Add ('f', Style_Check_Form_Feeds);
       Add ('h', Style_Check_Horizontal_Tabs);
@@ -336,6 +338,9 @@ package body Stylesw is
             when 'd' =>
                Style_Check_DOS_Line_Terminator   := True;
 
+            when 'D' =>
+               Style_Check_Mixed_Case_Decls      := True;
+
             when 'e' =>
                Style_Check_End_Labels            := True;
 
@@ -503,6 +508,9 @@ package body Stylesw is
             when 'd' =>
                Style_Check_DOS_Line_Terminator   := False;
 
+            when 'D' =>
+               Style_Check_Mixed_Case_Decls      := False;
+
             when 'e' =>
                Style_Check_End_Labels            := False;
 
index d82fcb119efbea904339b78d34f681995c260803..de1f92d125503d17c0d78b56ccf5672605716218 100644 (file)
@@ -113,6 +113,10 @@ package Stylesw is
    --  the line terminator must be a single LF, without an associated CR (e.g.
    --  DOS line terminator sequence CR/LF not allowed).
 
+   Style_Check_Mixed_Case_Decls : Boolean := False;
+   --  This can be set True by using the -gnatyD switch. If it is True, then
+   --  declared identifiers must be in Mixed_Case.
+
    Style_Check_End_Labels : Boolean := False;
    --  This can be set True by using the -gnatye switch. If it is True, then
    --  optional END labels must always be present.