diff --git a/lua/fude/preview.lua b/lua/fude/preview.lua index 848dd4e..29c7296 100644 --- a/lua/fude/preview.lua +++ b/lua/fude/preview.lua @@ -38,6 +38,9 @@ function M.open_preview(source_win) end local preview_buf = vim.api.nvim_create_buf(false, true) + if content:sub(-1) == "\n" then + content = content:sub(1, -2) + end local lines = vim.split(content, "\n", { trimempty = false }) vim.api.nvim_buf_set_lines(preview_buf, 0, -1, false, lines) diff --git a/tests/fude/preview_integration_spec.lua b/tests/fude/preview_integration_spec.lua index 4fbaa82..99c2ad1 100644 --- a/tests/fude/preview_integration_spec.lua +++ b/tests/fude/preview_integration_spec.lua @@ -6,7 +6,7 @@ describe("preview integration", function() before_each(function() config.setup({}) helpers.mock_diff({ ["source.lua"] = "source.lua" }) - helpers.mock_base_content("base line 1\nbase line 2\nbase line 3") + helpers.mock_base_content("base line 1\nbase line 2\nbase line 3\n") end) after_each(function() @@ -42,11 +42,49 @@ describe("preview integration", function() assert.is_not_nil(config.state.preview_buf) local lines = vim.api.nvim_buf_get_lines(config.state.preview_buf, 0, -1, false) + assert.are.equal(3, #lines) assert.are.equal("base line 1", lines[1]) assert.are.equal("base line 2", lines[2]) assert.are.equal("base line 3", lines[3]) end) + it("handles base content without trailing newline", function() + helpers.mock_base_content("no trailing newline") + + local buf = helpers.create_buf({ "current line 1" }, "source.lua") + local source_win = vim.api.nvim_get_current_win() + vim.api.nvim_win_set_buf(source_win, buf) + + config.state.active = true + config.state.base_ref = "main" + config.state.scope = "full_pr" + + preview.open_preview(source_win) + + local lines = vim.api.nvim_buf_get_lines(config.state.preview_buf, 0, -1, false) + assert.are.equal(1, #lines) + assert.are.equal("no trailing newline", lines[1]) + end) + + it("preserves trailing blank lines in base content", function() + helpers.mock_base_content("line 1\n\n") + + local buf = helpers.create_buf({ "current line 1" }, "source.lua") + local source_win = vim.api.nvim_get_current_win() + vim.api.nvim_win_set_buf(source_win, buf) + + config.state.active = true + config.state.base_ref = "main" + config.state.scope = "full_pr" + + preview.open_preview(source_win) + + local lines = vim.api.nvim_buf_get_lines(config.state.preview_buf, 0, -1, false) + assert.are.equal(2, #lines) + assert.are.equal("line 1", lines[1]) + assert.are.equal("", lines[2]) + end) + it("enables diff mode on both windows", function() local buf = helpers.create_buf({ "line 1", "line 2" }, "source.lua") local source_win = vim.api.nvim_get_current_win()