Skip to content

Commit

Permalink
Print fragment variables
Browse files Browse the repository at this point in the history
Reviewed By: mjmahone

Differential Revision: D35746920

fbshipit-source-id: 2f4573c2afa1bfa3536572e7dd4ce6f47fae4664
  • Loading branch information
Steven Chaitoff authored and facebook-github-bot committed Apr 22, 2022
1 parent d84cc39 commit c6ecd52
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 11 deletions.
20 changes: 12 additions & 8 deletions compiler/crates/graphql-text-printer/src/print_to_text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
* LICENSE file in the root directory of this source tree.
*/

use common::{Named, WithLocation};
use common::{Named, NamedItem, WithLocation};
use graphql_ir::{
Argument, Condition, ConditionValue, ConstantValue, Directive, ExecutableDefinition,
FragmentDefinition, FragmentSpread, InlineFragment, LinkedField, OperationDefinition,
ScalarField, Selection, Value, VariableDefinition,
};
use graphql_syntax::OperationKind;
use intern::string_key::StringKey;
use intern::string_key::{Intern, StringKey};
use schema::{SDLSchema, Schema};
use std::fmt::{Result as FmtResult, Write};

Expand Down Expand Up @@ -187,12 +187,16 @@ impl<'schema, 'writer, W: Write> Printer<'schema, 'writer, W> {
fn print_fragment(mut self, fragment: &FragmentDefinition) -> FmtResult {
let fragment_name = fragment.name.item;
let type_condition_name = self.schema.get_type_name(fragment.type_condition);
write!(
self.writer,
"fragment {} on {}",
fragment_name, type_condition_name
)
.unwrap();
write!(self.writer, "fragment {}", fragment_name)?;
if fragment
.directives
.named("argumentDefinitions".intern())
.is_none()
{
self.print_variable_definitions(&fragment.variable_definitions)?;
}
write!(self.writer, " on {}", type_condition_name)?;

self.print_directives(
&fragment.directives,
None,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
==================================== INPUT ====================================
fragment MyFragment($some_arg: String, $another_arg: [Int]!) on Query {
my_alias: node(id: $id) {
id
... on User {
name
likers(first: $count) {
count
}
}
}
}
==================================== OUTPUT ===================================
fragment MyFragment(
$some_arg: String
$another_arg: [Int]!
) on Query {
my_alias: node(id: $id) {
id
... on User {
name
likers(first: $count) {
count
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
fragment MyFragment($some_arg: String, $another_arg: [Int]!) on Query {
my_alias: node(id: $id) {
id
... on User {
name
likers(first: $count) {
count
}
}
}
}
11 changes: 9 additions & 2 deletions compiler/crates/graphql-text-printer/tests/print/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@
use common::SourceLocationKey;
use fixture_tests::Fixture;
use graphql_ir::build;
use graphql_syntax::parse_executable;
use graphql_syntax::{parse_executable_with_features, ParserFeatures};
use graphql_text_printer::print_ir;
use relay_test_schema::TEST_SCHEMA;

pub fn transform_fixture(fixture: &Fixture<'_>) -> Result<String, String> {
let source_location = SourceLocationKey::standalone(fixture.file_name);
let ast = parse_executable(fixture.content, source_location).unwrap();
let ast = parse_executable_with_features(
fixture.content,
source_location,
ParserFeatures {
enable_variable_definitions: true,
},
)
.unwrap();
build(&TEST_SCHEMA, &ast.definitions)
.map(|definitions| print_ir(&TEST_SCHEMA, &definitions).join("\n\n"))
.map_err(|errors| {
Expand Down
9 changes: 8 additions & 1 deletion compiler/crates/graphql-text-printer/tests/print_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<ed4f0587f716a12c400a0159b1a5b99c>>
* @generated SignedSource<<d33bba31770d0dda6327e188acc496a6>>
*/

mod print;
Expand Down Expand Up @@ -75,6 +75,13 @@ fn empty_args() {
test_fixture(transform_fixture, "empty_args.graphql", "print/fixtures/empty_args.expected", input, expected);
}

#[test]
fn fragment_variables() {
let input = include_str!("print/fixtures/fragment_variables.graphql");
let expected = include_str!("print/fixtures/fragment_variables.expected");
test_fixture(transform_fixture, "fragment_variables.graphql", "print/fixtures/fragment_variables.expected", input, expected);
}

#[test]
fn kitchen_sink() {
let input = include_str!("print/fixtures/kitchen-sink.graphql");
Expand Down

0 comments on commit c6ecd52

Please sign in to comment.