aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/diagnostics.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/diagnostics.ads')
-rw-r--r--gcc/ada/diagnostics.ads477
1 files changed, 0 insertions, 477 deletions
diff --git a/gcc/ada/diagnostics.ads b/gcc/ada/diagnostics.ads
deleted file mode 100644
index 67a8c20..0000000
--- a/gcc/ada/diagnostics.ads
+++ /dev/null
@@ -1,477 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- D I A G N O S T I C S --
--- --
--- S p e c --
--- --
--- Copyright (C) 1992-2025, Free Software Foundation, Inc. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
--- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING3. If not, go to --
--- http://www.gnu.org/licenses for a complete copy of the license. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Types; use Types;
-with GNAT.Lists; use GNAT.Lists;
-
-package Diagnostics is
-
- type Diagnostic_Id is
- (No_Diagnostic_Id,
- GNAT0001,
- GNAT0002,
- GNAT0003,
- GNAT0004,
- GNAT0005,
- GNAT0006,
- GNAT0007,
- GNAT0008,
- GNAT0009,
- GNAT0010,
- GNAT0011);
-
- -- Labeled_Span_Type represents a span of source code that is associated
- -- with a textual label. Primary spans indicate the primary location of the
- -- diagnostic. Non-primary spans are used to indicate secondary locations.
- --
- -- Spans can contain labels that are used to annotate the highlighted span.
- -- Usually, the label is a short and concise message that provide
- -- additional allthough non-critical information about the span. This is
- -- an important since labels are not printed in the brief output and are
- -- only present in the pretty and structural outputs. That is an important
- -- distintion when choosing between a label and a sub-diagnostic.
- type Labeled_Span_Type is record
- Label : String_Ptr := null;
- -- Text associated with the span
-
- Span : Source_Span := (others => No_Location);
- -- Textual region in the source code
-
- Is_Primary : Boolean := True;
- -- Primary spans are used to indicate the primary location of the
- -- diagnostic. Typically there should just be one primary span per
- -- diagnostic.
- -- Non-primary spans are used to indicate secondary locations and
- -- typically are formatted in a different way or omitted in some
- -- contexts.
-
- Is_Region : Boolean := False;
- -- Regional spans are multiline spans that have a unique way of being
- -- displayed in the pretty output.
- end record;
-
- No_Labeled_Span : constant Labeled_Span_Type := (others => <>);
-
- procedure Destroy (Elem : in out Labeled_Span_Type);
- pragma Inline (Destroy);
-
- package Labeled_Span_Lists is new Doubly_Linked_Lists
- (Element_Type => Labeled_Span_Type,
- "=" => "=",
- Destroy_Element => Destroy,
- Check_Tampering => False);
- subtype Labeled_Span_List is Labeled_Span_Lists.Doubly_Linked_List;
-
- type Sub_Diagnostic_Kind is
- (Continuation,
- Help,
- Note,
- Suggestion);
-
- -- Sub_Diagnostic_Type represents a sub-diagnostic message that is meant
- -- to provide additional information about the primary diagnostic message.
- --
- -- Sub-diagnostics are usually constructed with a full sentence as the
- -- message and provide important context to the main diagnostic message or
- -- some concrete action to the user.
- --
- -- This is different from the labels of labeled spans which are meant to be
- -- short and concise and are mostly there to annotate the higlighted span.
-
- type Sub_Diagnostic_Type is record
- Kind : Sub_Diagnostic_Kind;
-
- Message : String_Ptr;
-
- Locations : Labeled_Span_List;
- end record;
-
- procedure Add_Location
- (Diagnostic : in out Sub_Diagnostic_Type; Location : Labeled_Span_Type);
-
- function Primary_Location
- (Diagnostic : Sub_Diagnostic_Type) return Labeled_Span_Type;
-
- procedure Destroy (Elem : in out Sub_Diagnostic_Type);
- pragma Inline (Destroy);
-
- package Sub_Diagnostic_Lists is new Doubly_Linked_Lists
- (Element_Type => Sub_Diagnostic_Type,
- "=" => "=",
- Destroy_Element => Destroy,
- Check_Tampering => False);
-
- subtype Sub_Diagnostic_List is Sub_Diagnostic_Lists.Doubly_Linked_List;
-
- -- An Edit_Type represents a textual edit that is associated with a Fix.
- type Edit_Type is record
- Span : Source_Span;
- -- Region of the file to be removed
-
- Text : String_Ptr;
- -- Text to be inserted at the start location of the span
- end record;
-
- procedure Destroy (Elem : in out Edit_Type);
- pragma Inline (Destroy);
-
- package Edit_Lists is new Doubly_Linked_Lists
- (Element_Type => Edit_Type,
- "=" => "=",
- Destroy_Element => Destroy,
- Check_Tampering => False);
-
- subtype Edit_List is Edit_Lists.Doubly_Linked_List;
-
- -- Type Applicability_Type will indicate the state of the resulting code
- -- after applying a fix.
- -- * Option Has_Placeholders indicates that the fix contains placeholders
- -- that the user would need to fill.
- -- * Option Legal indicates that applying the fix will result in legal Ada
- -- code.
- -- * Option Possibly_Illegal indicates that applying the fix will result in
- -- possibly legal, but also possibly illegal Ada code.
- type Applicability_Type is
- (Has_Placeholders,
- Legal,
- Possibly_Illegal,
- Unspecified);
-
- type Fix_Type is record
- Description : String_Ptr := null;
- -- Message describing the fix that will be displayed to the user.
-
- Applicability : Applicability_Type := Unspecified;
-
- Edits : Edit_List;
- -- File changes for the fix.
- end record;
-
- procedure Destroy (Elem : in out Fix_Type);
- pragma Inline (Destroy);
-
- package Fix_Lists is new Doubly_Linked_Lists
- (Element_Type => Fix_Type,
- "=" => "=",
- Destroy_Element => Destroy,
- Check_Tampering => False);
-
- subtype Fix_List is Fix_Lists.Doubly_Linked_List;
-
- procedure Add_Edit (Fix : in out Fix_Type; Edit : Edit_Type);
-
- type Status_Type is
- (Active,
- Deprecated);
-
- type Switch_Id is (
- No_Switch_Id,
- gnatwb,
- gnatwc,
- gnatwd,
- gnatwf,
- gnatwg,
- gnatwh,
- gnatwi,
- gnatwj,
- gnatwk,
- gnatwl,
- gnatwm,
- gnatwo,
- gnatwp,
- gnatwq,
- gnatwr,
- gnatwt,
- gnatwu,
- gnatwv,
- gnatww,
- gnatwx,
- gnatwy,
- gnatwz,
- gnatw_dot_a,
- gnatw_dot_b,
- gnatw_dot_c,
- gnatw_dot_f,
- gnatw_dot_h,
- gnatw_dot_i,
- gnatw_dot_j,
- gnatw_dot_k,
- gnatw_dot_l,
- gnatw_dot_m,
- gnatw_dot_n,
- gnatw_dot_o,
- gnatw_dot_p,
- gnatw_dot_q,
- gnatw_dot_r,
- gnatw_dot_s,
- gnatw_dot_t,
- gnatw_dot_u,
- gnatw_dot_v,
- gnatw_dot_w,
- gnatw_dot_x,
- gnatw_dot_y,
- gnatw_dot_z,
- gnatw_underscore_a,
- gnatw_underscore_c,
- gnatw_underscore_j,
- gnatw_underscore_l,
- gnatw_underscore_p,
- gnatw_underscore_q,
- gnatw_underscore_r,
- gnatw_underscore_s,
- gnaty,
- gnatya,
- gnatyb,
- gnatyc,
- gnatyd,
- gnatye,
- gnatyf,
- gnatyh,
- gnatyi,
- gnatyk,
- gnatyl,
- gnatym,
- gnatyn,
- gnatyo,
- gnatyp,
- gnatyr,
- gnatys,
- gnatyu,
- gnatyx,
- gnatyz,
- gnatyaa,
- gnatybb,
- gnatycc,
- gnatydd,
- gnatyii,
- gnatyll,
- gnatymm,
- gnatyoo,
- gnatyss,
- gnatytt,
- gnatel
- );
-
- subtype Active_Switch_Id is Switch_Id range gnatwb .. gnatel;
- -- The range of switch ids that represent switches that trigger a specific
- -- diagnostic check.
-
- type Switch_Type is record
-
- Status : Status_Type := Active;
- -- The status will indicate whether the switch is currently active,
- -- or has been deprecated. A deprecated switch will not control
- -- diagnostics, and will not be emitted by the GNAT usage.
-
- Human_Id : String_Ptr := null;
- -- The Human_Id will be a unique and stable string-based ID which
- -- identifies the content of the switch within the switch registry.
- -- This ID will appear in SARIF readers.
-
- Short_Name : String_Ptr := null;
- -- The Short_Name will denote the -gnatXX name of the switch.
-
- Description : String_Ptr := null;
- -- The description will contain the description of the switch, as it is
- -- currently emitted by the GNAT usage.
-
- Documentation_Url : String_Ptr := null;
- -- The documentation_url will point to the AdaCore documentation site
- -- for the switch.
-
- end record;
-
- type Diagnostic_Kind is
- (Error,
- Non_Serious_Error,
- -- Typically all errors are considered serious and the compiler should
- -- stop its processing since the tree is essentially invalid. However,
- -- some errors are not serious and the compiler can continue its
- -- processing to discover more critical errors.
- Warning,
- Default_Warning,
- -- Warning representing the old warnings created with the '??' insertion
- -- character. These warning have the [enabled by default] tag.
- Restriction_Warning,
- -- Warning representing the old warnings created with the '?*?'
- -- insertion character. These warning have the [restriction warning]
- -- tag.
- Style,
- Tagless_Warning,
- -- Warning representing the old warnings created with the '?' insertion
- -- character.
- Info
- );
-
- type Diagnostic_Entry_Type is record
- Status : Status_Type := Active;
-
- Human_Id : String_Ptr := null;
- -- A human readable code for the diagnostic. If the diagnostic has a
- -- switch with a human id then the human_id of the switch shall be used
- -- in SARIF reports.
-
- Documentation : String_Ptr := null;
-
- Switch : Switch_Id := No_Switch_Id;
- -- The switch that controls the diagnostic message.
- end record;
-
- type Diagnostic_Type is record
-
- Id : Diagnostic_Id := No_Diagnostic_Id;
-
- Kind : Diagnostic_Kind := Error;
-
- Switch : Switch_Id := No_Switch_Id;
-
- Message : String_Ptr := null;
-
- Warn_Err : Boolean := False;
- -- Signal whether the diagnostic was converted from a warning to an
- -- error. This needs to be set during the message emission as this
- -- behavior depends on the context of the code.
-
- Locations : Labeled_Span_List := Labeled_Span_Lists.Nil;
-
- Sub_Diagnostics : Sub_Diagnostic_List := Sub_Diagnostic_Lists.Nil;
-
- Fixes : Fix_List := Fix_Lists.Nil;
- end record;
-
- procedure Destroy (Elem : in out Diagnostic_Type);
- pragma Inline (Destroy);
-
- package Diagnostics_Lists is new Doubly_Linked_Lists
- (Element_Type => Diagnostic_Type,
- "=" => "=",
- Destroy_Element => Destroy,
- Check_Tampering => False);
-
- subtype Diagnostic_List is Diagnostics_Lists.Doubly_Linked_List;
-
- All_Diagnostics : Diagnostic_List := Diagnostics_Lists.Create;
-
- procedure Add_Location
- (Diagnostic : in out Diagnostic_Type; Location : Labeled_Span_Type);
-
- procedure Add_Sub_Diagnostic
- (Diagnostic : in out Diagnostic_Type;
- Sub_Diagnostic : Sub_Diagnostic_Type);
-
- procedure Add_Fix (Diagnostic : in out Diagnostic_Type; Fix : Fix_Type);
-
- procedure Record_Diagnostic (Diagnostic : Diagnostic_Type;
- Update_Count : Boolean := True);
-
- procedure Print_Diagnostic (Diagnostic : Diagnostic_Type);
-
- function Primary_Location
- (Diagnostic : Diagnostic_Type) return Labeled_Span_Type;
-
- type Labeled_Span_Array is
- array (Positive range <>) of Labeled_Span_Type;
- type Sub_Diagnostic_Array is
- array (Positive range <>) of Sub_Diagnostic_Type;
- type Fix_Array is
- array (Positive range <>) of Fix_Type;
- type Edit_Array is
- array (Positive range <>) of Edit_Type;
-
- No_Locations : constant Labeled_Span_Array (1 .. 0) := (others => <>);
- No_Sub_Diags : constant Sub_Diagnostic_Array (1 .. 0) := (others => <>);
- No_Fixes : constant Fix_Array (1 .. 0) := (others => <>);
- No_Edits : constant Edit_Array (1 .. 0) := (others => <>);
-
- function Make_Diagnostic
- (Msg : String;
- Location : Labeled_Span_Type;
- Id : Diagnostic_Id := No_Diagnostic_Id;
- Kind : Diagnostic_Kind := Diagnostics.Error;
- Switch : Switch_Id := No_Switch_Id;
- Spans : Labeled_Span_Array := No_Locations;
- Sub_Diags : Sub_Diagnostic_Array := No_Sub_Diags;
- Fixes : Fix_Array := No_Fixes)
- return Diagnostic_Type;
-
- procedure Record_Diagnostic
- (Msg : String;
- Location : Labeled_Span_Type;
- Id : Diagnostic_Id := No_Diagnostic_Id;
- Kind : Diagnostic_Kind := Diagnostics.Error;
- Switch : Switch_Id := No_Switch_Id;
- Spans : Labeled_Span_Array := No_Locations;
- Sub_Diags : Sub_Diagnostic_Array := No_Sub_Diags;
- Fixes : Fix_Array := No_Fixes);
-
- function Labeled_Span (Span : Source_Span;
- Label : String := "";
- Is_Primary : Boolean := True;
- Is_Region : Boolean := False)
- return Labeled_Span_Type;
-
- function Primary_Labeled_Span (Span : Source_Span;
- Label : String := "")
- return Labeled_Span_Type;
-
- function Primary_Labeled_Span (N : Node_Or_Entity_Id;
- Label : String := "")
- return Labeled_Span_Type;
-
- function Secondary_Labeled_Span (Span : Source_Span;
- Label : String := "")
- return Labeled_Span_Type;
-
- function Secondary_Labeled_Span (N : Node_Or_Entity_Id;
- Label : String := "")
- return Labeled_Span_Type;
-
- function Sub_Diag (Msg : String;
- Kind : Sub_Diagnostic_Kind :=
- Diagnostics.Continuation;
- Locations : Labeled_Span_Array := No_Locations)
- return Sub_Diagnostic_Type;
-
- function Continuation (Msg : String;
- Locations : Labeled_Span_Array := No_Locations)
- return Sub_Diagnostic_Type;
-
- function Help (Msg : String;
- Locations : Labeled_Span_Array := No_Locations)
- return Sub_Diagnostic_Type;
-
- function Suggestion (Msg : String;
- Locations : Labeled_Span_Array := No_Locations)
- return Sub_Diagnostic_Type;
-
- function Fix (Description : String;
- Edits : Edit_Array;
- Applicability : Applicability_Type := Unspecified)
- return Fix_Type;
-
- function Edit (Text : String;
- Span : Source_Span)
- return Edit_Type;
-end Diagnostics;