-
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathLoggerInterceptorsEmitter.cs
More file actions
62 lines (47 loc) · 2.16 KB
/
LoggerInterceptorsEmitter.cs
File metadata and controls
62 lines (47 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System.CodeDom.Compiler;
using AutoLoggerMessageGenerator.Models;
namespace AutoLoggerMessageGenerator.Emitters;
internal static class LoggerInterceptorsEmitter
{
public static string Emit(IEnumerable<LogMessageCall> logCalls)
{
using var sb = new IndentedTextWriter(new StringWriter());
sb.WriteLine(Constants.GeneratedFileHeader);
sb.WriteLine();
sb.WriteLine($"namespace {Constants.GeneratorNamespace}");
sb.WriteLine('{');
sb.Indent++;
#if EMBEDDED
sb.WriteLine(Constants.EmbeddedAttribute);
#endif
sb.WriteLine(Constants.GeneratedCodeAttribute);
sb.WriteLine(Constants.EditorNotBrowsableAttribute);
sb.WriteLine(Constants.ExcludeFromCoverageAttribute);
sb.WriteLine(Constants.DebuggerStepThroughAttribute);
sb.WriteLine("internal static class LoggerInterceptors");
sb.WriteLine('{');
sb.Indent++;
foreach (var logCall in logCalls)
{
sb.WriteLine(logCall.Location.InterceptableLocationSyntax);
var parameters = string.Join(", ", logCall.Parameters.Select((c, i) => $"{c.NativeType} {c.Name}"));
parameters = string.IsNullOrEmpty(parameters) ? string.Empty : $", {parameters}";
var parameterValues = string.Join(", ", logCall.Parameters
.Where(c => !Constants.LoggerMessageAttributeParameterTypes.Contains(c.Type))
.Select((c, i) => c.Name));
parameterValues = string.IsNullOrEmpty(parameterValues) ? string.Empty : $", {parameterValues}";
sb.WriteLine($"public static void {logCall.GeneratedMethodName}(this ILogger {Constants.LoggerParameterName}{parameters})");
sb.WriteLine('{');
sb.Indent++;
sb.WriteLine($"{Constants.GeneratorNamespace}.{Constants.LoggerClassName}.{logCall.GeneratedMethodName}({Constants.LoggerParameterName}{parameterValues});");
sb.Indent--;
sb.WriteLine('}');
sb.WriteLine();
}
sb.Indent--;
sb.WriteLine('}');
sb.Indent--;
sb.WriteLine('}');
return sb.InnerWriter.ToString()!;
}
}