Skip to content

Commit ed3a6bc

Browse files
committed
Answer to comments
1 parent 1ad7767 commit ed3a6bc

File tree

6 files changed

+159
-146
lines changed

6 files changed

+159
-146
lines changed

tracer/src/Datadog.Trace.SourceGenerators/Configuration/ConfigurationKeysGenerator.cs

Lines changed: 71 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -31,82 +31,77 @@ public class ConfigurationKeysGenerator : IIncrementalGenerator
3131
/// <inheritdoc />
3232
public void Initialize(IncrementalGeneratorInitializationContext context)
3333
{
34-
// Get the supported-configurations.json file
35-
var jsonFile = context.AdditionalTextsProvider
36-
.Where(static file => Path.GetFileName(file.Path).Equals(SupportedConfigurationsFileName, StringComparison.OrdinalIgnoreCase))
37-
.WithTrackingName(TrackingNames.ConfigurationKeysGenAdditionalText);
38-
39-
// Get the supported-configurations-docs.yaml file (optional)
40-
var yamlFile = context.AdditionalTextsProvider
41-
.Where(static file => Path.GetFileName(file.Path).Equals(SupportedConfigurationsDocsFileName, StringComparison.OrdinalIgnoreCase))
42-
.WithTrackingName(TrackingNames.ConfigurationKeysGenYamlAdditionalText);
43-
44-
// Get the configuration_keys_mapping.json file (optional)
45-
var mappingFile = context.AdditionalTextsProvider
46-
.Where(static file => Path.GetFileName(file.Path).Equals(ConfigurationKeysMappingFileName, StringComparison.OrdinalIgnoreCase))
47-
.WithTrackingName(TrackingNames.ConfigurationKeysGenMappingAdditionalText);
48-
49-
// Combine all files
50-
var combinedFiles = jsonFile.Collect().Combine(yamlFile.Collect()).Combine(mappingFile.Collect());
51-
52-
var configContent = combinedFiles.Select(static (files, ct) =>
34+
// Get all configuration files
35+
var configFiles = context.AdditionalTextsProvider
36+
.Where(static file =>
37+
{
38+
var fileName = Path.GetFileName(file.Path);
39+
return fileName.Equals(SupportedConfigurationsFileName, StringComparison.OrdinalIgnoreCase) ||
40+
fileName.Equals(SupportedConfigurationsDocsFileName, StringComparison.OrdinalIgnoreCase) ||
41+
fileName.Equals(ConfigurationKeysMappingFileName, StringComparison.OrdinalIgnoreCase);
42+
})
43+
.WithTrackingName(TrackingNames.ConfigurationKeysGenAdditionalText);
44+
var parsedConfig = configFiles.Collect().Select(static (allFiles, ct) =>
45+
{
46+
// Find each file type
47+
AdditionalText? jsonFile = null;
48+
AdditionalText? yamlFile = null;
49+
AdditionalText? mappingFile = null;
50+
51+
foreach (var file in allFiles)
5352
{
54-
var ((jsonFiles, yamlFiles), mappingFiles) = files;
55-
56-
if (jsonFiles.Length == 0)
53+
var fileName = Path.GetFileName(file.Path);
54+
if (fileName.Equals(SupportedConfigurationsFileName, StringComparison.OrdinalIgnoreCase))
5755
{
58-
return new Result<(string Json, string? Yaml, string? Mapping)>(
59-
(string.Empty, null, null),
60-
new EquatableArray<DiagnosticInfo>(
61-
[
62-
CreateDiagnosticInfo("DDSG0005", "Configuration file not found", $"The file '{SupportedConfigurationsFileName}' was not found. Make sure the supported-configurations.json file exists and is included as an AdditionalFile.", DiagnosticSeverity.Error)
63-
]));
56+
jsonFile = file;
6457
}
65-
66-
var jsonResult = ExtractConfigurationContent(jsonFiles[0], ct);
67-
if (jsonResult.Errors.Count > 0)
58+
else if (fileName.Equals(SupportedConfigurationsDocsFileName, StringComparison.OrdinalIgnoreCase))
6859
{
69-
return new Result<(string Json, string? Yaml, string? Mapping)>((string.Empty, null, null), jsonResult.Errors);
70-
}
71-
72-
string? yamlContent = null;
73-
if (yamlFiles.Length > 0)
74-
{
75-
var yamlResult = ExtractConfigurationContent(yamlFiles[0], ct);
76-
if (yamlResult.Errors.Count == 0)
77-
{
78-
yamlContent = yamlResult.Value;
79-
}
80-
81-
// YAML is optional, so we don't fail if it has errors
60+
yamlFile = file;
8261
}
83-
84-
string? mappingContent = null;
85-
if (mappingFiles.Length > 0)
62+
else if (fileName.Equals(ConfigurationKeysMappingFileName, StringComparison.OrdinalIgnoreCase))
8663
{
87-
var mappingResult = ExtractConfigurationContent(mappingFiles[0], ct);
88-
if (mappingResult.Errors.Count == 0)
89-
{
90-
mappingContent = mappingResult.Value;
91-
}
92-
93-
// Mapping is optional, so we don't fail if it has errors
64+
mappingFile = file;
9465
}
66+
}
9567

96-
return new Result<(string Json, string? Yaml, string? Mapping)>((jsonResult.Value, yamlContent, mappingContent), new EquatableArray<DiagnosticInfo>());
97-
})
98-
.WithTrackingName(TrackingNames.ConfigurationKeysGenContentExtracted);
68+
// JSON file is required
69+
if (jsonFile is null)
70+
{
71+
return new Result<ConfigurationData>(
72+
null!,
73+
new EquatableArray<DiagnosticInfo>(
74+
[
75+
CreateDiagnosticInfo("DDSG0005", "Configuration file not found", $"The file '{SupportedConfigurationsFileName}' was not found. Make sure the supported-configurations.json file exists and is included as an AdditionalFile.", DiagnosticSeverity.Error)
76+
]));
77+
}
78+
79+
// Read JSON file (required)
80+
var jsonText = jsonFile.GetText(ct);
81+
if (jsonText is null)
82+
{
83+
return new Result<ConfigurationData>(
84+
null!,
85+
new EquatableArray<DiagnosticInfo>([CreateDiagnosticInfo("DDSG0006", "Configuration file read error", $"Unable to read the content of '{SupportedConfigurationsFileName}'.", DiagnosticSeverity.Error)]));
86+
}
87+
88+
// Read optional YAML file
89+
string? yamlContent = null;
90+
if (yamlFile is not null)
91+
{
92+
yamlContent = yamlFile.GetText(ct)?.ToString();
93+
}
9994

100-
var parsedConfig = configContent.Select(static (extractResult, ct) =>
101-
{
102-
if (extractResult.Errors.Count > 0)
103-
{
104-
return new Result<ConfigurationData>(null!, extractResult.Errors);
105-
}
95+
// Read optional mapping file
96+
string? mappingContent = null;
97+
if (mappingFile is not null)
98+
{
99+
mappingContent = mappingFile.GetText(ct)?.ToString();
100+
}
106101

107-
return ParseConfigurationContent(extractResult.Value.Json, extractResult.Value.Yaml, extractResult.Value.Mapping, ct);
108-
})
109-
.WithTrackingName(TrackingNames.ConfigurationKeysGenParseConfiguration);
102+
return ParseConfigurationContent(jsonText.ToString(), yamlContent, mappingContent, ct);
103+
})
104+
.WithTrackingName(TrackingNames.ConfigurationKeysGenParseConfiguration);
110105

