on master help sign in
Ensure non empty grouped nodes in textobject queries
e83cdf3Gokul Soumya
helix-core/src/syntax.rs+7−1
@@ -246,6 +246,7 @@ pub struct TextObjectQuery {
246
246
247pub enum CapturedNode<'a> {
247pub enum CapturedNode<'a> {
248 Single(Node<'a>),
248 Single(Node<'a>),
249+ /// Guarenteed to be not empty
249 Grouped(Vec<Node<'a>>),
250 Grouped(Vec<Node<'a>>),
250}
251}
251
252
@@ -318,7 +319,12 @@ impl TextObjectQuery {
318
319
319 let iter: Box<dyn Iterator<Item = CapturedNode>> = match quantifier {
320 let iter: Box<dyn Iterator<Item = CapturedNode>> = match quantifier {
320 CaptureQuantifier::OneOrMore | CaptureQuantifier::ZeroOrMore => {
321 CaptureQuantifier::OneOrMore | CaptureQuantifier::ZeroOrMore => {
322+ let nodes: Vec<Node> = nodes.collect();
323+ if nodes.is_empty() {
324+ Box::new(std::iter::empty())
325+ } else {
321− Box::new(std::iter::once(CapturedNode::Grouped(nodes.collect())))
326+ Box::new(std::iter::once(CapturedNode::Grouped(nodes)))
327+ }
322 }
328 }
323 _ => Box::new(nodes.map(CapturedNode::Single)),
329 _ => Box::new(nodes.map(CapturedNode::Single)),
324 };
330 };