Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,11 @@ private static string GenerateSwitchMethodSource(

private static void AppendNamespaceAndTypeHeader(StringBuilder builder, INamedTypeSymbol containingType, IMethodSymbol partialMethod)
{
builder.AppendLine("// <auto-generated/>");
builder.AppendLine($"// Generated by {typeof(GeneratesMethodGenerator).FullName} for method '{partialMethod.Name}'.");
builder.AppendLine("#pragma warning disable");
builder.AppendLine();

string? namespaceName = containingType.ContainingNamespace?.IsGlobalNamespace == false
? containingType.ContainingNamespace.ToDisplayString()
: null;
Expand Down
10 changes: 10 additions & 0 deletions EasySourceGenerators.Tests/BoolSwitchKeyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ public static partial string GetBoolLabel(bool flag)

Assert.That(generatedCode, Is.EqualTo(expectedCode));
}

[Test]
public void BoolSwitchKey_GeneratedCode_HasAutoGeneratedHeaderAndWarningSuppression()
{
string generatedCode = GeneratedCodeTestHelper.ReadGeneratedCodeRaw("TestBoolSwitchClass_GetBoolLabel.g.cs");

Assert.That(generatedCode, Does.StartWith("// <auto-generated/>"));
Assert.That(generatedCode, Does.Contain("Generated by EasySourceGenerators.Generators.GeneratesMethodGenerator for method 'GetBoolLabel'"));
Assert.That(generatedCode, Does.Contain("#pragma warning disable"));
}
}

public static partial class TestBoolSwitchClass
Expand Down
29 changes: 29 additions & 0 deletions EasySourceGenerators.Tests/GeneratedCodeTestHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,40 @@ internal static class GeneratedCodeTestHelper
private const char UnicodeBom = '\uFEFF';

internal static string ReadGeneratedCode(string generatedFileName)
{
string rawCode = ReadGeneratedCodeRaw(generatedFileName);
return StripGeneratedPreamble(rawCode);
}

internal static string ReadGeneratedCodeRaw(string generatedFileName)
{
string generatedCodePath = GetGeneratedCodePath(generatedFileName);
return File.ReadAllText(generatedCodePath).TrimStart(UnicodeBom).ReplaceLineEndings("\n").TrimEnd();
}

private static string StripGeneratedPreamble(string generatedCode)
{
string[] lines = generatedCode.Split('\n');
int index = 0;

while (index < lines.Length)
{
string currentLine = lines[index];
bool isGeneratedPreambleLine = currentLine.StartsWith("//", StringComparison.Ordinal)
|| currentLine.StartsWith("#pragma warning disable", StringComparison.Ordinal)
|| string.IsNullOrWhiteSpace(currentLine);

if (!isGeneratedPreambleLine)
{
break;
}

index++;
}

return string.Join('\n', lines[index..]).TrimEnd();
Comment thread
dex3r marked this conversation as resolved.
}

private static string GetGeneratedCodePath(string generatedFileName)
{
string projectDirectory = FindProjectDirectory();
Expand Down