Skip to content

Commit 178a45a

Browse files
committed
C#: Add high level diagnostic messages for buildless extraction (start, success)
1 parent 69f6e1e commit 178a45a

File tree

5 files changed

+63
-1
lines changed

5 files changed

+63
-1
lines changed

csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class CSharpAutobuilder : Autobuilder<CSharpAutobuildOptions>
4444
public override BuildScript GetBuildScript()
4545
{
4646
var attempt = BuildScript.Failure;
47-
switch (GetCSharpBuildStrategy())
47+
switch (BuildStrategy)
4848
{
4949
case CSharpBuildStrategy.CustomBuildCommand:
5050
attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true);
@@ -218,6 +218,10 @@ private CSharpBuildStrategy GetCSharpBuildStrategy()
218218
return CSharpBuildStrategy.Auto;
219219
}
220220

221+
private CSharpBuildStrategy? buildStrategy = null;
222+
private CSharpBuildStrategy BuildStrategy => buildStrategy ??= GetCSharpBuildStrategy();
223+
public override bool IsBuildless => BuildStrategy == CSharpBuildStrategy.Buildless;
224+
221225
private enum CSharpBuildStrategy
222226
{
223227
CustomBuildCommand,

csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,18 @@ void exitCallback(int ret, string msg, bool silent)
301301
var onOutput = BuildOutputHandler(Console.Out);
302302
var onError = BuildOutputHandler(Console.Error);
303303

304+
if (IsBuildless)
305+
{
306+
AddDiagnostic(new DiagnosticMessage(
307+
Options.Language,
308+
"buildless/mode-active",
309+
"C# was extracted in buildless mode",
310+
visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true),
311+
markdownMessage: "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
312+
severity: DiagnosticMessage.TspSeverity.Note
313+
));
314+
}
315+
304316
var buildResult = script.Run(Actions, startCallback, exitCallback, onOutput, onError);
305317

306318
// if the build succeeded, all diagnostics we captured from the build output should be warnings;
@@ -310,6 +322,18 @@ void exitCallback(int ret, string msg, bool silent)
310322
.Select(result => result.ToDiagnosticMessage(this, diagSeverity))
311323
.ForEach(AddDiagnostic);
312324

325+
if (buildResult == 0 && IsBuildless)
326+
{
327+
AddDiagnostic(new DiagnosticMessage(
328+
Options.Language,
329+
"buildless/complete",
330+
"C# buildless extraction completed",
331+
visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true),
332+
markdownMessage: "C# buildless extraction has completed.",
333+
severity: DiagnosticMessage.TspSeverity.Unknown
334+
));
335+
}
336+
313337
return buildResult;
314338
}
315339

@@ -318,6 +342,8 @@ void exitCallback(int ret, string msg, bool silent)
318342
/// </summary>
319343
public abstract BuildScript GetBuildScript();
320344

345+
public virtual bool IsBuildless { get; } = false;
346+
321347

322348
/// <summary>
323349
/// Produces a diagnostic for the tool status page that we were unable to automatically

csharp/extractor/Semmle.Util/ToolStatusPage.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public TspSource(string id, string name, string? extractorName = null)
4646
[JsonConverter(typeof(StringEnumConverter), typeof(CamelCaseNamingStrategy))]
4747
public enum TspSeverity
4848
{
49+
Unknown,
4950
Note,
5051
Warning,
5152
Error
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"markdownMessage": "C# buildless extraction has completed.",
3+
"severity": "unknown",
4+
"source": {
5+
"extractorName": "csharp",
6+
"id": "csharp/autobuilder/buildless/complete",
7+
"name": "C# buildless extraction completed"
8+
},
9+
"visibility": {
10+
"cliSummaryTable": true,
11+
"statusPage": false,
12+
"telemetry": true
13+
}
14+
}
15+
{
16+
"markdownMessage": "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
17+
"severity": "note",
18+
"source": {
19+
"extractorName": "csharp",
20+
"id": "csharp/autobuilder/buildless/mode-active",
21+
"name": "C# was extracted in buildless mode"
22+
},
23+
"visibility": {
24+
"cliSummaryTable": true,
25+
"statusPage": true,
26+
"telemetry": true
27+
}
28+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
from create_database_utils import *
2+
from diagnostics_test_utils import *
23

34
run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"])
5+
6+
check_diagnostics()

0 commit comments

Comments
 (0)