Skip to content

Commit b68f02b

Browse files
committed
Adding basic support for nested ValueTuples
1 parent 2028e37 commit b68f02b

File tree

6 files changed

+106
-24
lines changed

6 files changed

+106
-24
lines changed

Directory.Packages.props

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
<Project>
22
<PropertyGroup>
3-
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
3+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageVersion Include="Spectre.Console" Version="0.49.1" />
7-
<PackageVersion Include="FakeItEasy" Version="8.0.0" />
8-
<PackageVersion Include="FakeItEasy.Analyzer.CSharp" Version="6.1.1" />
9-
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
10-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
11-
<PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" />
12-
<PackageVersion Include="MSTest.TestFramework" Version="3.0.2" />
13-
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
14-
<PackageVersion Include="xunit" Version="2.6.2" />
15-
<PackageVersion Include="xunit.analyzers" Version="1.6.0" />
16-
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.4" />
6+
<PackageVersion Include="Spectre.Console" Version="0.49.1" />
7+
<PackageVersion Include="FakeItEasy" Version="8.3.0" />
8+
<PackageVersion Include="FakeItEasy.Analyzer.CSharp" Version="6.1.1" />
9+
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
10+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
11+
<PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" />
12+
<PackageVersion Include="MSTest.TestFramework" Version="3.0.2" />
13+
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
14+
<PackageVersion Include="xunit" Version="2.9.3" />
15+
<PackageVersion Include="xunit.analyzers" Version="1.19.0" />
16+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
1717
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All"/>
1818
</ItemGroup>
1919
</Project>

src/Dumpify.Playground/Dumpify.Playground.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<OutputType>Exe</OutputType>
66
</PropertyGroup>
77

src/Dumpify.Playground/Program.cs

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
using Dumpify;
2-
using System.Buffers;
32
using System.Collections;
43
using System.Data;
54
using System.Text;
65

7-
int[] arr = [1, 2, 3, 4];
8-
arr.Dump(tableConfig: new () { MaxCollectionCount = 2 });
6+
"Getting Started: Adding AI in .NET Applications".Dump();
97

108
//DumpConfig.Default.Renderer = Renderers.Text;
119
//DumpConfig.Default.ColorConfig = ColorConfig.NoColors;
@@ -14,8 +12,11 @@
1412

1513
// DumpConfig.Default.TableConfig.ShowRowSeparators = true;
1614
// DumpConfig.Default.TableConfig.ShowMemberTypes = true;
15+
// new DirectoryInfo("C:\\Program Files").Dump();
16+
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, "14", "15", 16, 17, 18).Dump();
1717
Console.WriteLine("---------------------");
18-
TestSpecific();
18+
19+
// TestSpecific();
1920
// TestSingle();
2021
// ShowEverything();
2122

@@ -24,8 +25,25 @@
2425
#pragma warning disable CS8321
2526
#pragma warning disable CS0168
2627

