From caedb5978bf671829b12d96e7fdd1cc9eb6a62b0 Mon Sep 17 00:00:00 2001 From: Struan Judd Date: Sun, 31 Dec 2023 16:00:39 +1300 Subject: [PATCH] Change Object Alternates to only allow Collections --- .../Parse/Schema/ObjectParser.cs | 12 ++++---- .../Parse/Schema/ParseInput.cs | 28 ++++++++----------- .../Parse/Schema/ParseOutput.cs | 4 +-- .../Parse/Schema/BaseObjectChecks.cs | 4 +-- .../Sample/Schema/Intro_Complete.graphql+ | 10 +++---- .../Sample/Schema/Intro_Schema.graphql+ | 10 +++---- .../ParseSchema/Intro_Complete.verified.txt | 13 +++++---- .../ParseSchema/Intro_Schema.verified.txt | 13 +++++---- .../VerifySchema/Intro_Schema.verified.txt | 8 +++--- test/GqlPlus.Verifier.TestBase/TestHelpers.cs | 3 ++ 10 files changed, 55 insertions(+), 50 deletions(-) diff --git a/src/GqlPlus.Verifier/Parse/Schema/ObjectParser.cs b/src/GqlPlus.Verifier/Parse/Schema/ObjectParser.cs index f60efc3c..8ac3cb31 100644 --- a/src/GqlPlus.Verifier/Parse/Schema/ObjectParser.cs +++ b/src/GqlPlus.Verifier/Parse/Schema/ObjectParser.cs @@ -33,16 +33,16 @@ public abstract class ParseObjectDefinition : Parser where R : AstReference { private readonly Parser.L _field; - private readonly Parser.LA _modifiers; + private readonly ParserArray.LA _collections; private readonly Parser.L _reference; protected ParseObjectDefinition( Parser.D field, - Parser.DA modifiers, + ParserArray.DA collections, Parser.D reference) { _field = field; - _modifiers = modifiers; + _collections = collections; _reference = reference; } @@ -94,9 +94,9 @@ private IResultArray> ParseAlternates(TContext tokens, AlternateAst alternate = new(reference.Required()); result.Add(alternate); - var modifiers = _modifiers.Value.Parse(tokens, Label); - if (!modifiers.Optional(value => alternate.Modifiers = value)) { - return modifiers.AsPartialArray(result); + var collections = _collections.Value.Parse(tokens, Label); + if (!collections.Optional(value => alternate.Modifiers = value)) { + return collections.AsPartialArray(result); } } diff --git a/src/GqlPlus.Verifier/Parse/Schema/ParseInput.cs b/src/GqlPlus.Verifier/Parse/Schema/ParseInput.cs index 847351e9..b176c1bb 100644 --- a/src/GqlPlus.Verifier/Parse/Schema/ParseInput.cs +++ b/src/GqlPlus.Verifier/Parse/Schema/ParseInput.cs @@ -6,16 +6,14 @@ namespace GqlPlus.Verifier.Parse.Schema; -internal class ParseInput : ObjectParser +internal class ParseInput( + TypeName name, + Parser.DA param, + Parser.DA aliases, + Parser.D option, + Parser>.D definition +) : ObjectParser(name, param, aliases, option, definition) { - public ParseInput( - TypeName name, - Parser.DA param, - Parser.DA aliases, - Parser.D option, - Parser>.D definition - ) : base(name, param, aliases, option, definition) { } - protected override void ApplyDefinition(InputDeclAst result, ObjectDefinition value) { result.Extends = value.Extends; @@ -30,13 +28,11 @@ protected override InputDeclAst MakeResult(TokenAt at, string? name, string desc => new(at, name!, description); } -internal class ParseInputDefinition : ParseObjectDefinition +internal class ParseInputDefinition( + Parser.D field, + ParserArray.DA collections, + Parser.D reference +) : ParseObjectDefinition(field, collections, reference) { - public ParseInputDefinition( - Parser.D field, - Parser.DA modifiers, - Parser.D reference - ) : base(field, modifiers, reference) { } - protected override string Label => "Input"; } diff --git a/src/GqlPlus.Verifier/Parse/Schema/ParseOutput.cs b/src/GqlPlus.Verifier/Parse/Schema/ParseOutput.cs index 1962c2ee..6cf5639f 100644 --- a/src/GqlPlus.Verifier/Parse/Schema/ParseOutput.cs +++ b/src/GqlPlus.Verifier/Parse/Schema/ParseOutput.cs @@ -30,9 +30,9 @@ protected override OutputDeclAst MakeResult(TokenAt at, string? name, string des internal class ParseOutputDefinition( Parser.D field, - Parser.DA modifiers, + ParserArray.DA collections, Parser.D reference -) : ParseObjectDefinition(field, modifiers, reference) +) : ParseObjectDefinition(field, collections, reference) { protected override string Label => "Output"; } diff --git a/test/GqlPlus.Verifier.ComponentTests/Parse/Schema/BaseObjectChecks.cs b/test/GqlPlus.Verifier.ComponentTests/Parse/Schema/BaseObjectChecks.cs index 6b7f9ce1..d5ca3a88 100644 --- a/test/GqlPlus.Verifier.ComponentTests/Parse/Schema/BaseObjectChecks.cs +++ b/test/GqlPlus.Verifier.ComponentTests/Parse/Schema/BaseObjectChecks.cs @@ -45,9 +45,9 @@ public void WithAlternateComments(string name, AlternateComment[] others) public void WithAlternateModifiers(string name, string[] others) => TrueExpected( - name + "{" + others.Joined(a => $"|{a}[]?") + "}", + name + "{" + others.Joined(a => $"|{a}[][String]") + "}", Object(name) with { - Alternates = [.. others.Select(a => Alternate(a) with { Modifiers = TestMods() })], + Alternates = [.. others.Select(a => Alternate(a) with { Modifiers = TestCollections() })], }); public void WithAlternateModifiersBad(string name, string[] others) diff --git a/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Complete.graphql+ b/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Complete.graphql+ index 5d32d3d9..e49e2362 100644 --- a/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Complete.graphql+ +++ b/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Complete.graphql+ @@ -1,15 +1,15 @@ output _Schema { : _Named - categories(_CategoryFilter): _Categories[String] - directives(_Filter): _Directives[String] - types(_TypeFilter): _Type[String] - settings(_Filter): _Setting[String] + categories(_CategoryFilter?): _Categories[String] + directives(_Filter?): _Directives[String] + types(_TypeFilter?): _Type[String] + settings(_Filter?): _Setting[String] } input _Filter { names: String[] includeReferencedTypes: Boolean = false - | "Names" String[]? + | "Names" String[] } input _CategoryFilter { diff --git a/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Schema.graphql+ b/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Schema.graphql+ index ab32661d..f6d92901 100644 --- a/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Schema.graphql+ +++ b/test/GqlPlus.Verifier.ComponentTests/Sample/Schema/Intro_Schema.graphql+ @@ -1,15 +1,15 @@ output _Schema { : _Named - categories(_CategoryFilter): _Categories[String] - directives(_Filter): _Directives[String] - types(_TypeFilter): _Type[String] - settings(_Filter): _Setting[String] + categories(_CategoryFilter?): _Categories[String] + directives(_Filter?): _Directives[String] + types(_TypeFilter?): _Type[String] + settings(_Filter?): _Setting[String] } input _Filter { names: String[] includeReferencedTypes: Boolean = false - | "Names" String[]? + | "Names" String[] } input _CategoryFilter { diff --git a/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Complete.verified.txt b/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Complete.verified.txt index 5d941197..647622d4 100644 --- a/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Complete.verified.txt +++ b/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Complete.verified.txt @@ -13,9 +13,10 @@ Success !P I@20/3 _CategoryFilter + ? ) : - I@38/3 + I@39/3 _Categories [String] !OF I@9/4 @@ -24,9 +25,10 @@ Success !P I@20/4 _Filter + ? ) : - I@30/4 + I@31/4 _Directives [String] !OF I@9/5 @@ -35,9 +37,10 @@ Success !P I@15/5 _TypeFilter + ? ) : - I@29/5 + I@30/5 _Type [String] !OF I@9/6 @@ -46,9 +49,10 @@ Success !P I@18/6 _Filter + ? ) : - I@28/6 + I@29/6 _Setting [String] } @@ -75,7 +79,6 @@ Success I@15/12 String [] - ? } { !I I@7/15 diff --git a/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Schema.verified.txt b/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Schema.verified.txt index b9e6adbb..9fd74f08 100644 --- a/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Schema.verified.txt +++ b/test/GqlPlus.Verifier.ComponentTests/SampleTests/ParseSchema/Intro_Schema.verified.txt @@ -13,9 +13,10 @@ Success !P I@20/3 _CategoryFilter + ? ) : - I@38/3 + I@39/3 _Categories [String] !OF I@9/4 @@ -24,9 +25,10 @@ Success !P I@20/4 _Filter + ? ) : - I@30/4 + I@31/4 _Directives [String] !OF I@9/5 @@ -35,9 +37,10 @@ Success !P I@15/5 _TypeFilter + ? ) : - I@29/5 + I@30/5 _Type [String] !OF I@9/6 @@ -46,9 +49,10 @@ Success !P I@18/6 _Filter + ? ) : - I@28/6 + I@29/6 _Setting [String] } @@ -75,7 +79,6 @@ Success I@15/12 String [] - ? } { !I I@7/15 diff --git a/test/GqlPlus.Verifier.ComponentTests/SampleTests/VerifySchema/Intro_Schema.verified.txt b/test/GqlPlus.Verifier.ComponentTests/SampleTests/VerifySchema/Intro_Schema.verified.txt index c7991be4..2d235282 100644 --- a/test/GqlPlus.Verifier.ComponentTests/SampleTests/VerifySchema/Intro_Schema.verified.txt +++ b/test/GqlPlus.Verifier.ComponentTests/SampleTests/VerifySchema/Intro_Schema.verified.txt @@ -1,8 +1,8 @@ [ !!! I@22/17 : Invalid Input. '_Resolution' not defined. - '_Resolution' !!!, !!! I@16/22 : Invalid Input. '_TypeKind' not defined. - '_TypeKind' !!!, - !!! I@38/3 : Invalid Output. '_Categories' not defined. - '_Categories' !!!, - !!! I@30/4 : Invalid Output. '_Directives' not defined. - '_Directives' !!!, - !!! I@29/5 : Invalid Output. '_Type' not defined. - '_Type' !!!, - !!! I@28/6 : Invalid Output. '_Setting' not defined. - '_Setting' !!! + !!! I@39/3 : Invalid Output. '_Categories' not defined. - '_Categories' !!!, + !!! I@31/4 : Invalid Output. '_Directives' not defined. - '_Directives' !!!, + !!! I@30/5 : Invalid Output. '_Type' not defined. - '_Type' !!!, + !!! I@29/6 : Invalid Output. '_Setting' not defined. - '_Setting' !!! ] \ No newline at end of file diff --git a/test/GqlPlus.Verifier.TestBase/TestHelpers.cs b/test/GqlPlus.Verifier.TestBase/TestHelpers.cs index 5ecd2938..adef89dc 100644 --- a/test/GqlPlus.Verifier.TestBase/TestHelpers.cs +++ b/test/GqlPlus.Verifier.TestBase/TestHelpers.cs @@ -63,4 +63,7 @@ public static Tokenizer Tokens(string input) public static ModifierAst[] TestMods() => new[] { ModifierAst.List(AstNulls.At), ModifierAst.Optional(AstNulls.At) }; + + public static ModifierAst[] TestCollections() + => new[] { ModifierAst.List(AstNulls.At), new(AstNulls.At, "String", false) }; }