From 1de02a147c1738015aa26dea7c8fd313f3741d8e Mon Sep 17 00:00:00 2001
From: A-Walrus <ofek.r.guy@gmail.com>
Date: Tue, 11 Oct 2022 11:37:57 +0300
Subject: [PATCH] Only draw indent guides within bounds

Better performance, and otherwise very long lines with lots of tabs
will wrap around the u16 and come back on the other side, messing up
the beginning skip_levels.
---
 helix-term/src/ui/editor.rs | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index e05136d0..4074534b 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -467,16 +467,14 @@ impl EditorView {
 
             let starting_indent =
                 (offset.col / tab_width) + config.indent_guides.skip_levels as usize;
-            // TODO: limit to a max indent level too. It doesn't cause visual artifacts but it would avoid some
-            // extra loops if the code is deeply nested.
 
             for i in starting_indent..(indent_level / tab_width) {
-                surface.set_string(
-                    (viewport.x as usize + (i * tab_width) - offset.col) as u16,
-                    viewport.y + line,
-                    &indent_guide_char,
-                    indent_guide_style,
-                );
+                let x = (viewport.x as usize + (i * tab_width) - offset.col) as u16;
+                let y = viewport.y + line;
+                if !surface.in_bounds(x, y) {
+                    break;
+                }
+                surface.set_string(x, y, &indent_guide_char, indent_guide_style);
             }
         };