Skip to content

Commit 365a26a

Browse files
committed
Generate With* methods
1 parent bca4490 commit 365a26a

File tree

76 files changed

+811
-654
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+811
-654
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.CodeGeneration/SyntaxLightupGenerator.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,62 @@ private void GenerateSyntaxWrapper(in GeneratorExecutionContext context, SyntaxD
652652
})))))),
653653
expressionBody: null));
654654

655+
foreach (var field in nodeData.Fields)
656+
{
657+
if (field.IsSkipped)
658+
{
659+
continue;
660+
}
661+
662+
string valueName = char.ToLowerInvariant(field.Name[0]) + field.Name.Substring(1);
663+
664+
ExpressionSyntax convertedValue = SyntaxFactory.IdentifierName(valueName);
665+
666+
TypeSyntax propertyType = SyntaxFactory.ParseTypeName(field.GetAccessorResultType(syntaxData));
667+
if (syntaxData.TryGetNode(field.Type) is { WrapperName: { } wrapperName })
668+
{
669+
propertyType = SyntaxFactory.IdentifierName(wrapperName);
670+
}
671+
672+
ExpressionSyntax returnExpression = SyntaxFactory.InvocationExpression(
673+
expression: SyntaxFactory.IdentifierName(field.WithAccessorName),
674+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(
675+
new[]
676+
{
677+
SyntaxFactory.Argument(SyntaxFactory.MemberAccessExpression(
678+
SyntaxKind.SimpleMemberAccessExpression,
679+
expression: SyntaxFactory.ThisExpression(),
680+
name: SyntaxFactory.IdentifierName("SyntaxNode"))),
681+
SyntaxFactory.Argument(convertedValue),
682+
})));
683+
684+
// public SyntaxWrapper WithField(T value)
685+
// {
686+
// return new SyntaxWrapper(...);
687+
// }
688+
members = members.Add(SyntaxFactory.MethodDeclaration(
689+
attributeLists: default,
690+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)),
691+
returnType: SyntaxFactory.IdentifierName(nodeData.WrapperName),
692+
explicitInterfaceSpecifier: null,
693+
identifier: SyntaxFactory.Identifier("With" + field.Name),
694+
typeParameterList: null,
695+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
696+
attributeLists: default,
697+
modifiers: default,
698+
type: propertyType,
699+
identifier: SyntaxFactory.Identifier(valueName),
700+
@default: null))),
701+
constraintClauses: default,
702+
body: SyntaxFactory.Block(SyntaxFactory.ReturnStatement(
703+
SyntaxFactory.ObjectCreationExpression(
704+
type: SyntaxFactory.IdentifierName(nodeData.WrapperName),
705+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Argument(returnExpression))),
706+
initializer: null))),
707+
expressionBody: null,
708+
semicolonToken: default));
709+
}
710+
655711
if (nodeData.Kind == NodeKind.Abstract)
656712
{
657713
// internal static SyntaxWrapper FromUpcast(CSharpSyntaxNode node)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/BaseObjectCreationExpressionSyntaxWrapper.g.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,21 @@ public static bool IsInstance(SyntaxNode node)
8686
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
8787
}
8888

