fix(object): fix edge case (#69)
This commit is contained in:
parent
babae8dbe8
commit
ba1776808d
1 changed files with 11 additions and 6 deletions
|
|
@ -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<<");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue