From 4fe654cf9a4910f67da6696773f3edc41f25755d Mon Sep 17 00:00:00 2001
From: notoria <notoria@users.noreply.github.com>
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 fd161776..2d2eb4a9 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<usize> {
         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