From 35fea8837e6caa2d44af5a61dec55f74ecee97de Mon Sep 17 00:00:00 2001 From: Curtis Li Date: Mon, 27 Mar 2023 07:54:43 -0700 Subject: [PATCH] Add parent node information when providing error about printing empty selections Reviewed By: josephsavona Differential Revision: D44369237 fbshipit-source-id: 81e5732c765043b71b080ef65e40f765df14c632 --- .../graphql-text-printer/src/print_to_text.rs | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/compiler/crates/graphql-text-printer/src/print_to_text.rs b/compiler/crates/graphql-text-printer/src/print_to_text.rs index 931a158b61b1f..dd7b2c4bdba0b 100644 --- a/compiler/crates/graphql-text-printer/src/print_to_text.rs +++ b/compiler/crates/graphql-text-printer/src/print_to_text.rs @@ -143,7 +143,7 @@ pub fn write_selections( mut result: &mut impl Write, ) -> FmtResult { let mut printer = Printer::new(schema, &mut result, PrinterOptions::default()); - printer.print_selections(selections) + printer.print_selections(selections, "unknown".intern()) } pub fn write_selection( @@ -222,7 +222,7 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> { write!(self.writer, "{} {}", operation.kind, operation.name.item)?; self.print_variable_definitions(&operation.variable_definitions)?; self.print_directives(&operation.directives, None, None)?; - self.print_selections(&operation.selections) + self.print_selections(&operation.selections, operation.name.item.0) } fn print_fragment(mut self, fragment: &FragmentDefinition) -> FmtResult { @@ -243,10 +243,10 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> { None, Some(&fragment.variable_definitions), )?; - self.print_selections(&fragment.selections) + self.print_selections(&fragment.selections, fragment_name.0) } - fn print_selections(&mut self, selections: &[Selection]) -> FmtResult { + fn print_selections(&mut self, selections: &[Selection], name: StringKey) -> FmtResult { let len = selections.len(); if len > 0 { self.print_optional_space()?; @@ -266,7 +266,8 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> { write!(self.writer, "}}")?; } else { panic!( - "Cannot print empty selections. Please, check transforms that may produce invalid selections." + "Cannot print empty selections for {}. Please, check transforms that may produce invalid selections.", + name ); } Ok(()) @@ -306,7 +307,7 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> { self.print_alias_and_name(&field.alias, schema_field.name.item)?; self.print_arguments(&field.arguments)?; self.print_directives(&field.directives, conditions, None)?; - self.print_selections(&field.selections)?; + self.print_selections(&field.selections, schema_field.name.item)?; Ok(()) } @@ -342,7 +343,17 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> { )?; }; self.print_directives(&field.directives, conditions, None)?; - self.print_selections(&field.selections) + + let name = if let Some(type_condition) = field.type_condition { + format!( + "... on {}", + self.schema.get_type_name(type_condition).lookup() + ) + .intern() + } else { + "...".intern() + }; + self.print_selections(&field.selections, name) } fn print_condition(