Skip to content

Commit 256f765

Browse files
authored
Add support for '&' syntax token (#126)
1 parent c17fe87 commit 256f765

File tree

8 files changed

+60
-4
lines changed

8 files changed

+60
-4
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,13 @@ jobs:
4141
- name: Setup .NET Core 5.0 SDK
4242
uses: actions/setup-dotnet@v1
4343
with:
44-
dotnet-version: '5.0.x'
44+
dotnet-version: '5.0.201'
4545
source-url: https://nuget.pkg.github.com/graphql-dotnet/index.json
4646
env:
4747
NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
48+
- name: Disable MSVS Nuget Source # see https://github.com/graphql-dotnet/graphql-dotnet/issues/2422
49+
if: ${{ startsWith(matrix.os, 'windows') }}
50+
run: dotnet nuget disable source 'Microsoft Visual Studio Offline Packages'
4851
- name: Install dependencies
4952
working-directory: src
5053
run: dotnet restore

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22

33
<PropertyGroup>
4-
<VersionPrefix>7.0.1-preview</VersionPrefix>
4+
<VersionPrefix>7.1.0-preview</VersionPrefix>
55
<LangVersion>8.0</LangVersion>
66
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
77
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

src/GraphQLParser.ApiTests/GraphQL-Parser.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,5 +455,6 @@ namespace GraphQLParser
455455
STRING = 18,
456456
COMMENT = 19,
457457
UNKNOWN = 20,
458+
AMPERSAND = 21,
458459
}
459460
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System.Linq;
2+
using GraphQLParser.AST;
3+
using Shouldly;
4+
using Xunit;
5+
6+
namespace GraphQLParser.Tests
7+
{
8+
public class Issue2478_GraphQL_NET
9+
{
10+
[Theory]
11+
[InlineData(IgnoreOptions.None)]
12+
[InlineData(IgnoreOptions.IgnoreComments)]
13+
[InlineData(IgnoreOptions.IgnoreCommentsAndLocations)]
14+
public void TestSchemaWithTwoInterfaceImplemented(IgnoreOptions options)
15+
{
16+
string query = @"
17+
type Query {
18+
me: Account
19+
}
20+
21+
interface FooInterface {
22+
id: String
23+
}
24+
25+
interface BooInterface {
26+
name: String
27+
}
28+
29+
type Account implements FooInterface & BooInterface {
30+
id: String
31+
name: String
32+
}
33+
";
34+
35+
using var document = query.Parse(new ParserOptions { Ignore = options });
36+
document.Definitions.Count.ShouldBe(4);
37+
var def = document.Definitions.Last() as GraphQLObjectTypeDefinition;
38+
def.Interfaces.Count.ShouldBe(2);
39+
}
40+
}
41+
}

src/GraphQLParser/LexerContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ private void Throw_From_GetUnicodeChar2(ReadOnlySpan<char> expression)
322322
':' => CreatePunctuationToken(TokenKind.COLON, 1),
323323
'=' => CreatePunctuationToken(TokenKind.EQUALS, 1),
324324
'@' => CreatePunctuationToken(TokenKind.AT, 1),
325+
'&' => CreatePunctuationToken(TokenKind.AMPERSAND, 1),
325326
'[' => CreatePunctuationToken(TokenKind.BRACKET_L, 1),
326327
']' => CreatePunctuationToken(TokenKind.BRACKET_R, 1),
327328
'{' => CreatePunctuationToken(TokenKind.BRACE_L, 1),

src/GraphQLParser/ParserContext.Parse.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,11 +567,15 @@ private void Throw_From_ParseFragmentName()
567567
types = new List<GraphQLNamedType>();
568568
Advance();
569569

570+
// Objects that implement interfaces may be defined with an optional leading & character
571+
// to aid formatting when representing a longer list of implemented interfaces
572+
Skip(TokenKind.AMPERSAND);
573+
570574
do
571575
{
572576
types.Add(ParseNamedType());
573577
}
574-
while (Peek(TokenKind.NAME));
578+
while (Skip(TokenKind.AMPERSAND));
575579
}
576580

577581
return types;

src/GraphQLParser/Token.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public Token(TokenKind kind, ROM value, int start, int end)
6363
TokenKind.COLON => ":",
6464
TokenKind.EQUALS => "=",
6565
TokenKind.AT => "@",
66+
TokenKind.AMPERSAND => "&",
6667
TokenKind.BRACKET_L => "[",
6768
TokenKind.BRACKET_R => "]",
6869
TokenKind.BRACE_L => "{",

src/GraphQLParser/TokenKind.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ public enum TokenKind
110110
/// <summary>
111111
/// Unknown token. Something went wrong.
112112
/// </summary>
113-
UNKNOWN = 20
113+
UNKNOWN = 20,
114+
115+
/// <summary>
116+
/// &amp;
117+
/// </summary>
118+
AMPERSAND = 21
114119
}
115120
}

0 commit comments

Comments
 (0)