Skip to content

Commit 75f7c7b

Browse files
committed
feat: impl Iterator for errors
fixes #139 ast.errors() now return an `Iter<'_, Error>` which allows us to iterate, but also check for the `len()`. It should allow us to use `is_empty()` as well eventually, if / when rust-lang/rust#35428 lands.
1 parent fcbf490 commit 75f7c7b

File tree

13 files changed

+33
-31
lines changed

13 files changed

+33
-31
lines changed

crates/apollo-parser/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ fn main() {
6262
let parser = Parser::new(input);
6363
let ast = parser.parse();
6464

65-
// ast.errors() returns an errors slice encountered during lexing and parsing
66-
assert!(ast.errors().is_empty());
65+
// ast.errors() returns an iterator with the errors encountered during lexing and parsing
66+
assert_eq!(0, ast.errors().len());
6767

6868
// ast.document() get the Document, or root node, of the tree that you can
6969
// start iterating on.
@@ -97,7 +97,7 @@ fn main() {
9797
";
9898
let parser = Parser::new(input);
9999
let ast = parser.parse();
100-
assert!(ast.errors().is_empty());
100+
assert_eq!(0, ast.errors().len());
101101

102102
let doc = ast.document();
103103

@@ -130,7 +130,7 @@ fn main() {
130130

131131
let parser = Parser::new(input);
132132
let ast = parser.parse();
133-
assert!(&ast.errors().is_empty());
133+
assert_eq!(0, ast.errors().len());
134134

135135
let doc = ast.document();
136136

crates/apollo-parser/examples/unused_vars.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn are_variables_unused() {
1111
let parser = Parser::new(&src);
1212
let ast = parser.parse();
1313

14-
assert!(&ast.errors().is_empty());
14+
assert_eq!(0, ast.errors().len());
1515

1616
let doc = ast.document();
1717

crates/apollo-parser/src/ast/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
//! let parser = Parser::new(schema);
4343
//! let ast = parser.parse();
4444
//!
45-
//! assert!(ast.errors().is_empty());
45+
//! assert_eq!(0, ast.errors().len());
4646
//! let document = ast.document();
4747
//! for definition in document.definitions() {
4848
//! match definition {

crates/apollo-parser/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use std::fmt;
1616
/// let parser = Parser::new(input);
1717
/// let ast = parser.parse();
1818
///
19-
/// assert!(ast.errors().is_empty());
19+
/// assert_eq!(0, ast.errors().len());
2020
///
2121
/// let doc = ast.document();
2222
/// ```

crates/apollo-parser/src/lexer/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ mod cursor;
22
mod token;
33
mod token_kind;
44

5+
use std::slice::Iter;
6+
57
use crate::{lexer::cursor::Cursor, Error};
68

79
pub use token::Token;
@@ -59,8 +61,8 @@ impl Lexer {
5961
}
6062

6163
/// Get a reference to the lexer's tokens.
62-
pub(crate) fn errors(&self) -> &[Error] {
63-
self.errors.as_slice()
64+
pub(crate) fn errors<'e>(&'e self) -> Iter<'_, Error> {
65+
self.errors.iter()
6466
}
6567
}
6668

crates/apollo-parser/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
//! let ast = parser.parse();
6363
//!
6464
//! // ast.errors() returns an errors slice encountered during lexing and parsing
65-
//! assert!(ast.errors().is_empty());
65+
//! assert_eq!(0, ast.errors().len());
6666
//!
6767
//! // ast.document() get the Document, or root node, of the tree that you can
6868
//! // start iterating on.
@@ -94,7 +94,7 @@
9494
//! ";
9595
//! let parser = Parser::new(input);
9696
//! let ast = parser.parse();
97-
//! assert!(ast.errors().is_empty());
97+
//! assert_eq!(0, ast.errors().len());
9898
//!
9999
//! let doc = ast.document();
100100
//!
@@ -125,7 +125,7 @@
125125
//!
126126
//! let parser = Parser::new(input);
127127
//! let ast = parser.parse();
128-
//! assert!(&ast.errors().is_empty());
128+
//! assert_eq!(0, ast.errors().len());
129129
//!
130130
//! let doc = ast.document();
131131
//!

crates/apollo-parser/src/parser/grammar/object.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ type Business implements NamedEntity & ValuedEntity & CatEntity {
131131
}";
132132
let parser = Parser::new(input);
133133
let ast = parser.parse();
134-
assert!(ast.errors().is_empty());
134+
assert_eq!(0, ast.errors().len());
135135

136136
let doc = ast.document();
137137

crates/apollo-parser/src/parser/grammar/selection.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ mod test {
6868
";
6969
let parser = Parser::new(input);
7070
let ast = parser.parse();
71-
assert!(&ast.errors().is_empty());
71+
assert_eq!(0, ast.errors().len());
7272

7373
let doc = ast.document();
7474

@@ -129,7 +129,7 @@ query GraphQuery($graph_id: ID!, $variant: String) {
129129
";
130130
let parser = Parser::new(input);
131131
let ast = parser.parse();
132-
assert!(&ast.errors().is_empty());
132+
assert_eq!(0, ast.errors().len());
133133

134134
let doc = ast.document();
135135

crates/apollo-parser/src/parser/grammar/union_.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ mod test {
112112
let input = "union SearchResult = Photo | Person | Cat | Dog";
113113
let parser = Parser::new(input);
114114
let ast = parser.parse();
115-
assert!(ast.errors().is_empty());
115+
assert_eq!(0, ast.errors().len());
116116

117117
let doc = ast.document();
118118

crates/apollo-parser/src/parser/grammar/value.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ query GraphQuery($graph_id: ID!, $variant: String) {
270270
";
271271
let parser = Parser::new(input);
272272
let ast = parser.parse();
273-
assert!(&ast.errors().is_empty());
273+
assert_eq!(0, ast.errors().len());
274274

275275
let doc = ast.document();
276276

0 commit comments

Comments
 (0)