Skip to content

Commit

Permalink
Merge branch 'v8'
Browse files Browse the repository at this point in the history
  • Loading branch information
Shane32 committed Jul 26, 2023
2 parents 3013326 + fab4691 commit e3531b7
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 3 deletions.
8 changes: 8 additions & 0 deletions src/GraphQLParser.ApiTests/GraphQLParser.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,10 @@ namespace GraphQLParser.Visitors
public int MaxDepth { get; set; }
public System.Collections.Generic.Stack<GraphQLParser.AST.ASTNode> Parents { get; set; }
}
public struct DefaultVisitorContext : GraphQLParser.Visitors.IASTVisitorContext
{
public System.Threading.CancellationToken CancellationToken { get; set; }
}
public interface IASTVisitorContext
{
System.Threading.CancellationToken CancellationToken { get; }
Expand Down Expand Up @@ -871,6 +875,10 @@ namespace GraphQLParser.Visitors
public MaxDepthVisitor() { }
public override System.Threading.Tasks.ValueTask VisitAsync(GraphQLParser.AST.ASTNode? node, TContext context) { }
}
public struct NullVisitorContext : GraphQLParser.Visitors.IASTVisitorContext
{
public System.Threading.CancellationToken CancellationToken { get; }
}
public static class PrintContextExtensions
{
public static System.Threading.Tasks.ValueTask WriteAsync<TContext>(this TContext context, GraphQLParser.ROM value)
Expand Down
4 changes: 3 additions & 1 deletion src/GraphQLParser.Tests/Visitors/ASTVisitorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,13 @@ public void ASTVisitor_Should_Throw_On_Unknown_Node()
}

[Fact]
public void ASTVisitor_Should_Respect_CancellationToken()
public void ASTVisitor_Should_Pass_CancellationToken()
{
var document = "scalar JSON".Parse();
var visitor = new MyVisitor();
using var cts = new CancellationTokenSource(500);
var context = new Context { CancellationToken = cts.Token };
context.CancellationToken.ThrowIfCancellationRequested();

Should.Throw<OperationCanceledException>(() => visitor.VisitAsync(document, context).GetAwaiter().GetResult());
}
Expand All @@ -48,6 +49,7 @@ private sealed class MyVisitor : ASTVisitor<Context>
protected override async ValueTask VisitScalarTypeDefinitionAsync(GraphQLScalarTypeDefinition scalarTypeDefinition, Context context)
{
await Task.Delay(700);
context.CancellationToken.ThrowIfCancellationRequested();
await base.VisitScalarTypeDefinitionAsync(scalarTypeDefinition, context);
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/GraphQLParser/Visitors/ASTVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -597,8 +597,6 @@ protected virtual async ValueTask VisitInputObjectTypeExtensionAsync(GraphQLInpu
/// <param name="context">Context passed into all INodeVisitor.VisitXXX methods.</param>
public virtual ValueTask VisitAsync(ASTNode? node, TContext context)
{
context.CancellationToken.ThrowIfCancellationRequested();

return node == null
? default
: node switch
Expand Down
11 changes: 11 additions & 0 deletions src/GraphQLParser/Visitors/DefaultVisitorContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace GraphQLParser.Visitors;

/// <summary>
/// An implementation of <see cref="IASTVisitorContext"/> that only contains a <see cref="CancellationToken"/>.
/// Ideal for use in cases where there is no context variables.
/// </summary>
public struct DefaultVisitorContext : IASTVisitorContext
{
/// <inheritdoc/>
public CancellationToken CancellationToken { get; set; }
}
12 changes: 12 additions & 0 deletions src/GraphQLParser/Visitors/NullVisitorContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace GraphQLParser.Visitors;

/// <summary>
/// An implementation of <see cref="IASTVisitorContext"/> that does nothing.
/// Ideal for use in cases where the visitor runs synchronously, there is no context
/// variables, and cancellation is not required.
/// </summary>
public struct NullVisitorContext : IASTVisitorContext
{
/// <inheritdoc/>
public readonly CancellationToken CancellationToken => default;
}

0 comments on commit e3531b7

Please sign in to comment.