Repository navigation
Add arguments to SelectionSetMap syntax - #9954
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR extends Fusion’s FieldSelectionMap syntax to support field arguments and GraphQL constant value literals (numbers, strings incl. block strings, booleans/null, enums, lists, objects), updating the lexer/parser/AST plus downstream serialization and traversal support.
Changes:
- Add argument/value-literal support to
FieldSelectionMapReader+FieldSelectionMapParser, and introduce new AST node types for argument values. - Extend
FieldSelectionMapSyntaxSerializerandFieldSelectionMapSyntaxVisitorto handle the new nodes/kinds. - Add broad test coverage (unit + snapshot tests) and disambiguate
HotChocolate.Language.*ValueNodeusages where Fusion now introduces similarly named nodes.
Reviewed changes
Copilot reviewed 64 out of 65 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/HotChocolate/Fusion/test/Fusion.Utilities.Tests/Validators/FieldSelectionMapValidatorTests.cs | Disambiguates StringValueNode type via alias after Fusion adds its own StringValueNode. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/FieldSelectionMapSyntaxVisitorTests.cs | New visitor traversal tests for arguments and value literals. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/FieldSelectionMapSyntaxSerializerTests.cs | Adds serializer tests for arguments and value literal nodes. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/FieldSelectionMapSyntaxNodeTests.cs | Adds construction/ToString tests for new value literal node types. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/FieldSelectionMapReaderTests.cs | Adds lexer snapshot coverage for new token kinds (numbers/strings/block strings/parentheses). |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/FieldSelectionMapParserTests.cs | Adds extensive parser + print round-trip tests for arguments, literals, and error cases. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_TokensAfterMultiLineBlockString_MatchesSnapshot.snap | New snapshot for line/column tracking after multi-line block strings. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_StringValueWithEscapeSequence_MatchesSnapshot.snap | New snapshot for escaped string tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_StringValue_MatchesSnapshot.snap | New snapshot for string tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_Parentheses_MatchesSnapshot.snap | New snapshot for ( / ) tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_NegativeIntValue_MatchesSnapshot.snap | New snapshot for negative int tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_IntValue_MatchesSnapshot.snap | New snapshot for int tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_FloatValueWithExponent_MatchesSnapshot.snap | New snapshot for float-with-exponent tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_FloatValue_MatchesSnapshot.snap | New snapshot for float tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_FieldWithArgument_MatchesSnapshot.snap | New snapshot for argument-bearing field tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapReaderTests.Read_BlockStringValue_MatchesSnapshot.snap | New snapshot for block string tokenization. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedValueMultipleSelectedObjectValuesNested_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedValueMultipleSelectedObjectValues_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedValueMultiplePaths_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedObjectValueNoSelectedValue_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedObjectValueMultipleFieldsNoSelectedValue_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedObjectValue_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_SelectedListValue_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_PathWithTypeName_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_PathSegmentWithTypeName_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_PathSegmentWithTwoTypeNames_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_PathSegmentSingleFieldName_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_PathSegmentNestedFieldName_MatchesSnapshot.snap | Updates parser AST snapshots to include Arguments: []. |
| src/HotChocolate/Fusion/test/Fusion.Language.Tests/snapshots/FieldSelectionMapParserTests.Parse_FieldWithArgument_MatchesSnapshot.snap | New parser snapshot for an argument-bearing path segment. |
| src/HotChocolate/Fusion/test/Fusion.Execution.Tests/Execution/Results/FetchResultStoreTests.cs | Adds aliases for HotChocolate.Language value nodes to avoid collisions with new Fusion language nodes. |
| src/HotChocolate/Fusion/test/Fusion.Execution.Tests/Execution/OperationPlanContextRoutingTests.cs | Adds aliases for HotChocolate.Language value nodes to avoid collisions. |
| src/HotChocolate/Fusion/src/Fusion.Language/Visitors/FieldSelectionMapSyntaxVisitor~1.cs | Extends visitor dispatch/children traversal for arguments and value literal nodes. |
| src/HotChocolate/Fusion/src/Fusion.Language/StringValueHelper.cs | Adds string + block string unescape/dedent logic for argument value parsing. |
| src/HotChocolate/Fusion/src/Fusion.Language/Properties/FusionLanguageResources.resx | Adds localized messages for new lexer/parser error cases. |
| src/HotChocolate/Fusion/src/Fusion.Language/Properties/FusionLanguageResources.Designer.cs | Generated accessor updates for new resource strings. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/StringValueNode.cs | Introduces Fusion StringValueNode (with block support). |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/PathSegmentNode.cs | Adds Arguments to path segments and includes them in traversal. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/ObjectValueNode.cs | Introduces object value literal node for argument values. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/ObjectFieldSelectionNode.cs | Adds Arguments to shorthand object field selections. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/ObjectFieldNode.cs | Introduces object-field node for object value literals. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/NullValueNode.cs | Introduces null literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/ListValueNode.cs | Introduces list literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/IValueNode.cs | Introduces marker interface for constant value literals in Fusion language AST. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/IntValueNode.cs | Introduces int literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/FloatValueNode.cs | Introduces float literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/EnumValueNode.cs | Introduces enum literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/BooleanValueNode.cs | Introduces boolean literal node. |
| src/HotChocolate/Fusion/src/Fusion.Language/Nodes/ArgumentNode.cs | Introduces argument node (name: value) for path segments / shorthand fields. |
| src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapTokenKind.cs | Adds token kinds for numbers/strings/block strings and parentheses. |
| src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapSyntaxSerializer.cs | Serializes arguments and value literals (incl. string/block string layouts). |
| src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapSyntaxKind.cs | Adds syntax kinds for arguments and value literal nodes. |
| src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapReader.cs | Adds lexing for numbers and string/block string literals; adds parentheses tokens and improved lookahead. |
| src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapParser.cs | Parses arguments and constant value literals; enforces “no args on labeled object fields” rule. |
| src/HotChocolate/Fusion/src/Fusion.Language/Extensions/CharExtensions.cs | Adds helpers for digit/quote/control/escape checks and punctuation updates. |
| src/HotChocolate/Fusion/src/Fusion.Language/CharConstants.cs | Adds constants for quotes, backslash, parentheses, minus, delete. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Results/FetchResultStore.cs | Adds aliases for HotChocolate.Language value node types to avoid collisions. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Nodes/Serialization/JsonOperationPlanParser.cs | Adds aliases for HotChocolate.Language value nodes to avoid collisions. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/Completion/CompositeSchemaBuilder.cs | Adds aliases for HotChocolate.Language value nodes to avoid collisions. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/Completion/CompletionTools.cs | Aliases HotChocolate.Language.ArgumentNode to avoid collision with new Fusion ArgumentNode. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaPreprocessor.cs | Adds alias for HotChocolate.Language.StringValueNode to avoid collision. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaMerger.cs | Adds aliases for HotChocolate.Language value nodes to avoid collisions. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaEnricher.cs | Adds alias for HotChocolate.Language.StringValueNode to avoid collision. |
| src/HotChocolate/Fusion/benchmarks/Fusion.Execution.Benchmarks/VariableMergingBenchmark.cs | Adds aliases for HotChocolate.Language value node types to avoid collisions. |
| src/HotChocolate/Core/src/Types/Types/Composite/Types/FieldSelectionMapType.cs | Updates exception handling to match new Fusion parser/exception types. |
| src/HotChocolate/Core/src/Types/Types/Composite/SourceSchemaKeyInferenceTypeInterceptor.cs | Adds alias for HotChocolate.Language.StringValueNode to avoid collision. |
Files not reviewed (1)
- src/HotChocolate/Fusion/src/Fusion.Language/Properties/FusionLanguageResources.Designer.cs: Generated file
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+546
to
+550
| TokenKind = TokenKind.BlockStringValue; | ||
| Start = start; | ||
| End = Position + 2; | ||
| Value = _sourceText[(start + 3)..Position]; | ||
| Position = End + 1; |
Code Coverage OverviewLanguages: C# C# / code-coverage/dotnetThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
This was referenced Jun 22, 2026
This was referenced Jun 29, 2026
Closed
Closed
This was referenced Jul 7, 2026
This was referenced Jul 14, 2026
This was referenced Jul 23, 2026
chore(deps): Bump HotChocolate.Subscriptions.InMemory from 15.1.14 to 16.5.1
Kuestenlogik/Bowire#506
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.