feat: add indent_mode detection (auto mode)

This commit is contained in:
CJ van den Berg 2025-07-30 19:16:27 +02:00
parent 9774b513d4
commit a74c0ecf46
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -594,8 +594,7 @@ pub const Editor = struct {
self.logger.print("syntax highlighting disabled", .{});
self.syntax_no_render = true;
}
self.syntax = syntax: {
const lang_override = file_type orelse tp.env.get().str("language");
var content = std.ArrayListUnmanaged(u8).empty;
defer content.deinit(std.heap.c_allocator);
{
@ -603,6 +602,11 @@ pub const Editor = struct {
defer frame_.deinit();
try new_buf.root.store(content.writer(std.heap.c_allocator), new_buf.file_eol_mode);
}
if (self.indent_mode == .auto)
self.detect_indent_mode(content.items);
self.syntax = syntax: {
const lang_override = file_type orelse tp.env.get().str("language");
self.file_type = blk: {
const frame_ = tracy.initZone(@src(), .{ .name = "guess" });
@ -674,6 +678,19 @@ pub const Editor = struct {
self.enable_auto_save = true;
}
fn detect_indent_mode(self: *Self, content: []const u8) void {
var it = std.mem.splitScalar(u8, content, '\n');
while (it.next()) |line| {
if (line.len == 0) continue;
if (line[0] == '\t') {
self.indent_mode = .tabs;
return;
}
}
self.indent_mode = .spaces;
return;
}
fn close(self: *Self) !void {
var meta = std.ArrayListUnmanaged(u8).empty;
defer meta.deinit(self.allocator);