From 4b8d551b0d3700b69e279af7cd3f06ca5e115455 Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Mon, 27 Apr 2026 13:39:23 +0200 Subject: [PATCH] refactor(git): extract util.split_lines helper --- lua/git/cmd.lua | 19 ++++++++----------- lua/git/diff.lua | 11 ++--------- lua/git/log_win.lua | 10 ++-------- lua/git/show.lua | 7 ++----- lua/util.lua | 13 +++++++++++++ 5 files changed, 27 insertions(+), 33 deletions(-) diff --git a/lua/git/cmd.lua b/lua/git/cmd.lua index 8ce6f65..8bc79fd 100644 --- a/lua/git/cmd.lua +++ b/lua/git/cmd.lua @@ -1,5 +1,6 @@ local log = require("log") local repo = require("git.repo") +local util = require("util") local M = {} @@ -58,16 +59,6 @@ local function git_cmds() return cached_cmds or {} end ----@param content string ----@return string[] -local function split_lines(content) - local lines = vim.split(content, "\n", { plain = true, trimempty = false }) - if #lines > 0 and lines[#lines] == "" then - table.remove(lines) - end - return lines -end - ---@param args string[] ---@param start integer ---@return string? @@ -116,7 +107,13 @@ local function run_in_split(worktree, args, conf) end local content = (obj.stdout or "") .. (obj.stderr or "") vim.bo[buf].modifiable = true - vim.api.nvim_buf_set_lines(buf, 0, -1, false, split_lines(content)) + vim.api.nvim_buf_set_lines( + buf, + 0, + -1, + false, + util.split_lines(content) + ) vim.bo[buf].modifiable = false vim.bo[buf].modified = false if obj.code ~= 0 then diff --git a/lua/git/diff.lua b/lua/git/diff.lua index a8170cf..e9e14b3 100644 --- a/lua/git/diff.lua +++ b/lua/git/diff.lua @@ -1,5 +1,6 @@ local log = require("log") local repo = require("git.repo") +local util = require("util") local M = {} @@ -70,15 +71,7 @@ local function read_show(worktree, revspec) ) return {} end - local lines = vim.split( - result.stdout or "", - "\n", - { plain = true, trimempty = false } - ) - if #lines > 0 and lines[#lines] == "" then - table.remove(lines) - end - return lines + return util.split_lines(result.stdout or "") end ---@param worktree string diff --git a/lua/git/log_win.lua b/lua/git/log_win.lua index 1feb0c8..176c279 100644 --- a/lua/git/log_win.lua +++ b/lua/git/log_win.lua @@ -1,5 +1,6 @@ local log = require("log") local repo = require("git.repo") +local util = require("util") local M = {} @@ -30,14 +31,7 @@ function M.show() return end - local lines = vim.split( - result.stdout or "", - "\n", - { plain = true, trimempty = false } - ) - if #lines > 0 and lines[#lines] == "" then - table.remove(lines) - end + local lines = util.split_lines(result.stdout or "") vim.cmd("new") local buf = vim.api.nvim_get_current_buf() diff --git a/lua/git/show.lua b/lua/git/show.lua index f0e2cb5..6632222 100644 --- a/lua/git/show.lua +++ b/lua/git/show.lua @@ -1,6 +1,7 @@ local diff = require("git.diff") local log = require("log") local repo = require("git.repo") +local util = require("util") local M = {} @@ -153,11 +154,7 @@ function M.open_commit(worktree, ref) log.error("git show %s failed: %s", ref, result.stderr or "") return end - local content = result.stdout or "" - local lines = vim.split(content, "\n", { plain = true, trimempty = false }) - if #lines > 0 and lines[#lines] == "" then - table.remove(lines) - end + local lines = util.split_lines(result.stdout or "") local sha = repo.rev_parse(worktree, ref, true) or ref local parent = repo.rev_parse(worktree, ref .. "^", true) local buf = vim.api.nvim_create_buf(false, true) diff --git a/lua/util.lua b/lua/util.lua index e786a69..39c3425 100644 --- a/lua/util.lua +++ b/lua/util.lua @@ -428,4 +428,17 @@ function M.get_hl_source(name) return hl end +---Split a string on newlines, dropping the trailing empty element that an +---input ending in `\n` produces. Convenient for slicing subprocess stdout +---into a list of lines without a phantom blank at the end. +---@param content string +---@return string[] +function M.split_lines(content) + local lines = vim.split(content, "\n", { plain = true, trimempty = false }) + if #lines > 0 and lines[#lines] == "" then + table.remove(lines) + end + return lines +end + return M