111106
context.RegisterSourceOutput(
112107
parsedConfig,
@@ -141,34 +136,6 @@ private static void Execute(SourceProductionContext context, Result<Configuratio
141136
}
142137
}
143138

144-
private static Result<string> ExtractConfigurationContent(AdditionalText file, CancellationToken cancellationToken)
145-
{
146-
try
147-
{
148-
var sourceText = file.GetText(cancellationToken);
149-
if (sourceText is null)
150-
{
151-
return new Result<string>(
152-
string.Empty,
153-
new EquatableArray<DiagnosticInfo>(
154-
[
155-
CreateDiagnosticInfo("DDSG0006", "Configuration file read error", $"Unable to read the content of '{SupportedConfigurationsFileName}'.", DiagnosticSeverity.Error)
156-
]));
157-
}
158-
159-
return new Result<string>(sourceText.ToString(), new EquatableArray<DiagnosticInfo>());
160-
}
161-
catch (Exception ex)
162-
{
163-
return new Result<string>(
164-
string.Empty,
165-
new EquatableArray<DiagnosticInfo>(
166-
[
167-
CreateDiagnosticInfo("DDSG0006", "Configuration file read error", $"Error reading '{SupportedConfigurationsFileName}': {ex.Message}", DiagnosticSeverity.Error)
168-
]));
169-
}
170-
}
171-
172139
private static Result<ConfigurationData> ParseConfigurationContent(string jsonContent, string? yamlContent, string? mappingContent, CancellationToken cancellationToken)
173140
{
174141
try
@@ -183,7 +150,7 @@ private static Result<ConfigurationData> ParseConfigurationContent(string jsonCo
183150
null!,
184151
new EquatableArray<DiagnosticInfo>(
185152
[
186-
CreateDiagnosticInfo("DDSG0007", "JSON parse error", "Failed to find 'supportedConfigurations' section in supported-configurations.json.", DiagnosticSeverity.Error)
153+
CreateDiagnosticInfo("DDSG0007", "JSON parse error", $"Failed to find 'supportedConfigurations' section in {SupportedConfigurationsFileName}.", DiagnosticSeverity.Error)
187154
]));
188155
}
189156

