https://gcc.gnu.org/g:e6d88c002305f4840d4add9316e551c5ae04333d
commit r15-4909-ge6d88c002305f4840d4add9316e551c5ae04333d Author: Viljar Indus <in...@adacore.com> Date: Fri Oct 11 16:34:36 2024 +0300 ada: Add Invocation node to the SARIF report Add an invocation node to the SARIF report that contains the command line use to activate gnat and whether the execution was successful or not. gcc/ada/ChangeLog: * diagnostics-sarif_emitter.adb (Print_Runs): Add printing for the invocation node that consists of a single invocations that is composed of the commandLine and executionSuccessful attributes. Diff: --- gcc/ada/diagnostics-sarif_emitter.adb | 81 ++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/gcc/ada/diagnostics-sarif_emitter.adb b/gcc/ada/diagnostics-sarif_emitter.adb index fe251f9754db..b6035c2970d6 100644 --- a/gcc/ada/diagnostics-sarif_emitter.adb +++ b/gcc/ada/diagnostics-sarif_emitter.adb @@ -28,6 +28,10 @@ with Diagnostics.JSON_Utils; use Diagnostics.JSON_Utils; with Gnatvsn; use Gnatvsn; with Output; use Output; with Sinput; use Sinput; +with Lib; use Lib; +with Namet; use Namet; +with Osint; use Osint; +with Errout; use Errout; package body Diagnostics.SARIF_Emitter is @@ -94,6 +98,19 @@ package body Diagnostics.SARIF_Emitter is -- ... -- ] + procedure Print_Invocations; + -- Print an invocations node that consists of + -- * a single invocation node that consists of: + -- * commandLine + -- * executionSuccessful + -- + -- "invocations": [ + -- { + -- "commandLine": <command line arguments provided to the GNAT FE>, + -- "executionSuccessful": ["true"|"false"], + -- } + -- ] + procedure Print_Artifact_Change (A : Artifact_Change); -- Print an ArtifactChange node -- @@ -573,6 +590,63 @@ package body Diagnostics.SARIF_Emitter is Write_Char (']'); end Print_Fixes; + ----------------------- + -- Print_Invocations -- + ----------------------- + + procedure Print_Invocations is + + function Compose_Command_Line return String; + -- Composes the original command line from the parsed main file name and + -- relevant compilation switches + + function Compose_Command_Line return String is + Buffer : Bounded_String; + begin + Append (Buffer, Get_First_Main_File_Name); + for I in 1 .. Compilation_Switches_Last loop + declare + Switch : constant String := Get_Compilation_Switch (I).all; + begin + if Buffer.Length + Switch'Length + 1 <= Buffer.Max_Length then + Append (Buffer, ' ' & Switch); + end if; + end; + end loop; + + return +Buffer; + end Compose_Command_Line; + + begin + Write_Str ("""" & "invocations" & """" & ": " & "["); + Begin_Block; + NL_And_Indent; + + Write_Char ('{'); + Begin_Block; + NL_And_Indent; + + -- Print commandLine + + Write_String_Attribute ("commandLine", Compose_Command_Line); + Write_Char (','); + NL_And_Indent; + + -- Print executionSuccessful + + Write_String_Attribute + ("executionSuccessful", + (if Compilation_Errors then "false" else "true")); + + End_Block; + NL_And_Indent; + Write_Char ('}'); + + End_Block; + NL_And_Indent; + Write_Char (']'); + end Print_Invocations; + ------------------ -- Print_Region -- ------------------ @@ -1052,6 +1126,12 @@ package body Diagnostics.SARIF_Emitter is Write_Char (','); NL_And_Indent; + -- A run consists of an invocation + Print_Invocations; + + Write_Char (','); + NL_And_Indent; + -- A run consists of results Print_Results (Diags); @@ -1076,7 +1156,6 @@ package body Diagnostics.SARIF_Emitter is ------------------------ procedure Print_SARIF_Report (Diags : Diagnostic_List) is - begin Write_Char ('{'); Begin_Block;