From 39052433edd4dcbd3a9714e6e3036cbd46ebc959 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stanis=C5=82aw=20Borowy?= <stabor7@protonmail.com>
Date: Sun, 12 Mar 2023 18:12:06 +0100
Subject: [PATCH] Fix indentation level calculation for lines mixing tabs and
 spaces (#6278)

---
 helix-core/src/indent.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/helix-core/src/indent.rs b/helix-core/src/indent.rs
index 950a7f65..db780ed9 100644
--- a/helix-core/src/indent.rs
+++ b/helix-core/src/indent.rs
@@ -4,6 +4,7 @@ use tree_sitter::{Query, QueryCursor, QueryPredicateArg};
 
 use crate::{
     chars::{char_is_line_ending, char_is_whitespace},
+    graphemes::tab_width_at,
     syntax::{LanguageConfiguration, RopeProvider, Syntax},
     tree_sitter::Node,
     Rope, RopeSlice,
@@ -189,7 +190,7 @@ pub fn indent_level_for_line(line: RopeSlice, tab_width: usize, indent_width: us
     let mut len = 0;
     for ch in line.chars() {
         match ch {
-            '\t' => len += tab_width,
+            '\t' => len += tab_width_at(len, tab_width as u16),
             ' ' => len += 1,
             _ => break,
         }