@@ -323,7 +290,7 @@ private static string GenerateProductPartialClass(string product, List<KeyValueP
323290
var sb = new StringBuilder();
324291

325292
AppendFileHeader(sb);
326-
sb.AppendLine($"namespace {Namespace};");
293+
sb.Append("namespace ").Append(Namespace).AppendLine(";");
327294
sb.AppendLine();
328295

329296
if (string.IsNullOrEmpty(product))
@@ -509,27 +476,15 @@ private static string KeyToConstName(string key, string[]? productNames = null,
509476
}
510477

511478
private static string[] ProductNameEquivalents(string? productName)
512-
{
513-
if (string.IsNullOrEmpty(productName))
479+
=> productName switch
514480
{
515-
return new[] { string.Empty };
516-
}
517-
518-
// we need to keep comparison case-sensitive as there are keys like TraceRemoveIntegrationServiceNamesEnabled and we don't want to strip Tracer
519-
switch (productName)
520-
{
521-
case "AppSec":
522-
return new[] { "Appsec" };
523-
case "Tracer":
524-
return new[] { "Trace" };
525-
case "CiVisibility":
526-
return new[] { "Civisibility" };
527-
case "OpenTelemetry":
528-
return new[] { "Otel" };
529-
default:
530-
return new[] { productName! };
531-
}
532-
}
481+
null or "" => [string.Empty],
482+
"AppSec" => ["Appsec"],
483+
"Tracer" => ["Trace"],
484+
"CiVisibility" => ["Civisibility"],
485+
"OpenTelemetry" => ["Otel"],
486+
_ => [productName]
487+
};
533488

534489
private static DiagnosticInfo CreateDiagnosticInfo(string id, string title, string message, DiagnosticSeverity severity)
535490
{

tracer/src/Datadog.Trace.SourceGenerators/Datadog.Trace.SourceGenerators.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<ItemGroup>
1313
<PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
1414
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
15-
<PackageReference Include="System.Text.Json" Version="8.0.5" PrivateAssets="all" />
15+
<PackageReference Include="System.Text.Json" Version="10.0.0-rc.2.25502.107" PrivateAssets="all" />
1616
</ItemGroup>
1717
<ItemGroup>
1818
<Compile Include="..\Datadog.Trace\ClrProfiler\InstrumentationCategory.cs" Link="InstrumentationDefinitions\InstrumentationCategory.cs" />

tracer/src/Datadog.Trace.SourceGenerators/Helpers/TrackingNames.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,5 @@ internal class TrackingNames
4040

4141
// Configuration key generator
4242
public const string ConfigurationKeysGenParseConfiguration = nameof(ConfigurationKeysGenParseConfiguration);
43-
public const string ConfigurationKeysGenContentExtracted = nameof(ConfigurationKeysGenContentExtracted);
44-
public const string ConfigurationKeysGenMatcherValidData = nameof(ConfigurationKeysGenMatcherValidData);
4543
public const string ConfigurationKeysGenAdditionalText = nameof(ConfigurationKeysGenAdditionalText);
46-
public const string ConfigurationKeysGenYamlAdditionalText = nameof(ConfigurationKeysGenYamlAdditionalText);
47-
public const string ConfigurationKeysGenMappingAdditionalText = nameof(ConfigurationKeysGenMappingAdditionalText);
4844
}

0 commit comments

Comments
 (0)