Skip to content

Commit 20b6111

Browse files
brettfoCopilot
andcommitted
Detect NoWarn NU1701 in SDK project discovery and warn during report
Add HasNoWarnNU1701 property to ProjectDiscoveryResult that is set during SDK project discovery when the NoWarn property contains NU1701. The warning is reported once per project during ReportDiscovery using a fully normalized rooted path in sorted order. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 55910db commit 20b6111

4 files changed

Lines changed: 68 additions & 0 deletions

File tree

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/LoggerTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using System.Text;
55
using System.Threading.Tasks;
66

7+
using NuGetUpdater.Core.Discover;
8+
79
using Xunit;
810
using Xunit.Sdk;
911

@@ -56,5 +58,47 @@ public void LogRaw_ShouldStreamLogsIndividually()
5658
Assert.Contains(testMessage2, output);
5759
}
5860

61+
[Fact]
62+
public void ReportDiscovery_LogsWarningForProjectsWithNU1701()
63+
{
64+
var logger = new StringLogger();
65+
var discoveryResult = new WorkspaceDiscoveryResult()
66+
{
67+
Path = "/src",
68+
Projects = [
69+
new()
70+
{
71+
FilePath = "zebra.csproj",
72+
Dependencies = [],
73+
ImportedFiles = [],
74+
AdditionalFiles = [],
75+
HasNoWarnNU1701 = true,
76+
},
77+
new()
78+
{
79+
FilePath = "middle.csproj",
80+
Dependencies = [],
81+
ImportedFiles = [],
82+
AdditionalFiles = [],
83+
HasNoWarnNU1701 = false,
84+
},
85+
new()
86+
{
87+
FilePath = "alpha.csproj",
88+
Dependencies = [],
89+
ImportedFiles = [],
90+
AdditionalFiles = [],
91+
HasNoWarnNU1701 = true,
92+
},
93+
]
94+
};
95+
96+
logger.ReportDiscovery(discoveryResult);
5997

98+
var warnings = logger.Messages.Where(m => m.Contains("has NoWarn property containing NU1701; package compatibility checks may be inaccurate.")).ToList();
99+
Assert.Equal(2, warnings.Count);
100+
Assert.Contains("/src/alpha.csproj", warnings[0]);
101+
Assert.Contains("/src/zebra.csproj", warnings[1]);
102+
Assert.DoesNotContain(logger.Messages, m => m.Contains("Project [/src/middle.csproj] has NoWarn property containing NU1701; package compatibility checks may be inaccurate."));
103+
}
60104
}

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/ProjectDiscoveryResult.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ public record ProjectDiscoveryResult : IDiscoveryResultWithDependencies
1616
public required ImmutableArray<string> ImportedFiles { get; init; }
1717
public required ImmutableArray<string> AdditionalFiles { get; init; }
1818
public required ImmutableArray<Dependency> Dependencies { get; init; }
19+
public bool HasNoWarnNU1701 { get; init; } = false;
1920
}

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,18 @@ PackageManagementKind.CentralPackageManagement or
674674
packageManagementKind = PackageManagementKind.Default;
675675
}
676676

677+
// check for NoWarn containing NU1701
678+
var noWarnValue = GetStringPropertyFromProjectProperties(projectProperties, "NoWarn");
679+
var hasNoWarnNU1701 = false;
680+
if (noWarnValue is not null)
681+
{
682+
var noWarnCodes = noWarnValue.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
683+
if (noWarnCodes.Contains("NU1701", StringComparer.OrdinalIgnoreCase))
684+
{
685+
hasNoWarnNU1701 = true;
686+
}
687+
}
688+
677689
var projectDiscoveryResult = new ProjectDiscoveryResult()
678690
{
679691
FilePath = projectRelativePath,
@@ -684,6 +696,7 @@ PackageManagementKind.CentralPackageManagement or
684696
AdditionalFiles = additional,
685697
PackageManagementKind = packageManagementKind,
686698
PackageManagementSpecialFileRelativePath = packageManagementFile,
699+
HasNoWarnNU1701 = hasNoWarnNU1701,
687700
};
688701
projectDiscoveryResults.Add(projectDiscoveryResult);
689702
}

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ILogger.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ public static void ReportAnalysis(this ILogger logger, AnalysisResult analysisRe
2424

2525
public static void ReportDiscovery(this ILogger logger, WorkspaceDiscoveryResult discoveryResult)
2626
{
27+
var nu1701Projects = discoveryResult.Projects
28+
.Where(p => p.HasNoWarnNU1701)
29+
.Select(p => PathHelper.JoinPath(discoveryResult.Path, p.FilePath).FullyNormalizedRootedPath())
30+
.OrderBy(p => p, StringComparer.OrdinalIgnoreCase)
31+
.ToList();
32+
foreach (var projectPath in nu1701Projects)
33+
{
34+
logger.Warn($"Project [{projectPath}] has NoWarn property containing NU1701; package compatibility checks may be inaccurate.");
35+
}
36+
2737
logger.Info("Discovery JSON content:");
2838
logger.Info(JsonSerializer.Serialize(discoveryResult, DiscoveryWorker.SerializerOptions));
2939
}

0 commit comments

Comments
 (0)