in src/Core/Compiling/Policy/TraceCompiler.cs [18:59]
public void Handle(ICompilationContext context, InvocationExpressionSyntax node)
{
if (!node.TryExtractingConfigParameter<TraceConfig>(context, "trace",
out IReadOnlyDictionary<string, InitializerValue>? values))
{
return;
}
XElement element = new("trace");
if (!element.AddAttribute(values, nameof(TraceConfig.Source), "source"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
node.GetLocation(),
"trace",
nameof(TraceConfig.Source)
));
return;
}
if (!values.TryGetValue(nameof(TraceConfig.Message), out InitializerValue? message) || message.Value is null)
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
node.GetLocation(),
"trace",
nameof(TraceConfig.Message)
));
return;
}
element.Add(new XElement("message", message.Value));
element.AddAttribute(values, nameof(TraceConfig.Severity), "severity");
if (values.TryGetValue(nameof(TraceConfig.Metadata), out InitializerValue? metadata))
{
element.Add(HandleMetadata(context, metadata).ToArray());
}
context.AddPolicy(element);
}