Skip to content

Commit 957a6bb

Browse files
committed
array support SpreadElement
1 parent 3be3f13 commit 957a6bb

File tree

1 file changed

+54
-6
lines changed

1 file changed

+54
-6
lines changed

generators/CssInCSharp.Generator/TypeScriptConverter.cs

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ private SyntaxNodeOrList GenerateCSharpAst(Ts.TsTypes.INode node, NodeContext? c
142142
case Ts.TsTypes.SyntaxKind.ArrayLiteralExpression:
143143
{
144144
var n = node.AsType<Ts.TsTypes.ArrayLiteralExpression>();
145-
var elements = n.Elements.Select(x => (SyntaxNodeOrToken)GenerateCSharpAst(x).AsT0)
145+
var elements = n.Elements
146+
.Where(x => x.Kind != Ts.TsTypes.SyntaxKind.SpreadElement) // remove SpreadElement
147+
.Select(x => (SyntaxNodeOrToken)GenerateCSharpAst(x).AsT0)
146148
.Separate(SyntaxFactory.Token(SyntaxKind.CommaToken));
147149
var arrayType = SyntaxFactory.ArrayType(
148150
SyntaxFactory.PredefinedType(
@@ -152,11 +154,57 @@ private SyntaxNodeOrList GenerateCSharpAst(Ts.TsTypes.INode node, NodeContext? c
152154
SyntaxFactory.ArrayRankSpecifier(
153155
SyntaxFactory.SingletonSeparatedList<ExpressionSyntax>(
154156
SyntaxFactory.OmittedArraySizeExpression()))));
155-
return SyntaxFactory.ArrayCreationExpression(arrayType)
156-
.WithInitializer(
157-
SyntaxFactory.InitializerExpression(
158-
SyntaxKind.ArrayInitializerExpression,
159-
SyntaxFactory.SeparatedList<ExpressionSyntax>(elements)));
157+
158+
var arrayCreation = SyntaxFactory.ArrayCreationExpression(arrayType)
159+
.WithInitializer
160+
(
161+
SyntaxFactory.InitializerExpression(SyntaxKind.ArrayInitializerExpression, SyntaxFactory.SeparatedList<ExpressionSyntax>(elements))
162+
);
163+
164+
/*
165+
* typescript
166+
* var arr = [
167+
* { },
168+
* ...anotherArray
169+
* ];
170+
* c#
171+
* var arr = new object[] {
172+
* new {}
173+
* }.Union(anotherArray).ToArray();
174+
*/
175+
ExpressionSyntax chain = arrayCreation;
176+
var toArray = false;
177+
foreach (var element in n.Elements.Where(x => x.Kind == Ts.TsTypes.SyntaxKind.SpreadElement))
178+
{
179+
toArray = true;
180+
var el = element.AsType<Ts.TsTypes.SpreadElement>();
181+
chain = SyntaxFactory.InvocationExpression(
182+
SyntaxFactory.MemberAccessExpression(
183+
SyntaxKind.SimpleMemberAccessExpression,
184+
chain,
185+
SyntaxFactory.IdentifierName("Union")
186+
)
187+
).WithArgumentList(
188+
SyntaxFactory.ArgumentList(
189+
SyntaxFactory.SingletonSeparatedList(
190+
SyntaxFactory.Argument(SyntaxFactory.IdentifierName(el.IdentifierStr))
191+
)
192+
)
193+
);
194+
}
195+
196+
if (toArray)
197+
{
198+
return SyntaxFactory.InvocationExpression(
199+
SyntaxFactory.MemberAccessExpression(
200+
SyntaxKind.SimpleMemberAccessExpression,
201+
chain,
202+
SyntaxFactory.IdentifierName("ToArray")
203+
)
204+
);
205+
}
206+
207+
return arrayCreation;
160208
}
161209
case Ts.TsTypes.SyntaxKind.AsExpression:
162210
{

0 commit comments

Comments
 (0)