diff --git a/CHANGELOG.md b/CHANGELOG.md index 330ab6e1..42385fed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # [4.0.15] 2022-10-01 - Skip tracing for introspection queries. [#841](https://github.com/async-graphql/async-graphql/issues/841) +- Add `SchemaBuilder::enable_suggestions` method to enable or disable field suggestions. [#1101](https://github.com/async-graphql/async-graphql/issues/1101) # [4.0.14] 2022-09-25 diff --git a/src/registry/mod.rs b/src/registry/mod.rs index 6275a621..19baa828 100644 --- a/src/registry/mod.rs +++ b/src/registry/mod.rs @@ -601,6 +601,7 @@ pub struct Registry { pub enable_federation: bool, pub federation_subscription: bool, pub ignore_name_conflicts: HashSet, + pub enable_suggestions: bool, } impl Registry { diff --git a/src/schema.rs b/src/schema.rs index 83c2bf20..7bcaad45 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -219,6 +219,13 @@ impl SchemaBuilder self } + /// Enable field suggestions, default is `true`. + #[must_use] + pub fn enable_suggestions(mut self, enable: bool) -> Self { + self.registry.enable_suggestions = enable; + self + } + /// Build schema. pub fn finish(mut self) -> Schema { // federation @@ -381,6 +388,7 @@ where enable_federation: false, federation_subscription: false, ignore_name_conflicts, + enable_suggestions: true, }; registry.add_directive(MetaDirective { diff --git a/src/validation/rules/fields_on_correct_type.rs b/src/validation/rules/fields_on_correct_type.rs index 6fec2e26..7b858793 100644 --- a/src/validation/rules/fields_on_correct_type.rs +++ b/src/validation/rules/fields_on_correct_type.rs @@ -38,17 +38,21 @@ impl<'a> Visitor<'a> for FieldsOnCorrectType { "Unknown field \"{}\" on type \"{}\".{}", field.node.name, parent_type.name(), - make_suggestion( - " Did you mean", - parent_type - .fields() - .iter() - .map(|fields| fields.keys()) - .flatten() - .map(String::as_str), - &field.node.name.node, - ) - .unwrap_or_default() + if ctx.registry.enable_suggestions { + make_suggestion( + " Did you mean", + parent_type + .fields() + .iter() + .map(|fields| fields.keys()) + .flatten() + .map(String::as_str), + &field.node.name.node, + ) + .unwrap_or_default() + } else { + String::new() + } ), ); } diff --git a/src/validation/rules/known_argument_names.rs b/src/validation/rules/known_argument_names.rs index 81e98de3..0cddd834 100644 --- a/src/validation/rules/known_argument_names.rs +++ b/src/validation/rules/known_argument_names.rs @@ -79,7 +79,11 @@ impl<'a> Visitor<'a> for KnownArgumentNames<'a> { name, field_name, type_name, - self.get_suggestion(name.node.as_str()) + if ctx.registry.enable_suggestions { + self.get_suggestion(name.node.as_str()) + } else { + String::new() + } ), ); }