Skip to content

Descriptions/Comments/Locations rework #142

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

Merged
merged 4 commits into from
Nov 10, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
- name: Setup .NET Core 5.0 SDK
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.201'
dotnet-version: '5.0.x'
source-url: https://nuget.pkg.github.com/graphql-dotnet/index.json
env:
NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Expand Down
4 changes: 2 additions & 2 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project>

<PropertyGroup>
<VersionPrefix>7.2.0-preview</VersionPrefix>
<LangVersion>8.0</LangVersion>
<VersionPrefix>8.0.0-preview</VersionPrefix>
<LangVersion>9.0</LangVersion>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Expand Down
70 changes: 34 additions & 36 deletions src/GraphQLParser.ApiTests/GraphQL-Parser.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ namespace GraphQLParser.AST
public GraphQLComment() { }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.ROM Text { get; set; }
public override GraphQLParser.AST.GraphQLLocation Location { get; set; }
}
public class GraphQLDescription : GraphQLParser.AST.ASTNode
{
Expand All @@ -76,7 +75,7 @@ namespace GraphQLParser.AST
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.GraphQLName? Name { get; set; }
}
public class GraphQLDirectiveDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription
public class GraphQLDirectiveDefinition : GraphQLParser.AST.GraphQLTypeDefinition
{
public GraphQLDirectiveDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLInputValueDefinition>? Arguments { get; set; }
Expand All @@ -93,37 +92,37 @@ namespace GraphQLParser.AST
public void Dispose() { }
protected virtual void Dispose(bool disposing) { }
}
public class GraphQLEnumTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLEnumTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLEnumTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLEnumValueDefinition>? Values { get; set; }
}
public class GraphQLEnumValueDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLEnumValueDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLEnumValueDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
}
public class GraphQLFieldDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLField : GraphQLParser.AST.ASTNode, GraphQLParser.AST.IHasDirectivesNode, GraphQLParser.AST.INamedNode
{
public GraphQLFieldDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLInputValueDefinition>? Arguments { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.GraphQLType? Type { get; set; }
}
public class GraphQLFieldSelection : GraphQLParser.AST.ASTNode, GraphQLParser.AST.IHasDirectivesNode, GraphQLParser.AST.INamedNode
{
public GraphQLFieldSelection() { }
public GraphQLField() { }
public GraphQLParser.AST.GraphQLName? Alias { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLArgument>? Arguments { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.GraphQLName? Name { get; set; }
public GraphQLParser.AST.GraphQLSelectionSet? SelectionSet { get; set; }
}
public class GraphQLFieldDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLFieldDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLInputValueDefinition>? Arguments { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.GraphQLType? Type { get; set; }
}
public class GraphQLFragmentDefinition : GraphQLParser.AST.GraphQLInlineFragment, GraphQLParser.AST.INamedNode
{
public GraphQLFragmentDefinition() { }
Expand All @@ -145,22 +144,22 @@ namespace GraphQLParser.AST
public GraphQLParser.AST.GraphQLSelectionSet? SelectionSet { get; set; }
public GraphQLParser.AST.GraphQLNamedType? TypeCondition { get; set; }
}
public class GraphQLInputObjectTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLInputObjectTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLInputObjectTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLInputValueDefinition>? Fields { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
}
public class GraphQLInputValueDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLInputValueDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLInputValueDefinition() { }
public GraphQLParser.AST.GraphQLValue? DefaultValue { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.GraphQLType? Type { get; set; }
}
public class GraphQLInterfaceTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLInterfaceTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLInterfaceTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
Expand Down Expand Up @@ -221,7 +220,7 @@ namespace GraphQLParser.AST
public GraphQLParser.AST.GraphQLName? Name { get; set; }
public GraphQLParser.AST.GraphQLValue? Value { get; set; }
}
public class GraphQLObjectTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLObjectTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLObjectTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
Expand All @@ -245,14 +244,14 @@ namespace GraphQLParser.AST
public GraphQLParser.AST.GraphQLSelectionSet? SelectionSet { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLVariableDefinition>? VariableDefinitions { get; set; }
}
public class GraphQLOperationTypeDefinition : GraphQLParser.AST.ASTNode
public class GraphQLRootOperationTypeDefinition : GraphQLParser.AST.ASTNode
{
public GraphQLOperationTypeDefinition() { }
public GraphQLRootOperationTypeDefinition() { }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public GraphQLParser.AST.OperationType Operation { get; set; }
public GraphQLParser.AST.GraphQLNamedType? Type { get; set; }
}
public class GraphQLScalarTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLScalarTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLScalarTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
Expand All @@ -265,12 +264,13 @@ namespace GraphQLParser.AST
public GraphQLParser.ROM Value { get; set; }
public override string? ToString() { }
}
public class GraphQLSchemaDefinition : GraphQLParser.AST.ASTNode, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLSchemaDefinition : GraphQLParser.AST.ASTNode, GraphQLParser.AST.IHasDescriptionNode, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLSchemaDefinition() { }
public GraphQLParser.AST.GraphQLDescription? Description { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLOperationTypeDefinition>? OperationTypes { get; set; }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLRootOperationTypeDefinition>? OperationTypes { get; set; }
}
public class GraphQLSelectionSet : GraphQLParser.AST.ASTNode
{
Expand All @@ -282,23 +282,19 @@ namespace GraphQLParser.AST
{
protected GraphQLType() { }
}
public abstract class GraphQLTypeDefinition : GraphQLParser.AST.ASTNode, GraphQLParser.AST.INamedNode
public abstract class GraphQLTypeDefinition : GraphQLParser.AST.ASTNode, GraphQLParser.AST.IHasDescriptionNode, GraphQLParser.AST.INamedNode
{
protected GraphQLTypeDefinition() { }
public GraphQLParser.AST.GraphQLName? Name { get; set; }
}
public abstract class GraphQLTypeDefinitionWithDescription : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDescription
{
protected GraphQLTypeDefinitionWithDescription() { }
public GraphQLParser.AST.GraphQLDescription? Description { get; set; }
public GraphQLParser.AST.GraphQLName? Name { get; set; }
}
public class GraphQLTypeExtensionDefinition : GraphQLParser.AST.GraphQLTypeDefinition
{
public GraphQLTypeExtensionDefinition() { }
public GraphQLParser.AST.GraphQLObjectTypeDefinition? Definition { get; set; }
public override GraphQLParser.AST.ASTNodeKind Kind { get; }
}
public class GraphQLUnionTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinitionWithDescription, GraphQLParser.AST.IHasDirectivesNode
public class GraphQLUnionTypeDefinition : GraphQLParser.AST.GraphQLTypeDefinition, GraphQLParser.AST.IHasDirectivesNode
{
public GraphQLUnionTypeDefinition() { }
public System.Collections.Generic.List<GraphQLParser.AST.GraphQLDirective>? Directives { get; set; }
Expand All @@ -323,7 +319,7 @@ namespace GraphQLParser.AST
public GraphQLParser.AST.GraphQLType? Type { get; set; }
public GraphQLParser.AST.GraphQLVariable? Variable { get; set; }
}
public interface IHasDescription
public interface IHasDescriptionNode
{
GraphQLParser.AST.GraphQLDescription? Description { get; set; }
}
Expand Down Expand Up @@ -365,7 +361,7 @@ namespace GraphQLParser
public virtual GraphQLParser.AST.GraphQLDirective BeginVisitDirective(GraphQLParser.AST.GraphQLDirective directive) { }
public virtual System.Collections.Generic.IEnumerable<GraphQLParser.AST.GraphQLDirective> BeginVisitDirectives(System.Collections.Generic.IEnumerable<GraphQLParser.AST.GraphQLDirective> directives) { }
public virtual GraphQLParser.AST.GraphQLScalarValue BeginVisitEnumValue(GraphQLParser.AST.GraphQLScalarValue value) { }
public virtual GraphQLParser.AST.GraphQLFieldSelection BeginVisitFieldSelection(GraphQLParser.AST.GraphQLFieldSelection selection) { }
public virtual GraphQLParser.AST.GraphQLField BeginVisitField(GraphQLParser.AST.GraphQLField selection) { }
public virtual GraphQLParser.AST.GraphQLScalarValue BeginVisitFloatValue(GraphQLParser.AST.GraphQLScalarValue value) { }
public virtual GraphQLParser.AST.GraphQLFragmentDefinition BeginVisitFragmentDefinition(GraphQLParser.AST.GraphQLFragmentDefinition node) { }
public virtual GraphQLParser.AST.GraphQLFragmentSpread BeginVisitFragmentSpread(GraphQLParser.AST.GraphQLFragmentSpread fragmentSpread) { }
Expand All @@ -383,18 +379,20 @@ namespace GraphQLParser
public virtual GraphQLParser.AST.GraphQLVariableDefinition BeginVisitVariableDefinition(GraphQLParser.AST.GraphQLVariableDefinition node) { }
public virtual System.Collections.Generic.IEnumerable<GraphQLParser.AST.GraphQLVariableDefinition> BeginVisitVariableDefinitions(System.Collections.Generic.IEnumerable<GraphQLParser.AST.GraphQLVariableDefinition> variableDefinitions) { }
public virtual GraphQLParser.AST.GraphQLArgument EndVisitArgument(GraphQLParser.AST.GraphQLArgument argument) { }
public virtual GraphQLParser.AST.GraphQLFieldSelection EndVisitFieldSelection(GraphQLParser.AST.GraphQLFieldSelection selection) { }
public virtual GraphQLParser.AST.GraphQLField EndVisitField(GraphQLParser.AST.GraphQLField selection) { }
public virtual GraphQLParser.AST.GraphQLListValue EndVisitListValue(GraphQLParser.AST.GraphQLListValue node) { }
public virtual GraphQLParser.AST.GraphQLObjectValue EndVisitObjectValue(GraphQLParser.AST.GraphQLObjectValue node) { }
public virtual GraphQLParser.AST.GraphQLOperationDefinition EndVisitOperationDefinition(GraphQLParser.AST.GraphQLOperationDefinition definition) { }
public virtual GraphQLParser.AST.GraphQLVariable EndVisitVariable(GraphQLParser.AST.GraphQLVariable variable) { }
public virtual void Visit(GraphQLParser.AST.GraphQLDocument ast) { }
}
[System.Flags]
public enum IgnoreOptions
{
IgnoreComments = 0,
IgnoreCommentsAndLocations = 1,
None = 2,
None = 0,
Comments = 1,
Locations = 2,
All = 3,
}
public static class Lexer
{
Expand Down
42 changes: 25 additions & 17 deletions src/GraphQLParser.Benchmarks/Benchmarks/ParserBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ private class ParserOrderer : IOrderer
private static int GetOrder(object o) => o switch
{
IgnoreOptions.None => 1,
IgnoreOptions.IgnoreComments => 2,
IgnoreOptions.IgnoreCommentsAndLocations => 3,
_ => 4
IgnoreOptions.Comments => 2,
IgnoreOptions.Locations => 3,
IgnoreOptions.All => 4,
_ => 5
};

public IEnumerable<BenchmarkCase> GetExecutionOrder(ImmutableArray<BenchmarkCase> benchmarksCase) => benchmarksCase;
Expand Down Expand Up @@ -62,32 +63,39 @@ public void Parse(string name, IgnoreOptions options)
public IEnumerable<object[]> NamesAndOptions()
{
yield return new object[] { "hero", IgnoreOptions.None };
yield return new object[] { "hero", IgnoreOptions.IgnoreComments };
yield return new object[] { "hero", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "hero", IgnoreOptions.Comments };
yield return new object[] { "hero", IgnoreOptions.Locations };
yield return new object[] { "hero", IgnoreOptions.All };

yield return new object[] { "escapes", IgnoreOptions.None };
yield return new object[] { "escapes", IgnoreOptions.IgnoreComments };
yield return new object[] { "escapes", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "escapes", IgnoreOptions.Comments };
yield return new object[] { "escapes", IgnoreOptions.Locations };
yield return new object[] { "escapes", IgnoreOptions.All };

yield return new object[] { "kitchen", IgnoreOptions.None };
yield return new object[] { "kitchen", IgnoreOptions.IgnoreComments };
yield return new object[] { "kitchen", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "kitchen", IgnoreOptions.Comments };
yield return new object[] { "kitchen", IgnoreOptions.Locations };
yield return new object[] { "kitchen", IgnoreOptions.All };

yield return new object[] { "introspection", IgnoreOptions.None };
yield return new object[] { "introspection", IgnoreOptions.IgnoreComments };
yield return new object[] { "introspection", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "introspection", IgnoreOptions.Comments };
yield return new object[] { "introspection", IgnoreOptions.Locations };
yield return new object[] { "introspection", IgnoreOptions.All };

yield return new object[] { "params", IgnoreOptions.None };
yield return new object[] { "params", IgnoreOptions.IgnoreComments };
yield return new object[] { "params", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "params", IgnoreOptions.Comments };
yield return new object[] { "params", IgnoreOptions.Locations };
yield return new object[] { "params", IgnoreOptions.All };

yield return new object[] { "variables", IgnoreOptions.None };
yield return new object[] { "variables", IgnoreOptions.IgnoreComments };
yield return new object[] { "variables", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "variables", IgnoreOptions.Comments };
yield return new object[] { "variables", IgnoreOptions.Locations };
yield return new object[] { "variables", IgnoreOptions.All };

yield return new object[] { "github", IgnoreOptions.None };
yield return new object[] { "github", IgnoreOptions.IgnoreComments };
yield return new object[] { "github", IgnoreOptions.IgnoreCommentsAndLocations };
yield return new object[] { "github", IgnoreOptions.Comments };
yield return new object[] { "github", IgnoreOptions.Locations };
yield return new object[] { "github", IgnoreOptions.All };
}

public override void Run() => Parse("params", IgnoreOptions.None);
Expand Down
3 changes: 3 additions & 0 deletions src/GraphQLParser.Tests/Files/CommentsOnDirective.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
scalar Json
#comment for directive
@external
33 changes: 33 additions & 0 deletions src/GraphQLParser.Tests/Files/CommentsOnNamedType.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# aaa

query _ {
person {
... on
#comment for named type from TypeCondition
human {
name
}
}
}

type A implements
#comment for named type from ImplementsInterfaces
B {
name : String
}

schema {
query:
#comment for named type from RootOperationTypeDefinition
Query
}

type Query {
field:
#comment for named type from Type
String
}

union U = A |
#comment for named type from UnionMemberTypes
B
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
schema {
#comment for root operation type
query: Query
}
5 changes: 5 additions & 0 deletions src/GraphQLParser.Tests/Files/CommentsOnSelectionSet.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
query
#comment on selection set
{
name
}
14 changes: 14 additions & 0 deletions src/GraphQLParser.Tests/Files/CommentsOnType.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
type Person {
name:
#comment for named type
String
age:
#comment for nonnull type
Int!
friends:
#comment for list type
[
#comment for item type
Person
]
}
Loading