Skip to content

Commit

Permalink
fix: required value analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
ronimizy committed Apr 27, 2024
1 parent 2b65100 commit 5883b3d
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 4 deletions.
4 changes: 2 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
<PackageVersion Include="SourceKit.Analyzers.MustBePartial.Annotations" Version="1.1.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Analyzers.Properties" Version="1.0.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Analyzers.MemberAccessibility" Version="1.0.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Generators.Builder" Version="1.1.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Generators.Builder.Annonataions" Version="1.1.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Generators.Builder" Version="1.2.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Generators.Builder.Annonataions" Version="1.2.$(PatchVersion)"/>
<PackageVersion Include="SourceKit.Generators.Grpc" Version="1.0.$(PatchVersion)"/>
<PackageVersion Include="xunit" Version="2.4.2"/>
<PackageVersion Include="Xunit.DependencyInjection.Demystifier" Version="8.0.1"/>
Expand Down
60 changes: 60 additions & 0 deletions SourceKit.Sample/Generators/ValidArrayQueryUsage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SourceKit.Generators.Builder.Annotations;

namespace SourceKit.Sample.Generators;

file class ArrayQueryUsage
{
public void A()
{
var query = ArrayQuery1.Build(x => x.WithValue("aboba"));
}
}

[GenerateBuilder]
file record ArrayQuery1(Guid[] Ids, [RequiredValue] string Value, string NotRequiredValue = "aboba")
{
public static ArrayQuery1 Build(Func<Builder, Builder> action)
{
return action(new Builder()).Build();
}

public sealed class Builder
{
private readonly List<System.Guid> _ids;
private string _value;

public Builder()
{
_ids = new List<System.Guid>();
}

[InitializesProperty(nameof(Ids))]
public Builder WithId(Guid element)
{
_ids.Add(element);
return this;
}

[InitializesPropertyAttribute(nameof(Ids))]
public Builder WithIds(IEnumerable<System.Guid> elements)
{
_ids.AddRange(elements);
return this;
}

[InitializesPropertyAttribute(nameof(Value))]
public Builder WithValue(string value)
{
_value = value;
return this;
}

public ArrayQuery1 Build()
{
return new ArrayQuery1(_ids.Distinct().ToArray(), string.Empty, string.Empty);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private void AnalyzeOperation(OperationAnalysisContext context)
.Where(x => x.GetAttributes().HasAttribute(requiredValueAttribute))
.Select(x => x.Name);

IEnumerable<IInvocationOperation> descendantInvocations = modelTypeMembers
IEnumerable<IInvocationOperation> descendantInvocations = operation.Descendants()
.OfType<IInvocationOperation>();

IEnumerable<string> initializedPropertyNames = GetInitializedPropertyNames(descendantInvocations);
Expand Down
23 changes: 22 additions & 1 deletion tests/SourceKit.Tests/Generators/RequiredValueAnalyzerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace SourceKit.Tests.Generators;
public class RequiredValueAnalyzerTests
{
[Fact]
public async Task A()
public async Task RequiredValue_ShouldProduceError_WhenRequiredValueNotDefined()
{
var usageFile = await SourceFile.LoadAsync("SourceKit.Sample/Generators/ArrayQueryUsage.cs");

Expand All @@ -37,4 +37,25 @@ public async Task A()

await test.RunAsync();
}

[Fact]
public async Task RequiredValue_ShouldProduceNoError_WhenRequiredValueDefined()
{
var usageFile = await SourceFile.LoadAsync("SourceKit.Sample/Generators/ValidArrayQueryUsage.cs");

var test = new CSharpAnalyzerTest<RequiredValueAnalyzer, XUnitVerifier>
{
TestState =
{
Sources = { usageFile },
AdditionalReferences =
{
typeof(GenerateBuilderAttribute).Assembly,
},
ReferenceAssemblies = ReferenceAssemblies.Net.Net60,
},
};

await test.RunAsync();
}
}

0 comments on commit 5883b3d

Please sign in to comment.