Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ExpressionRewriteVisitor to rewrite param and output type clauses #12055

Merged
merged 4 commits into from
Oct 6, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Use helper methods for decorator rewriting so that new decorators hav…
…e to be rewritten in all `TypeDeclaringExpression`s
  • Loading branch information
jeskew committed Oct 5, 2023
commit 3a4cb0f294c3a43a76ad9736527f8a590ba35ae1
89 changes: 34 additions & 55 deletions src/Bicep.Core/Intermediate/ExpressionRewriteVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ public virtual Expression ReplaceDeclaredMetadataExpression(DeclaredMetadataExpr
{
var hasChanges =
TryRewrite(expression.Value, out var value) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Value = value, Description = description } : expression;
}
Expand All @@ -253,7 +253,7 @@ public virtual Expression ReplaceDeclaredProviderExpression(DeclaredProviderExpr
{
var hasChanges =
TryRewrite(expression.Config, out var config) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Config = config, Description = description } : expression;
}
Expand All @@ -264,14 +264,7 @@ public virtual Expression ReplaceDeclaredParameterExpression(DeclaredParameterEx
var hasChanges =
TryRewrite(expression.DefaultValue, out var defaultValue) |
TryRewriteStrict(expression.Type, out var type) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed) |
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed) |
TryRewrite(expression.AllowedValues, out var allowedValues);

return hasChanges
Expand All @@ -297,7 +290,7 @@ public virtual Expression ReplaceDeclaredVariableExpression(DeclaredVariableExpr
{
var hasChanges =
TryRewrite(expression.Value, out var value) |
TryRewrite(expression.Description, out var description) |
TryRewriteDescription(expression, out var description) |
TryRewrite(expression.Exported, out var exported);

return hasChanges ? expression with { Value = value, Description = description, Exported = exported } : expression;
Expand All @@ -308,7 +301,7 @@ public virtual Expression ReplaceDeclaredFunctionExpression(DeclaredFunctionExpr
{
var hasChanges =
TryRewrite(expression.Lambda, out var lambda) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Lambda = lambda, Description = description } : expression;
}
Expand All @@ -328,14 +321,7 @@ public virtual Expression ReplaceDeclaredOutputExpression(DeclaredOutputExpressi
var hasChanges =
TryRewrite(expression.Value, out var value) |
TryRewriteStrict(expression.Type, out var type) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed);
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed);

return hasChanges
? expression with
Expand All @@ -359,7 +345,7 @@ public virtual Expression ReplaceDeclaredAssertExpression(DeclaredAssertExpressi
{
var hasChanges =
TryRewrite(expression.Value, out var value) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Value = value, Description = description } : expression;
}
Expand All @@ -370,7 +356,7 @@ public virtual Expression ReplaceDeclaredResourceExpression(DeclaredResourceExpr
var hasChanges =
TryRewrite(expression.Body, out var body) |
TryRewriteStrict(expression.DependsOn, out var dependsOn) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Body = body, DependsOn = dependsOn, Description = description } : expression;
}
Expand All @@ -382,7 +368,7 @@ public virtual Expression ReplaceDeclaredModuleExpression(DeclaredModuleExpressi
TryRewrite(expression.Body, out var body) |
TryRewrite(expression.Parameters, out var parameters) |
TryRewriteStrict(expression.DependsOn, out var dependsOn) |
TryRewrite(expression.Description, out var description);
TryRewriteDescription(expression, out var description);

return hasChanges ? expression with { Body = body, Parameters = parameters, DependsOn = dependsOn, Description = description } : expression;
}
Expand All @@ -401,14 +387,7 @@ public virtual Expression ReplaceDeclaredTypeExpression(DeclaredTypeExpression e
{
var hasChanges =
TryRewriteStrict(expression.Value, out var value) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed) |
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed) |
TryRewrite(expression.Exported, out var exported);

return hasChanges
Expand Down Expand Up @@ -487,14 +466,7 @@ public virtual Expression ReplaceObjectTypePropertyExpression(ObjectTypeProperty
{
var hasChanges =
TryRewriteStrict(expression.Value, out var value) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed);
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed);

return hasChanges
? expression with
Expand All @@ -517,14 +489,7 @@ public virtual Expression ReplaceObjectTypeAdditionalPropertiesExpression(Object
{
var hasChanges =
TryRewriteStrict(expression.Value, out var value) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed);
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed);

return hasChanges
? expression with
Expand Down Expand Up @@ -559,14 +524,7 @@ public virtual Expression ReplaceTupleTypeItemExpression(TupleTypeItemExpression
{
var hasChanges =
TryRewriteStrict(expression.Value, out var value) |
TryRewrite(expression.Description, out var description) |
TryRewrite(expression.Metadata, out var metadata) |
TryRewrite(expression.Secure, out var secure) |
TryRewrite(expression.MinLength, out var minLength) |
TryRewrite(expression.MaxLength, out var maxLength) |
TryRewrite(expression.MinValue, out var minValue) |
TryRewrite(expression.MaxValue, out var maxValue) |
TryRewrite(expression.Sealed, out var @sealed);
TryRewriteTypeDecorators(expression, out var description, out var metadata, out var secure, out var minLength, out var maxLength, out var minValue, out var maxValue, out var @sealed);

return hasChanges
? expression with
Expand Down Expand Up @@ -706,6 +664,27 @@ private Expression ReplaceInternal(Expression expression)

private Expression? current;

private bool TryRewriteDescription(DescribableExpression expression, out Expression? description)
=> TryRewrite(expression.Description, out description);

private bool TryRewriteTypeDecorators(TypeDeclaringExpression expression,
out Expression? description,
out Expression? metadata,
out Expression? secure,
out Expression? minLength,
out Expression? maxLength,
out Expression? minValue,
out Expression? maxValue,
out Expression? @sealed) =>
TryRewriteDescription(expression, out description) |
TryRewrite(expression.Metadata, out metadata) |
TryRewrite(expression.Secure, out secure) |
TryRewrite(expression.MinLength, out minLength) |
TryRewrite(expression.MaxLength, out maxLength) |
TryRewrite(expression.MinValue, out minValue) |
TryRewrite(expression.MaxValue, out maxValue) |
TryRewrite(expression.Sealed, out @sealed);

private bool TryRewriteStrict<TExpression>(TExpression? expression, [NotNullIfNotNull("expression")] out TExpression? newExpression)
where TExpression : Expression
{
Expand Down
Loading