Skip to content

Commit

Permalink
Fix rule string arrays + clean up stringtable (#2788)
Browse files Browse the repository at this point in the history
* Fixes

* Change the type of MessageResourceNames so we can call Add in derived classes

* Fix rule message handling + clean up resource strings + refresh baselines
  • Loading branch information
EasyRhinoMSFT committed Feb 21, 2024
1 parent 9036bb9 commit 5b7d014
Show file tree
Hide file tree
Showing 65 changed files with 664 additions and 243 deletions.
2 changes: 1 addition & 1 deletion src/Sarif.Driver/Sdk/Skimmer.cs
Expand Up @@ -23,7 +23,7 @@ public Skimmer()

protected virtual ResourceManager ResourceManager => null;

protected virtual IEnumerable<string> MessageResourceNames => throw new NotImplementedException();
protected virtual ICollection<string> MessageResourceNames => throw new NotImplementedException();

public virtual bool EnabledByDefault => true;

Expand Down
Expand Up @@ -13,11 +13,6 @@ public class AdoProvideRequiredRunProperties
/// </summary>
public override string Id => RuleId.ADOProvideRequiredRunProperties;

protected override IEnumerable<string> MessageResourceNames => new string[] {
nameof(RuleResources.ADO1014_AdoProvideRequiredRunProperties_Error_MissingAutomationDetails_Text),
nameof(RuleResources.ADO1014_AdoProvideRequiredRunProperties_Error_MissingAutomationDetailsId_Text)
};

public override MultiformatMessageString FullDescription => new MultiformatMessageString() { Text = RuleResources.ADO1014_ProvideRequiredRunProperties_FullDescription_Text };

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>(new[] { RuleKind.Ado });
Expand All @@ -27,6 +22,8 @@ public class AdoProvideRequiredRunProperties
public AdoProvideRequiredRunProperties()
{
this.DefaultConfiguration.Level = FailureLevel.Error;
this.MessageResourceNames.Add(nameof(RuleResources.ADO1014_AdoProvideRequiredRunProperties_Error_MissingAutomationDetails_Text));
this.MessageResourceNames.Add(nameof(RuleResources.ADO1014_AdoProvideRequiredRunProperties_Error_MissingAutomationDetailsId_Text));
}

protected override void Analyze(Run run, string runPointer)
Expand Down
Expand Up @@ -15,17 +15,14 @@ public class AdoProvideRequiredResultProperties

public override MultiformatMessageString FullDescription => new MultiformatMessageString() { Text = RuleResources.ADO1015_ProvideRequiredResultProperties_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
nameof(RuleResources.ADO1015_ProvideRequiredResultProperties_Error_MissingRuleId_Text)
};

public override HashSet<RuleKind> RuleKinds => new(new[] { RuleKind.Ado });

protected override string ServiceName => RuleResources.ServiceName_ADO;

public AdoProvideRequiredResultProperties()
{
this.DefaultConfiguration.Level = FailureLevel.Error;
this.MessageResourceNames.Add(nameof(RuleResources.ADO1015_ProvideRequiredResultProperties_Error_MissingRuleId_Text));
}

protected override void Analyze(Result result, string resultPointer)
Expand Down
Expand Up @@ -15,10 +15,6 @@ public class AdoProvideRequiredToolProperties
/// </summary>
public override string Id => RuleId.ADOProvideToolDriverProperties;

protected override IEnumerable<string> MessageResourceNames => new string[] {
nameof(RuleResources.ADO1018_ProvideRequiredToolProperties_Error_MissingDriverFullName_Text)
};

public override MultiformatMessageString FullDescription => new MultiformatMessageString() { Text = RuleResources.ADO1018_ProvideRequiredToolProperties_FullDescription_Text };

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>(new[] { RuleKind.Ado });
Expand All @@ -28,6 +24,7 @@ public class AdoProvideRequiredToolProperties
public AdoProvideRequiredToolProperties()
{
this.DefaultConfiguration.Level = FailureLevel.Error;
this.MessageResourceNames.Add(nameof(RuleResources.ADO1018_ProvideRequiredToolProperties_Error_MissingDriverFullName_Text));
}

protected override void Analyze(Run run, string runPointer)
Expand Down
Expand Up @@ -13,10 +13,6 @@ public class AdoProvideRequiredReportingDescriptorProperties
/// </summary>
public override string Id => RuleId.ADOProvideRequiredReportingDescriptorProperties;

protected override IEnumerable<string> MessageResourceNames => new string[] {
nameof(RuleResources.ADO2012_ProvideRequiredResultProperties_Error_MissingName_Text)
};

public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.ADO2012_ProvideRequiredReportingDescriptorProperties_FullDescription_Text };

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>(new[] { RuleKind.Ado });
Expand All @@ -26,6 +22,7 @@ public class AdoProvideRequiredReportingDescriptorProperties
public AdoProvideRequiredReportingDescriptorProperties()
{
this.DefaultConfiguration.Level = FailureLevel.Error;
this.MessageResourceNames.Add(nameof(RuleResources.ADO2012_ProvideRequiredResultProperties_Error_MissingName_Text));
}

