From 4fe654cf9a4910f67da6696773f3edc41f25755d Mon Sep 17 00:00:00 2001 From: notoria Date: Thu, 3 Jun 2021 10:35:17 +0200 Subject: [PATCH] Fix match_brackets::find --- helix-core/src/match_brackets.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/helix-core/src/match_brackets.rs b/helix-core/src/match_brackets.rs index fd1617768..2d2eb4a90 100644 --- a/helix-core/src/match_brackets.rs +++ b/helix-core/src/match_brackets.rs @@ -1,6 +1,6 @@ use crate::{Range, Rope, Selection, Syntax}; -// const PAIRS: &[(char, char)] = &[('(', ')'), ('{', '}'), ('[', ']')]; +const PAIRS: &[(char, char)] = &[('(', ')'), ('{', '}'), ('[', ']'), ('<', '>')]; // limit matching pairs to only ( ) { } [ ] < > #[must_use] @@ -20,15 +20,21 @@ pub fn find(syntax: &Syntax, doc: &Rope, pos: usize) -> Option { None => return None, }; + if node.is_error() { + return None; + } + let start_byte = node.start_byte(); let end_byte = node.end_byte() - 1; // it's end exclusive - if start_byte == byte_pos { - return Some(doc.byte_to_char(end_byte)); - } + if PAIRS.contains(&(doc.char(start_byte), doc.char(end_byte))) { + if start_byte == byte_pos { + return Some(doc.byte_to_char(end_byte)); + } - if end_byte == byte_pos { - return Some(doc.byte_to_char(start_byte)); + if end_byte == byte_pos { + return Some(doc.byte_to_char(start_byte)); + } } None