forked from STI/Astroport.ONE
26 lines
794 B
Python
26 lines
794 B
Python
|
from typing import Any
|
||
|
|
||
|
from ...error import GraphQLError
|
||
|
from ...language import FragmentSpreadNode
|
||
|
from . import ValidationRule
|
||
|
|
||
|
__all__ = ["KnownFragmentNamesRule"]
|
||
|
|
||
|
|
||
|
class KnownFragmentNamesRule(ValidationRule):
|
||
|
"""Known fragment names
|
||
|
|
||
|
A GraphQL document is only valid if all ``...Fragment`` fragment spreads refer to
|
||
|
fragments defined in the same document.
|
||
|
|
||
|
See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined
|
||
|
"""
|
||
|
|
||
|
def enter_fragment_spread(self, node: FragmentSpreadNode, *_args: Any) -> None:
|
||
|
fragment_name = node.name.value
|
||
|
fragment = self.context.get_fragment(fragment_name)
|
||
|
if not fragment:
|
||
|
self.report_error(
|
||
|
GraphQLError(f"Unknown fragment '{fragment_name}'.", node.name)
|
||
|
)
|