protected override void Analyze(ReportingDescriptor reportingDescriptor, string reportingDescriptorPointer)
Expand Down
Expand Up @@ -24,10 +24,13 @@ public class BaseReferenceFinalSchema : SarifValidationSkimmerBase
/// </summary>
public override MultiformatMessageString FullDescription => new MultiformatMessageString();

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1011_ReferenceFinalSchema_Error_Default_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

protected override void Analyze(SarifLog log, string logPointer)
{
AnalyzeSchema(log.SchemaUri, logPointer.AtProperty(SarifPropertyName.Schema));
Expand All @@ -54,7 +57,8 @@ private void AnalyzeSchema(Uri schemaUri, string schema)
// that refers to the final version of the schema.
LogResult(
schema,
nameof(RuleResources.Base1011_ReferenceFinalSchema_Error_Default_Text));
nameof(RuleResources.Base1011_ReferenceFinalSchema_Error_Default_Text),
schemaUri.OriginalString);
}
}
}
Expand Down
Expand Up @@ -14,7 +14,7 @@ public class BaseProvideRequiredSarifLogProperties

public override MultiformatMessageString FullDescription => new MultiformatMessageString();

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.Base1013_MaximumRunsCount_Note_Default_Text),
nameof(RuleResources.Base1013_ProvideSchemaVersion_Warning_Default_Text),
nameof(RuleResources.Base1013_ProvideSchema_Warning_Default_Text),
Expand Down
Expand Up @@ -10,11 +10,14 @@ public class BaseProvideRequiredRunProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1014_ProvideRequiredRunProperties_Error_MissingResultsArray_Text),
nameof(RuleResources.Base1014_ProvideRequiredRunProperties_Error_MissingTool_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand Down
Expand Up @@ -12,14 +12,18 @@ public class BaseProvideRequiredResultProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {

private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1015_ProvideRequiredResultProperties_Error_EmptyLocationsArray_Text),
nameof(RuleResources.Base1015_ProvideRequiredResultProperties_Error_MissingLocationsArray_Text),
nameof(RuleResources.Base1015_ProvideRequiredResultProperties_Error_MissingMessageText_Text),
nameof(RuleResources.Base1015_ProvideRequiredResultProperties_Error_MissingMessage_Text),
nameof(RuleResources.Base1015_ProvideRequiredResultProperties_Error_MissingPartialFingerprints_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand Down
Expand Up @@ -10,10 +10,13 @@ public class BaseProvideRequiredLocationProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1016_ProvideRequiredLocationProperties_Error_MissingPhysicalLocation_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand Down
Expand Up @@ -14,14 +14,17 @@ public class BaseProvideRequiredPhysicalLocationProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1017_ProvideRequiredPhysicalLocationProperties_Error_MissingArtifactLocation_Text),
nameof(RuleResources.Base1017_ProvideRequiredPhysicalLocationProperties_Error_MissingRegion_Text),
nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_EndColumnMustNotPrecedeStartColumn_Text),
nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_EndLineMustNotPrecedeStartLine_Text),
nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_RegionStartPropertyMustBePresent_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand Down
Expand Up @@ -12,12 +12,15 @@ public class BaseProvideRequiredToolProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverName_Text),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverRules_Text),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriver_Text),
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand All @@ -33,22 +36,25 @@ protected override void Analyze(Tool tool, string toolPointer)
toolPointer,
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriver_Text));
}
else if (string.IsNullOrWhiteSpace(tool.Driver.Name))
else
{
// {0}: The 'driver' object in this tool does not provide a 'name' value. This property is required by the {1} service.
LogResult(
toolPointer
.AtProperty(SarifPropertyName.Driver),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverName_Text));
}

if (tool.Driver.Rules == null)
{
// {0}: The 'driver' object in this tool does not provide a 'rules' array. This property is required by the {1} service.
LogResult(
toolPointer
.AtProperty(SarifPropertyName.Driver),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverRules_Text));
if (string.IsNullOrWhiteSpace(tool.Driver.Name))
{
// {0}: The 'driver' object in this tool does not provide a 'name' value. This property is required by the {1} service.
LogResult(
toolPointer
.AtProperty(SarifPropertyName.Driver),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverName_Text));
}

