in compiler/crates/graphql-ir/src/transform.rs [213:232]
fn default_transform_linked_field(&mut self, field: &LinkedField) -> Transformed<Selection> {
// Special-case for empty selections
let selections = self.transform_selections(&field.selections);
if let TransformedValue::Replace(selections) = &selections {
if !Self::RETAIN_EMPTY_SELECTION_SETS && selections.is_empty() {
return Transformed::Delete;
}
}
let arguments = self.transform_arguments(&field.arguments);
let directives = self.transform_directives(&field.directives);
if selections.should_keep() && arguments.should_keep() && directives.should_keep() {
return Transformed::Keep;
}
Transformed::Replace(Selection::LinkedField(Arc::new(LinkedField {
arguments: arguments.replace_or_else(|| field.arguments.clone()),
directives: directives.replace_or_else(|| field.directives.clone()),
selections: selections.replace_or_else(|| field.selections.clone()),
..field.clone()
})))
}