28+
DumpConfig.Default.AddCustomTypeHandler(typeof(byte[]), (obj, t, valueProvider, memberProvider) => {
29+
"sdfdsf".Dump();
30+
return ((Byte[])obj).Take(3).ToArray();
31+
});
32+
33+
var foo = new { Name = "Moaid", LastName = "Hathot", Age = 35, Content = Enumerable.Range(0, 10).Select(i => (char)(i + 'a')).ToArray() };
34+
35+
foo.Dump("Test");
36+
37+
2738
void TestSpecific()
2839
{
40+
{
41+
{
42+
{
43+
44+
}
45+
}
46+
}
2947
var moaid = new Person
3048
{
3149
FirstName = "Moaid",
@@ -40,8 +58,21 @@ void TestSpecific()
4058
Profession = Profession.Software
4159
};
4260

43-
Person[] arr = [moaid, moaid];
44-
// arr.Dump();
61+
var haneen = new Person
62+
{
63+
FirstName = "Haneen",
64+
LastName = "Shibli",
65+
Profession = Profession.Health
66+
};
67+
68+
Person[] arr = [moaid, moaid2, haneen];
69+
arr.Dump();
70+
71+
if(moaid.FirstName.Equals("Moaid"))
72+
{
73+
return;
74+
}
75+
4576

4677
// var value = SearchValues.Create("lskdjflskdfj").Dump();
4778
new TestVirtual().Dump();

src/Dumpify.Tests/Dumpify.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<IsPackable>false</IsPackable>
66
<IsTestProject>true</IsTestProject>
77
</PropertyGroup>
88

9-
<ItemGroup>
9+
<ItemGroup>
1010
<Using Include="FluentAssertions" />
1111
<Using Include="Xunit" />
1212
<Using Include="Dumpify" />
@@ -15,7 +15,7 @@
1515
<Using Include="Dumpify.Descriptors.Generators" />
1616
<Using Include="Dumpify.Descriptors.ValueProviders" />
1717
<Using Include="System.Collections.Concurrent" />
18-
</ItemGroup>
18+
</ItemGroup>
1919

2020
<ItemGroup>
2121
<PackageReference Include="FakeItEasy" />

src/Dumpify/Dumpify.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;netstandard2.1;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net9.0;netstandard2.1;netstandard2.0</TargetFrameworks>
55
<PackageReadmeFile>nuget.md</PackageReadmeFile>
66
<PackageIcon>Dumpify-logo-styled.png</PackageIcon>
77
</PropertyGroup>

src/Dumpify/Renderers/Spectre.Console/TableRenderer/CustomTypeRenderers/TupleTypeRenderer.cs

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public IRenderable Render(IDescriptor descriptor, object obj, RenderContext base
2525

2626
var tuple = (ITuple)obj;
2727

28-
var genericArguments = descriptor.Type.GetGenericArguments();
28+
//var genericArguments = descriptor.Type.GetGenericArguments();
29+
var genericArguments = GetGenericArgumentExpansions(descriptor.Type.GetGenericArguments(), context).ToArray();
2930

3031
var memberProvider = context.Config.MemberProvider;
3132
for (var index = 0; index < tuple.Length; ++index)
@@ -47,6 +48,56 @@ public IRenderable Render(IDescriptor descriptor, object obj, RenderContext base
4748
return tableBuilder.Build();
4849
}
4950

51+
private static IEnumerable<Type> GetGenericArgumentExpansions(Type[] genericArguments, RenderContext<SpectreRendererState> context)
52+
{
53+
var expansion = genericArguments;
54+
var index = 0;
55+
56+
while (index < expansion.Length)
57+
{
58+
var type = expansion[index];
59+
if(IsValueTuple(type))
60+
{
61+
var descriptor = DumpConfig.Default.Generator.Generate(type, null, context.Config.MemberProvider)!;
62+
expansion = descriptor.Type.GetGenericArguments();
63+
index = 0;
64+
continue;
65+
}
66+
67+
yield return type;
68+
++index;
69+
}
70+
}
71+
72+
private static bool IsValueTuple(Type type)
73+
{
74+
if (type is null)
75+
{
76+
return false;
77+
}
78+
79+
if (type == typeof(ValueTuple))
80+
{
81+
return true;
82+
}
83+
84+
if (type.IsGenericType)
85+
{
86+
Type genericDefinition = type.GetGenericTypeDefinition();
87+
88+
return genericDefinition == typeof(ValueTuple<>) ||
89+
genericDefinition == typeof(ValueTuple<,>) ||
90+
genericDefinition == typeof(ValueTuple<,,>) ||
91+
genericDefinition == typeof(ValueTuple<,,,>) ||
92+
genericDefinition == typeof(ValueTuple<,,,,>) ||
93+
genericDefinition == typeof(ValueTuple<,,,,,>) ||
94+
genericDefinition == typeof(ValueTuple<,,,,,,>) ||
95+
genericDefinition == typeof(ValueTuple<,,,,,,,>);
96+
}
97+
98+
return false;
99+
}
100+
50101
public (bool, object?) ShouldHandle(IDescriptor descriptor, object obj)
51102
=> (obj is ITuple, null);
52103
}

0 commit comments

Comments
 (0)