if (tool.Driver.Rules == null)
{
// {0}: The 'driver' object in this tool does not provide a 'rules' array. This property is required by the {1} service.
LogResult(
toolPointer
.AtProperty(SarifPropertyName.Driver),
nameof(RuleResources.Base1018_ProvideRequiredToolProperties_Error_MissingDriverRules_Text));
}
}
}
}
Expand Down
Expand Up @@ -10,10 +10,13 @@ public class Base2012ProvideRequiredReportingDescriptorProperties
{
public override string Id => string.Empty;

protected override IEnumerable<string> MessageResourceNames => new string[] {
private readonly List<string> _messageResourceNames = new List<string>
{
nameof(RuleResources.Base2012_ProvideRequiredReportingDescriptorProperties_Error_MissingIdProperty_Text)
};

protected override ICollection<string> MessageResourceNames => _messageResourceNames;

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>();

public override MultiformatMessageString FullDescription => new MultiformatMessageString();
Expand Down
Expand Up @@ -29,7 +29,7 @@ public ProvideRequiredLocationProperties()
/// </summary>
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1001_ProvideRequiredLocationProperties_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1001_ProvideRequiredLocationProperties_Error_NoLocationsArray_Text),
nameof(RuleResources.GH1001_ProvideRequiredLocationProperties_Error_EmptyLocationsArray_Text),
nameof(RuleResources.GH1001_ProvideRequiredLocationProperties_Error_MissingLocationProperty_Text)
Expand Down
Expand Up @@ -29,7 +29,7 @@ public InlineThreadFlowLocations()
/// </summary>
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1002_InlineThreadFlowLocations_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1002_InlineThreadFlowLocations_Error_Default_Text)
};

Expand Down
Expand Up @@ -29,7 +29,7 @@ public ProvideRequiredRegionProperties()
// although all of those have reasonable defaults.
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1003_ProvideRequiredRegionProperties_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1003_ProvideRequiredRegionProperties_Error_MissingRegion_Text),
nameof(RuleResources.GH1003_ProvideRequiredRegionProperties_Error_MissingRegionProperty_Text)
};
Expand Down
Expand Up @@ -32,7 +32,7 @@ public ReviewArraysThatExceedConfigurableDefaults()
// file at the root of your repository to specify higher limits.
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1004_ReviewArraysThatExceedConfigurableDefaults_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1004_ReviewArraysThatExceedConfigurableDefaults_Error_Default_Text)
};

Expand Down
Expand Up @@ -27,7 +27,7 @@ public LocationsMustBeRelativeUrisOrFilePaths()
// by file paths, either as relative URIs or as absolute URIs that use the 'file' scheme.
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1005_LocationsMustBeRelativeUrisOrFilePaths_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1005_LocationsMustBeRelativeUrisOrFilePaths_Error_Default_Text)
};

Expand Down
Expand Up @@ -40,7 +40,7 @@ public ProvideCheckoutPath()
// requires the analysis tool always to be invoked from that same directory.
public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1006_ProvideCheckoutPath_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1006_ProvideCheckoutPath_Error_Default_Text)
};

Expand Down
Expand Up @@ -24,7 +24,7 @@ public class ProvideFullyFormattedMessageStrings : SarifValidationSkimmerBase

public override MultiformatMessageString FullDescription => new MultiformatMessageString { Text = RuleResources.GH1007_ProvideFullyFormattedMessageStrings_FullDescription_Text };

protected override IEnumerable<string> MessageResourceNames => new string[] {
protected override ICollection<string> MessageResourceNames => new List<string> {
nameof(RuleResources.GH1007_ProvideFullyFormattedMessageStrings_Error_Default_Text)
};

Expand Down
Expand Up @@ -15,10 +15,6 @@ public class GhasProvideRequiredPhysicalLocationProperties
/// </summary>
public override string Id => RuleId.GHASProvideRequiredPhysicalLocationProperties;

protected override IEnumerable<string> MessageResourceNames => new string[] {
nameof(RuleResources.GH1017_ProvideRequiredPhysicalLocationProperties_Error_MissingArtifactLocationUri_Text)
};

public override MultiformatMessageString FullDescription => new MultiformatMessageString() { Text = RuleResources.GH1017_ProvideRequiredPhysicalLocationProperties_FullDescription_Text };

public override HashSet<RuleKind> RuleKinds => new HashSet<RuleKind>(new[] { RuleKind.Ghas });
Expand All @@ -28,6 +24,7 @@ public class GhasProvideRequiredPhysicalLocationProperties
public GhasProvideRequiredPhysicalLocationProperties()
{
this.DefaultConfiguration.Level = FailureLevel.Error;
this.MessageResourceNames.Add(nameof(RuleResources.GH1017_ProvideRequiredPhysicalLocationProperties_Error_MissingArtifactLocationUri_Text));
}

protected override void Analyze(PhysicalLocation physicalLocation, string physicalLocationPointer)
Expand Down

0 comments on commit 5b7d014

Please sign in to comment.