diff --git a/crates/apollo-parser/src/parser/grammar/operation.rs b/crates/apollo-parser/src/parser/grammar/operation.rs index 561c350d9..f333da7b1 100644 --- a/crates/apollo-parser/src/parser/grammar/operation.rs +++ b/crates/apollo-parser/src/parser/grammar/operation.rs @@ -60,8 +60,9 @@ pub(crate) fn operation_definition(p: &mut Parser) { directive::directives(p); } - if let Some(T!['{']) = p.peek() { - selection::top_selection_set(p) + match p.peek() { + Some(T!['{']) => selection::top_selection_set(p), + _ => p.err_and_pop("expected a Selection Set"), } } Some(T!['{']) => { diff --git a/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.graphql b/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.graphql new file mode 100644 index 000000000..f72e8970a --- /dev/null +++ b/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.graphql @@ -0,0 +1 @@ +query __typename } \ No newline at end of file diff --git a/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.txt b/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.txt new file mode 100644 index 000000000..0a25e6d7f --- /dev/null +++ b/crates/apollo-parser/test_data/parser/err/0040_operation_definition_missing_selection_set.txt @@ -0,0 +1,10 @@ +- DOCUMENT@0..17 + - OPERATION_DEFINITION@0..17 + - OPERATION_TYPE@0..6 + - query_KW@0..5 "query" + - WHITESPACE@5..6 " " + - NAME@6..17 + - IDENT@6..16 "__typename" + - WHITESPACE@16..17 " " +- ERROR@17:18 "expected a Selection Set" } +recursion limit: 4096, high: 0 \ No newline at end of file diff --git a/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.graphql b/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.graphql new file mode 100644 index 000000000..d1f42f3a5 --- /dev/null +++ b/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.graphql @@ -0,0 +1 @@ +query __typename \ No newline at end of file diff --git a/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.txt b/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.txt new file mode 100644 index 000000000..4f6eee02d --- /dev/null +++ b/crates/apollo-parser/test_data/parser/err/0041_operation_definition_with_missing_selection_set.txt @@ -0,0 +1,9 @@ +- DOCUMENT@0..16 + - OPERATION_DEFINITION@0..16 + - OPERATION_TYPE@0..6 + - query_KW@0..5 "query" + - WHITESPACE@5..6 " " + - NAME@6..16 + - IDENT@6..16 "__typename" +- ERROR@16:16 "expected a Selection Set" EOF +recursion limit: 4096, high: 0 \ No newline at end of file