Skip to content

Commit 7dc304b

Browse files
committed
output the footer
1 parent e70d615 commit 7dc304b

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

src/Smdn.Reflection.ReverseGenerating.ListApi.Core/Smdn.Reflection.ReverseGenerating.ListApi/ApiListWriter.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,25 @@ private void WriteEmbeddedResources()
110110
}
111111
}
112112

113+
public void WriteFooter()
114+
{
115+
if (!options.Writer.WriteFooter)
116+
return;
117+
118+
var callingAssemblyName = Assembly.GetCallingAssembly().GetName();
119+
120+
BaseWriter.WriteLine($"// API list generated by {callingAssemblyName?.Name} v{callingAssemblyName?.Version}.");
121+
122+
var executingAssembly = Assembly.GetExecutingAssembly();
123+
var executingAssemblyName = executingAssembly?.GetName();
124+
var repositoryUrl = executingAssembly
125+
?.GetCustomAttributes<AssemblyMetadataAttribute>()
126+
?.First(static a => a.Key.StartsWith("RepositoryUrl", StringComparison.Ordinal))
127+
?.Value;
128+
129+
BaseWriter.WriteLine($"// {executingAssemblyName?.Name} v{executingAssemblyName?.Version} ({repositoryUrl})");
130+
}
131+
113132
public void WriteExportedTypes()
114133
{
115134
var types = assembly.GetExportedTypes()

src/Smdn.Reflection.ReverseGenerating.ListApi.Core/Smdn.Reflection.ReverseGenerating.ListApi/ApiListWriterOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public class WriterOptions {
1010
public bool WriteNullableAnnotationDirective { get; set; } = true;
1111
public bool WriteEmbeddedResources { get; set; } = true;
1212
public bool WriteReferencedAssemblies { get; set; } = true;
13+
public bool WriteFooter { get; set; } = true;
1314
}
1415
}

src/Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks/Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks/GenerateApiList.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ private static void WriteApiListFile(
186186

187187
writer.WriteAssemblyInfoHeader();
188188
writer.WriteExportedTypes();
189+
writer.WriteFooter();
189190

190191
return arg.outputApiListFilePath;
191192
}

src/Smdn.Reflection.ReverseGenerating.ListApi/Smdn.Reflection.ReverseGenerating.ListApi/RootCommandImplementation.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ private void CommandMain(ParseResult parseResult, IConsole console)
216216

217217
writer.WriteAssemblyInfoHeader();
218218
writer.WriteExportedTypes();
219+
writer.WriteFooter();
219220

220221
arg.logger?.LogDebug("generated API list {OutputFilePath}", outputFilePath);
221222
arg.logger?.LogInformation("{AssemblyFilePath} -> {OutputFilePath}", assm.Location, outputFilePath);

tests/Smdn.Reflection.ReverseGenerating.ListApi.Core/Smdn.Reflection.ReverseGenerating.ListApi/ApiListWriter.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ private string WriteApiListFromSourceCode(
145145

146146
writer.WriteAssemblyInfoHeader();
147147
writer.WriteExportedTypes();
148+
writer.WriteFooter();
148149

149150
return sb.ToString();
150151
},
@@ -429,6 +430,7 @@ string expectedOutput
429430
options.Writer.WriteNullableAnnotationDirective = false;
430431
options.Writer.WriteEmbeddedResources = false;
431432
options.Writer.WriteReferencedAssemblies = false;
433+
options.Writer.WriteFooter = false;
432434

433435
Assert.AreEqual(
434436
expectedOutput.Replace("\r\n", "\n").Replace("\r", "\n").TrimEnd(),
@@ -711,4 +713,30 @@ ApiListWriterOptions options
711713
return ret ?? string.Empty;
712714
}
713715
}
716+
717+
[Test]
718+
public void WriteFooter(
719+
[Values(true, false)] bool writeFooter
720+
)
721+
{
722+
var options = new ApiListWriterOptions();
723+
724+
options.Writer.WriteNullableAnnotationDirective = false;
725+
options.Writer.WriteEmbeddedResources = false;
726+
options.Writer.WriteReferencedAssemblies = false;
727+
options.Writer.WriteFooter = writeFooter;
728+
729+
var output = WriteApiListFromSourceCode("//", options).TrimEnd();
730+
var executingAssemblyName = Assembly.GetExecutingAssembly().GetName()!;
731+
var libraryAssemblyName = typeof(ApiListWriter).Assembly.GetName()!;
732+
733+
if (writeFooter) {
734+
StringAssert.Contains($"// API list generated by {executingAssemblyName.Name} v{executingAssemblyName.Version}", output);
735+
StringAssert.Contains($"// {libraryAssemblyName.Name} v{libraryAssemblyName.Version}", output);
736+
}
737+
else {
738+
StringAssert.DoesNotContain("// API list generated by", output);
739+
StringAssert.DoesNotContain($"// {libraryAssemblyName.Name} v{libraryAssemblyName.Version}", output);
740+
}
741+
}
714742
}

0 commit comments

Comments
 (0)