Skip to content

Commit 6302953

Browse files
committed
init
1 parent fcb3259 commit 6302953

39 files changed

+1129
-1
lines changed

.config/dotnet-tools.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{
22
"version": 1,
33
"isRoot": true,
4-
"tools": {}
4+
"tools": {
5+
"dotnet-t4": {
6+
"version": "2.3.1",
7+
"commands": [
8+
"t4"
9+
]
10+
}
11+
}
512
}

.github/workflows/dotnet.yml

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# This workflow will build a .NET project
2+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
3+
4+
name: .NET
5+
6+
on:
7+
push:
8+
pull_request:
9+
workflow_dispatch:
10+
inputs:
11+
publish_github:
12+
type: boolean
13+
description: Publish to GitHub Packages
14+
default: false
15+
publish_nuget:
16+
type: boolean
17+
description: Publish to nuget.org
18+
default: false
19+
20+
env:
21+
USERPROFILE: .
22+
23+
jobs:
24+
build:
25+
26+
runs-on: ubuntu-latest
27+
28+
steps:
29+
- uses: actions/checkout@v3
30+
31+
- name: Setup .NET
32+
uses: actions/setup-dotnet@v3
33+
with:
34+
dotnet-version: 7.0.x
35+
36+
- name: Restore tools
37+
run: dotnet tool restore
38+
39+
- name: Restore dependencies
40+
run: dotnet restore VisitorPatternGenerator.sln
41+
42+
- name: Format
43+
run: dotnet format VisitorPatternGenerator.sln --no-restore --verify-no-changes
44+
45+
- name: Build
46+
run: dotnet build VisitorPatternGenerator.sln --no-restore -c Release
47+
48+
- name: Test
49+
run: dotnet test VisitorPatternGenerator.sln --no-build -c Release --verbosity normal
50+
51+
- name: Sample Restore dependencies
52+
run: dotnet restore Sample/Sample.sln
53+
54+
- name: Sample Format
55+
run: dotnet format Sample/Sample.sln --no-restore --verify-no-changes
56+
57+
- name: Sample Build
58+
run: dotnet build Sample/Sample.sln --no-restore -c Release
59+
60+
- name: Sample Test
61+
run: dotnet test Sample/Sample.sln --no-build -c Release --verbosity normal
62+
63+
- name: Upload artifacts
64+
uses: actions/upload-artifact@v3
65+
with:
66+
name: nupkg
67+
path: artifacts/*.nupkg
68+
69+
- name: NuGet add souce
70+
id: nuget_add_source
71+
if: ${{ github.event.inputs.publish_github }}
72+
run: dotnet nuget add source -u hikarin522 -p ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text -n "github" "https://nuget.pkg.github.com/hikarin522/index.json"
73+
74+
- name: Publish GitHub Packages
75+
if: ${{ steps.nuget_add_source.conclusion == 'success' }}
76+
run: dotnet nuget push "artifacts/*.nupkg" -k ${{ secrets.GITHUB_TOKEN }} -s "github" --skip-duplicate
77+
78+
- name: Publish NuGet
79+
if: ${{ github.event.inputs.publish_nuget }}
80+
run: dotnet nuget push "artifacts/*.nupkg" -k ${{ secrets.NUGET_OLG_API_KEY }} -s "nuget" --skip-duplicate

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
2+
# T4
3+
*Template.cs
4+
15
## Ignore Visual Studio temporary files, build results, and
26
## files generated by popular Visual Studio add-ons.
37
##

Directory.Build.props

+17
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,21 @@
88
<IsPackable>false</IsPackable>
99
</PropertyGroup>
1010

11+
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
12+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
13+
</PropertyGroup>
14+
15+
<PropertyGroup>
16+
<Version>0.0.1</Version>
17+
<Authors>hikarin522</Authors>
18+
<Copyright>(c) 2023 hikarin522.</Copyright>
19+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
20+
<PackageReadmeFile>README.md</PackageReadmeFile>
21+
<RepositoryType>git</RepositoryType>
22+
<RepositoryUrl>https://github.com/hikarin522/VisitorPatternGenerator</RepositoryUrl>
23+
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>
24+
<PackageTags>visitor;sourcegenerator</PackageTags>
25+
<Description>C# source generator to help implement the visitor design pattern.</Description>
26+
</PropertyGroup>
27+
1128
</Project>

Directory.Build.targets

+8
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,12 @@
44
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="" Visible="false" />
55
</ItemGroup>
66

7+
<Target Name="CopyPackage" AfterTargets="Pack" Condition="$(IsPackable)" >
8+
<Copy SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg" DestinationFolder="$(MSBuildThisFileDirectory)nupkg" />
9+
</Target>
10+
11+
<Target Name="CleanNugetPackageCache" AfterTargets="Clean" Condition="$(IsPackable)" >
12+
<Exec Command="dotnet nuget locals global-packages -c" UseUtf8Encoding="Always" />
13+
</Target>
14+
715
</Project>

README.md

+9
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
11
# VisitorPatternGenerator
2+
[![GitHub](https://img.shields.io/github/license/hikarin522/VisitorPatternGenerator)](https://github.com/hikarin522/VisitorPatternGenerator/tree/master/LICENSE)
3+
[![Nuget](https://img.shields.io/nuget/v/VisitorPatternGenerator)](https://www.nuget.org/packages/VisitorPatternGenerator/)
4+
[![Nuget](https://img.shields.io/nuget/dt/VisitorPatternGenerator)](https://www.nuget.org/packages/VisitorPatternGenerator/)
5+
6+
C# source generator to help implement the visitor design pattern.
7+
8+
## Usage
9+
10+
see <https://github.com/hikarin522/VisitorPatternGenerator/tree/master/Sample/>

Sample/Sample.sln

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample", "Sample\Sample.csproj", "{8B19DCDA-416A-42C1-A74E-00BADB42582F}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(SolutionProperties) = preSolution
14+
HideSolutionNode = FALSE
15+
EndGlobalSection
16+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
17+
{8B19DCDA-416A-42C1-A74E-00BADB42582F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18+
{8B19DCDA-416A-42C1-A74E-00BADB42582F}.Debug|Any CPU.Build.0 = Debug|Any CPU
19+
{8B19DCDA-416A-42C1-A74E-00BADB42582F}.Release|Any CPU.ActiveCfg = Release|Any CPU
20+
{8B19DCDA-416A-42C1-A74E-00BADB42582F}.Release|Any CPU.Build.0 = Release|Any CPU
21+
EndGlobalSection
22+
EndGlobal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleRequest
4+
{
5+
[MessagePack.Union(1, typeof(Sample.SampleRequest.Sample1Request))]
6+
[MessagePack.Union(2, typeof(Sample.SampleRequest.Sample2Request))]
7+
[MessagePack.Union(3, typeof(Sample.SampleRequest.Sample3Request))]
8+
partial interface ISampleRequest { }
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleRequest
4+
{
5+
partial interface ISampleRequest
6+
{
7+
System.Threading.Tasks.ValueTask<Sample.SampleResponse.ISampleResponse> AcceptAsync(Sample.SampleRequest.ISampleRequestVisitor visitor);
8+
}
9+
}
10+
11+
namespace Sample.SampleRequest
12+
{
13+
partial interface ISampleRequestVisitor
14+
{
15+
System.Threading.Tasks.ValueTask<Sample.SampleResponse.ISampleResponse> VisitAsync(Sample.SampleRequest.Sample3Request value);
16+
System.Threading.Tasks.ValueTask<Sample.SampleResponse.Sample1Response> VisitAsync(Sample.SampleRequest.Sample1Request value);
17+
System.Threading.Tasks.ValueTask<Sample.SampleResponse.Sample2Response> VisitAsync(Sample.SampleRequest.Sample2Request value);
18+
}
19+
}
20+
21+
namespace Sample.SampleRequest
22+
{
23+
partial class Sample3Request: Sample.SampleRequest.ISampleRequest, Sample.IVisitorResult<Sample.SampleResponse.ISampleResponse>
24+
{
25+
async System.Threading.Tasks.ValueTask<Sample.SampleResponse.ISampleResponse> Sample.SampleRequest.ISampleRequest.AcceptAsync(Sample.SampleRequest.ISampleRequestVisitor visitor) => await visitor.VisitAsync(this);
26+
}
27+
}
28+
29+
namespace Sample.SampleRequest
30+
{
31+
partial class Sample1Request: Sample.SampleRequest.ISampleRequest, Sample.IVisitorResult<Sample.SampleResponse.Sample1Response>
32+
{
33+
async System.Threading.Tasks.ValueTask<Sample.SampleResponse.ISampleResponse> Sample.SampleRequest.ISampleRequest.AcceptAsync(Sample.SampleRequest.ISampleRequestVisitor visitor) => (Sample.SampleResponse.ISampleResponse)await visitor.VisitAsync(this);
34+
}
35+
}
36+
37+
namespace Sample.SampleRequest
38+
{
39+
partial class Sample2Request: Sample.SampleRequest.ISampleRequest, Sample.IVisitorResult<Sample.SampleResponse.Sample2Response>
40+
{
41+
async System.Threading.Tasks.ValueTask<Sample.SampleResponse.ISampleResponse> Sample.SampleRequest.ISampleRequest.AcceptAsync(Sample.SampleRequest.ISampleRequestVisitor visitor) => (Sample.SampleResponse.ISampleResponse)await visitor.VisitAsync(this);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleRequest
4+
{
5+
partial interface ISampleRequest
6+
{
7+
System.Threading.Tasks.ValueTask<TResult> AcceptAsync<TArg1, TArg2, TArg3, TResult>(Sample.SampleRequest.ISampleRequestVisitor2<TArg1, TArg2, TArg3, TResult> visitor, TArg1 arg1, TArg2 arg2, TArg3 arg3);
8+
}
9+
}
10+
11+
namespace Sample.SampleRequest
12+
{
13+
partial interface ISampleRequestVisitor2<in TArg1, in TArg2, in TArg3, TResult>
14+
{
15+
System.Threading.Tasks.ValueTask<TResult> VisitAsync(Sample.SampleRequest.Sample3Request value, TArg1 arg1, TArg2 arg2, TArg3 arg3);
16+
System.Threading.Tasks.ValueTask<TResult> VisitAsync(Sample.SampleRequest.Sample1Request value, TArg1 arg1, TArg2 arg2, TArg3 arg3);
17+
System.Threading.Tasks.ValueTask<TResult> VisitAsync(Sample.SampleRequest.Sample2Request value, TArg1 arg1, TArg2 arg2, TArg3 arg3);
18+
}
19+
}
20+
21+
namespace Sample.SampleRequest
22+
{
23+
partial class Sample3Request: Sample.SampleRequest.ISampleRequest
24+
{
25+
async System.Threading.Tasks.ValueTask<TResult> Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2, TArg3, TResult>(Sample.SampleRequest.ISampleRequestVisitor2<TArg1, TArg2, TArg3, TResult> visitor, TArg1 arg1, TArg2 arg2, TArg3 arg3) => await visitor.VisitAsync(this, arg1, arg2, arg3);
26+
}
27+
}
28+
29+
namespace Sample.SampleRequest
30+
{
31+
partial class Sample1Request: Sample.SampleRequest.ISampleRequest
32+
{
33+
async System.Threading.Tasks.ValueTask<TResult> Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2, TArg3, TResult>(Sample.SampleRequest.ISampleRequestVisitor2<TArg1, TArg2, TArg3, TResult> visitor, TArg1 arg1, TArg2 arg2, TArg3 arg3) => await visitor.VisitAsync(this, arg1, arg2, arg3);
34+
}
35+
}
36+
37+
namespace Sample.SampleRequest
38+
{
39+
partial class Sample2Request: Sample.SampleRequest.ISampleRequest
40+
{
41+
async System.Threading.Tasks.ValueTask<TResult> Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2, TArg3, TResult>(Sample.SampleRequest.ISampleRequestVisitor2<TArg1, TArg2, TArg3, TResult> visitor, TArg1 arg1, TArg2 arg2, TArg3 arg3) => await visitor.VisitAsync(this, arg1, arg2, arg3);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleRequest
4+
{
5+
partial interface ISampleRequest
6+
{
7+
TResult Accept<T1, T2, TResult>(Sample.SampleRequest.ISampleRequestVisitor3<T1, T2, TResult> visitor, T1 t1, T2 t2) where T1 : class, new() where T2 : struct;
8+
}
9+
}
10+
11+
namespace Sample.SampleRequest
12+
{
13+
partial interface ISampleRequestVisitor3<in T1, in T2, out TResult>
14+
{
15+
TResult Visit(Sample.SampleRequest.Sample3Request value, T1 t1, T2 t2);
16+
TResult Visit(Sample.SampleRequest.Sample1Request value, T1 t1, T2 t2);
17+
TResult Visit(Sample.SampleRequest.Sample2Request value, T1 t1, T2 t2);
18+
}
19+
}
20+
21+
namespace Sample.SampleRequest
22+
{
23+
partial class Sample3Request: Sample.SampleRequest.ISampleRequest
24+
{
25+
TResult Sample.SampleRequest.ISampleRequest.Accept<T1, T2, TResult>(Sample.SampleRequest.ISampleRequestVisitor3<T1, T2, TResult> visitor, T1 t1, T2 t2) => visitor.Visit(this, t1, t2);
26+
}
27+
}
28+
29+
namespace Sample.SampleRequest
30+
{
31+
partial class Sample1Request: Sample.SampleRequest.ISampleRequest
32+
{
33+
TResult Sample.SampleRequest.ISampleRequest.Accept<T1, T2, TResult>(Sample.SampleRequest.ISampleRequestVisitor3<T1, T2, TResult> visitor, T1 t1, T2 t2) => visitor.Visit(this, t1, t2);
34+
}
35+
}
36+
37+
namespace Sample.SampleRequest
38+
{
39+
partial class Sample2Request: Sample.SampleRequest.ISampleRequest
40+
{
41+
TResult Sample.SampleRequest.ISampleRequest.Accept<T1, T2, TResult>(Sample.SampleRequest.ISampleRequestVisitor3<T1, T2, TResult> visitor, T1 t1, T2 t2) => visitor.Visit(this, t1, t2);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleRequest
4+
{
5+
partial interface ISampleRequest
6+
{
7+
System.Threading.Tasks.Task AcceptAsync<TArg1, TArg2>(Sample.SampleRequest.ISampleRequestVisitor4<TArg1, TArg2> visitor, TArg1 arg1, TArg2 arg2);
8+
}
9+
}
10+
11+
namespace Sample.SampleRequest
12+
{
13+
partial interface ISampleRequestVisitor4<in TArg1, in TArg2>
14+
{
15+
System.Threading.Tasks.Task VisitAsync(Sample.SampleRequest.Sample3Request value, TArg1 arg1, TArg2 arg2);
16+
System.Threading.Tasks.Task<Sample.SampleResponse.Sample1Response> VisitAsync(Sample.SampleRequest.Sample1Request value, TArg1 arg1, TArg2 arg2);
17+
System.Threading.Tasks.Task<Sample.SampleResponse.Sample2Response> VisitAsync(Sample.SampleRequest.Sample2Request value, TArg1 arg1, TArg2 arg2);
18+
}
19+
}
20+
21+
namespace Sample.SampleRequest
22+
{
23+
partial class Sample3Request: Sample.SampleRequest.ISampleRequest
24+
{
25+
async System.Threading.Tasks.Task Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2>(Sample.SampleRequest.ISampleRequestVisitor4<TArg1, TArg2> visitor, TArg1 arg1, TArg2 arg2) => await visitor.VisitAsync(this, arg1, arg2);
26+
}
27+
}
28+
29+
namespace Sample.SampleRequest
30+
{
31+
partial class Sample1Request: Sample.SampleRequest.ISampleRequest
32+
{
33+
async System.Threading.Tasks.Task Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2>(Sample.SampleRequest.ISampleRequestVisitor4<TArg1, TArg2> visitor, TArg1 arg1, TArg2 arg2) => await visitor.VisitAsync(this, arg1, arg2);
34+
}
35+
}
36+
37+
namespace Sample.SampleRequest
38+
{
39+
partial class Sample2Request: Sample.SampleRequest.ISampleRequest
40+
{
41+
async System.Threading.Tasks.Task Sample.SampleRequest.ISampleRequest.AcceptAsync<TArg1, TArg2>(Sample.SampleRequest.ISampleRequestVisitor4<TArg1, TArg2> visitor, TArg1 arg1, TArg2 arg2) => await visitor.VisitAsync(this, arg1, arg2);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// <auto-generated/>
2+
3+
namespace Sample.SampleResponse
4+
{
5+
[MessagePack.Union(1, typeof(Sample.SampleResponse.Sample1Response))]
6+
[MessagePack.Union(2, typeof(Sample.SampleResponse.Sample2Response))]
7+
partial interface ISampleResponse { }
8+
}

0 commit comments

Comments
 (0)