89+
public BaseObjectCreationExpressionSyntaxWrapper WithNewKeyword(SyntaxToken newKeyword)
90+
{
91+
return new BaseObjectCreationExpressionSyntaxWrapper(WithNewKeywordAccessor(this.SyntaxNode, newKeyword));
92+
}
93+
94+
public BaseObjectCreationExpressionSyntaxWrapper WithArgumentList(ArgumentListSyntax argumentList)
95+
{
96+
return new BaseObjectCreationExpressionSyntaxWrapper(WithArgumentListAccessor(this.SyntaxNode, argumentList));
97+
}
98+
99+
public BaseObjectCreationExpressionSyntaxWrapper WithInitializer(InitializerExpressionSyntax initializer)
100+
{
101+
return new BaseObjectCreationExpressionSyntaxWrapper(WithInitializerAccessor(this.SyntaxNode, initializer));
102+
}
103+
89104
internal static BaseObjectCreationExpressionSyntaxWrapper FromUpcast(ExpressionSyntax node)
90105
{
91106
return new BaseObjectCreationExpressionSyntaxWrapper(node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/BaseParameterSyntaxWrapper.g.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,21 @@ public static bool IsInstance(SyntaxNode node)
8686
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
8787
}
8888

89+
public BaseParameterSyntaxWrapper WithAttributeLists(SyntaxList<AttributeListSyntax> attributeLists)
90+
{
91+
return new BaseParameterSyntaxWrapper(WithAttributeListsAccessor(this.SyntaxNode, attributeLists));
92+
}
93+
94+
public BaseParameterSyntaxWrapper WithModifiers(SyntaxTokenList modifiers)
95+
{
96+
return new BaseParameterSyntaxWrapper(WithModifiersAccessor(this.SyntaxNode, modifiers));
97+
}
98+
99+
public BaseParameterSyntaxWrapper WithType(TypeSyntax type)
100+
{
101+
return new BaseParameterSyntaxWrapper(WithTypeAccessor(this.SyntaxNode, type));
102+
}
103+
89104
internal static BaseParameterSyntaxWrapper FromUpcast(CSharpSyntaxNode node)
90105
{
91106
return new BaseParameterSyntaxWrapper(node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/BinaryPatternSyntaxWrapper.g.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,20 @@ public static bool IsInstance(SyntaxNode node)
105105
{
106106
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
107107
}
108+
109+
public BinaryPatternSyntaxWrapper WithLeft(PatternSyntaxWrapper left)
110+
{
111+
return new BinaryPatternSyntaxWrapper(WithLeftAccessor(this.SyntaxNode, left));
112+
}
113+
114+
public BinaryPatternSyntaxWrapper WithOperatorToken(SyntaxToken operatorToken)
115+
{
116+
return new BinaryPatternSyntaxWrapper(WithOperatorTokenAccessor(this.SyntaxNode, operatorToken));
117+
}
118+
119+
public BinaryPatternSyntaxWrapper WithRight(PatternSyntaxWrapper right)
120+
{
121+
return new BinaryPatternSyntaxWrapper(WithRightAccessor(this.SyntaxNode, right));
122+
}
108123
}
109124
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/CasePatternSwitchLabelSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,25 @@ public static bool IsInstance(SyntaxNode node)
9393
{
9494
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
9595
}
96+
97+
public CasePatternSwitchLabelSyntaxWrapper WithKeyword(SyntaxToken keyword)
98+
{
99+
return new CasePatternSwitchLabelSyntaxWrapper(WithKeywordAccessor(this.SyntaxNode, keyword));
100+
}
101+
102+
public CasePatternSwitchLabelSyntaxWrapper WithPattern(PatternSyntaxWrapper pattern)
103+
{
104+
return new CasePatternSwitchLabelSyntaxWrapper(WithPatternAccessor(this.SyntaxNode, pattern));
105+
}
106+
107+
public CasePatternSwitchLabelSyntaxWrapper WithWhenClause(WhenClauseSyntaxWrapper whenClause)
108+
{
109+
return new CasePatternSwitchLabelSyntaxWrapper(WithWhenClauseAccessor(this.SyntaxNode, whenClause));
110+
}
111+
112+
public CasePatternSwitchLabelSyntaxWrapper WithColonToken(SyntaxToken colonToken)
113+
{
114+
return new CasePatternSwitchLabelSyntaxWrapper(WithColonTokenAccessor(this.SyntaxNode, colonToken));
115+
}
96116
}
97117
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/CommonForEachStatementSyntaxWrapper.g.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,41 @@ public static bool IsInstance(SyntaxNode node)
134134
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
135135
}
136136

