diff --git a/internal/validation/testdata/tests.json b/internal/validation/testdata/tests.json index 46df80d3..4687e8d1 100644 --- a/internal/validation/testdata/tests.json +++ b/internal/validation/testdata/tests.json @@ -1464,6 +1464,13 @@ "query": "\n query Foo($a: String, $b: String, $c: String) {\n ... on Type {\n field(a: $a) {\n field(b: $b) {\n ... on Type {\n field(c: $c)\n }\n }\n }\n }\n }\n ", "errors": [] }, + { + "name": "Validate: fragments are used even when they are nested", + "rule": "NoUnusedFragments", + "schema": 1, + "query": "\n query Foo() {\n ...StringFragment\n stringBox {\n ...StringFragment\n ...StringFragmentPrime\n}\n}\n\n\n fragment StringFragment on StringBox {\n scalar\n}\n\n fragment StringFragmentPrime on StringBox {\n unrelatedField\n}\n", + "errors": [] + }, { "name": "Validate: No unused variables/uses all variables in fragments", "rule": "NoUnusedVariables", @@ -3853,4 +3860,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/internal/validation/validation.go b/internal/validation/validation.go index 94a9faf8..c8be7354 100644 --- a/internal/validation/validation.go +++ b/internal/validation/validation.go @@ -418,8 +418,9 @@ func markUsedFragments(c *context, sels []query.Selection, fragUsed map[*query.F } if _, ok := fragUsed[frag]; ok { - return + continue } + fragUsed[frag] = struct{}{} markUsedFragments(c, frag.Selections, fragUsed)