pub struct ParserError {
pub pos: Range<usize>,
pub slice: Option<Range<usize>>,
pub kind: ErrorKind,
}
Expand description
Error containing information about an error encountered by the Fluent Parser.
Errors in Fluent Parser are non-fatal, and the syntax has been designed to allow for strong recovery.
In result ParserError
is designed to point at the slice of
the input that is most likely to be a complete fragment from after
the end of a valid entry, to the start of the next valid entry, with
the invalid syntax in the middle.
§Example
use fluent_syntax::parser;
use fluent_syntax::ast;
let ftl = r#"
key1 = Value 1
g@Rb@ge = #2y ds
key2 = Value 2
"#;
let (resource, errors) = parser::parse_runtime(ftl)
.expect_err("Resource should contain errors.");
assert_eq!(
errors,
vec![
parser::ParserError {
pos: 18..19,
slice: Some(17..35),
kind: parser::ErrorKind::ExpectedToken('=')
}
]
);
assert_eq!(
resource.body[0],
ast::Entry::Message(
ast::Message {
id: ast::Identifier {
name: "key1"
},
value: Some(ast::Pattern {
elements: vec![
ast::PatternElement::TextElement {
value: "Value 1"
},
]
}),
attributes: vec![],
comment: None,
}
),
);
assert_eq!(
resource.body[1],
ast::Entry::Junk {
content: "g@Rb@ge = #2y ds\n\n"
}
);
assert_eq!(
resource.body[2],
ast::Entry::Message(
ast::Message {
id: ast::Identifier {
name: "key2"
},
value: Some(ast::Pattern {
elements: vec![
ast::PatternElement::TextElement {
value: "Value 2"
},
]
}),
attributes: vec![],
comment: None,
}
),
);
The information contained in the ParserError
should allow the tooling
to display rich contextual annotations of the error slice, using
crates such as annotate-snippers
.
Fields§
§pos: Range<usize>
Precise location of where the parser encountered the error.
slice: Option<Range<usize>>
Slice of the input from the end of the last valid entry to the beginning of the next valid entry with the invalid syntax in the middle.
kind: ErrorKind
The type of the error that the parser encountered.
Trait Implementations§
Source§impl Clone for ParserError
impl Clone for ParserError
Source§fn clone(&self) -> ParserError
fn clone(&self) -> ParserError
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more