137+
public CommonForEachStatementSyntaxWrapper WithAwaitKeyword(SyntaxToken awaitKeyword)
138+
{
139+
return new CommonForEachStatementSyntaxWrapper(WithAwaitKeywordAccessor(this.SyntaxNode, awaitKeyword));
140+
}
141+
142+
public CommonForEachStatementSyntaxWrapper WithForEachKeyword(SyntaxToken forEachKeyword)
143+
{
144+
return new CommonForEachStatementSyntaxWrapper(WithForEachKeywordAccessor(this.SyntaxNode, forEachKeyword));
145+
}
146+
147+
public CommonForEachStatementSyntaxWrapper WithOpenParenToken(SyntaxToken openParenToken)
148+
{
149+
return new CommonForEachStatementSyntaxWrapper(WithOpenParenTokenAccessor(this.SyntaxNode, openParenToken));
150+
}
151+
152+
public CommonForEachStatementSyntaxWrapper WithInKeyword(SyntaxToken inKeyword)
153+
{
154+
return new CommonForEachStatementSyntaxWrapper(WithInKeywordAccessor(this.SyntaxNode, inKeyword));
155+
}
156+
157+
public CommonForEachStatementSyntaxWrapper WithExpression(ExpressionSyntax expression)
158+
{
159+
return new CommonForEachStatementSyntaxWrapper(WithExpressionAccessor(this.SyntaxNode, expression));
160+
}
161+
162+
public CommonForEachStatementSyntaxWrapper WithCloseParenToken(SyntaxToken closeParenToken)
163+
{
164+
return new CommonForEachStatementSyntaxWrapper(WithCloseParenTokenAccessor(this.SyntaxNode, closeParenToken));
165+
}
166+
167+
public CommonForEachStatementSyntaxWrapper WithStatement(StatementSyntax statement)
168+
{
169+
return new CommonForEachStatementSyntaxWrapper(WithStatementAccessor(this.SyntaxNode, statement));
170+
}
171+
137172
internal static CommonForEachStatementSyntaxWrapper FromUpcast(StatementSyntax node)
138173
{
139174
return new CommonForEachStatementSyntaxWrapper(node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/ConstantPatternSyntaxWrapper.g.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,10 @@ public static bool IsInstance(SyntaxNode node)
8181
{
8282
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
8383
}
84+
85+
public ConstantPatternSyntaxWrapper WithExpression(ExpressionSyntax expression)
86+
{
87+
return new ConstantPatternSyntaxWrapper(WithExpressionAccessor(this.SyntaxNode, expression));
88+
}
8489
}
8590
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DeclarationExpressionSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,15 @@ public static bool IsInstance(SyntaxNode node)
7373
{
7474
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
7575
}
76+
77+
public DeclarationExpressionSyntaxWrapper WithType(TypeSyntax type)
78+
{
79+
return new DeclarationExpressionSyntaxWrapper(WithTypeAccessor(this.SyntaxNode, type));
80+
}
81+
82+
public DeclarationExpressionSyntaxWrapper WithDesignation(VariableDesignationSyntaxWrapper designation)
83+
{
84+
return new DeclarationExpressionSyntaxWrapper(WithDesignationAccessor(this.SyntaxNode, designation));
85+
}
7686
}
7787
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DeclarationPatternSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,15 @@ public static bool IsInstance(SyntaxNode node)
9393
{
9494
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
9595
}
96+
97+
public DeclarationPatternSyntaxWrapper WithType(TypeSyntax type)
98+
{
99+
return new DeclarationPatternSyntaxWrapper(WithTypeAccessor(this.SyntaxNode, type));
100+
}
101+
102+
public DeclarationPatternSyntaxWrapper WithDesignation(VariableDesignationSyntaxWrapper designation)
103+
{
104+
return new DeclarationPatternSyntaxWrapper(WithDesignationAccessor(this.SyntaxNode, designation));
105+
}
96106
}
97107
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DefaultConstraintSyntaxWrapper.g.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,10 @@ public static bool IsInstance(SyntaxNode node)
6161
{
6262
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
6363
}
64+
65+
public DefaultConstraintSyntaxWrapper WithDefaultKeyword(SyntaxToken defaultKeyword)
66+
{
67+
return new DefaultConstraintSyntaxWrapper(WithDefaultKeywordAccessor(this.SyntaxNode, defaultKeyword));
68+
}
6469
}
6570
}

0 commit comments

Comments
 (0)