fix(object): fix edge case (#69)

This commit is contained in:
PoiScript 2023-11-17 18:08:47 +08:00
parent babae8dbe8
commit ba1776808d
No known key found for this signature in database
GPG key ID: 22C2B1249D99985E

View file

@ -38,7 +38,7 @@ impl<'a> Iterator for ObjectPositions<'a> {
type Item = (Input<'a>, Input<'a>);
fn next(&mut self) -> Option<Self::Item> {
if self.input.input_len() < 3 {
if self.input.input_len() < 3 || self.pos >= self.input.input_len() {
return None;
}
@ -46,10 +46,6 @@ impl<'a> Iterator for ObjectPositions<'a> {
return Some(self.input.take_split(p));
}
if self.pos >= self.input.input_len() {
return None;
}
let bytes = &self.input.as_bytes()[self.pos..];
let previous = self.pos;
let i = self.finder.find(bytes)?;
@ -57,7 +53,9 @@ impl<'a> Iterator for ObjectPositions<'a> {
let p = match bytes[i] {
b'{' => {
self.next = Some(self.pos);
if self.input.s.len() - self.pos > 3 {
self.next = Some(self.pos);
}
self.pos - 1
}
b' ' | b'(' | b'\'' | b'"' | b'\n' => self.pos,
@ -155,6 +153,13 @@ fn positions() {
let vec = ObjectPositions::new(("*{", &config).into()).collect::<Vec<_>>();
assert!(vec.is_empty());
// https://github.com/PoiScript/orgize/issues/69
let vec = ObjectPositions::new(("{3}", &config).into()).collect::<Vec<_>>();
assert_eq!(vec.len(), 2);
assert_eq!(vec[0].0.s, "{3}");
// FIXME:
assert_eq!(vec[1].0.s, "{3}");
let vec = ObjectPositions::new(("*{()}//s\nc<<", &config).into()).collect::<Vec<_>>();
assert_eq!(vec.len(), 5);
assert_eq!(vec[0].0.s, "*{()}//s\nc<<");