Skip to content

Add arguments to SelectionSetMap syntax - #9954

Merged
michaelstaib merged 10 commits into
mainfrom
mst/selection-set-map-argument-support
Jun 19, 2026
Merged

michaelstaib merged 10 commits into
mainfrom
mst/selection-set-map-argument-support

Conversation

@michaelstaib

Copy link
Copy Markdown
Member

No description provided.

Copilot AI review requested due to automatic review settings June 19, 2026 12:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 FieldSelectionMapSyntaxSerializer and FieldSelectionMapSyntaxVisitor to handle the new nodes/kinds.
  • Add broad test coverage (unit + snapshot tests) and disambiguate HotChocolate.Language.*ValueNode usages 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 thread src/HotChocolate/Fusion/src/Fusion.Language/FieldSelectionMapReader.cs Outdated
Comment on lines +546 to +550
TokenKind = TokenKind.BlockStringValue;
Start = start;
End = Position + 2;
Value = _sourceText[(start + 3)..Position];
Position = End + 1;
@github-code-quality

github-code-quality Bot commented Jun 19, 2026 •

Copy link
Copy Markdown

Code Coverage Overview

Languages: C#

C# / code-coverage/dotnet

The overall coverage in the mst/selection-set-ma... branch remains at 49%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main 0dbeaa9 mst/selection-set-ma... 3eefae9 +/-
/home/runner/wo...taxVisitor~1.cs 85% 90% +5%
/home/runner/wo...ionMapReader.cs 82% 91% +9%
/home/runner/wo...ectFieldNode.cs 0% 64% +64%
/home/runner/wo...oatValueNode.cs 0% 69% +69%
/home/runner/wo...ArgumentNode.cs 0% 73% +73%
/home/runner/wo...istValueNode.cs 0% 73% +73%
/home/runner/wo...ectValueNode.cs 0% 73% +73%
/home/runner/wo...ingValueNode.cs 0% 81% +81%
/home/runner/wo...numValueNode.cs 0% 81% +81%
/home/runner/wo...gValueHelper.cs 0% 93% +93%

Updated June 19, 2026 21:47 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants