Compare commits

...

2 commits

Author SHA1 Message Date
24a6414d8b
fix(init): guard read_file_lines against directory paths (#189)
Problem: when a commit contains a submodule or a symlink to a directory,
`read_file_lines` passes the path to `io.open` which succeeds, then
`f:lines()` raises `"Is a directory"` inside the decoration provider.

Solution: check `vim.fn.isdirectory(path)` before `io.open` and return
nil early, which `compute_hunk_context` already handles gracefully.
2026-03-13 07:14:31 -04:00
Barrett Ruth
925ba5cb8a
docs(readme): add repo links to FAQ integration names (#188) 2026-03-11 14:15:15 -04:00
3 changed files with 38 additions and 1 deletions

View file

@ -61,7 +61,8 @@ luarocks install diffs.nvim
Do not lazy load `diffs.nvim` with `event`, `lazy`, `ft`, `config`, or `keys` to
control loading - `diffs.nvim` lazy-loads itself.
**Q: Does diffs.nvim support vim-fugitive/Neogit/neojj/gitsigns?**
**Q: Does diffs.nvim support
[vim-fugitive](https://github.com/tpope/vim-fugitive)/[Neogit](https://github.com/NeogitOrg/neogit)/[neojj](https://github.com/NicholasZolton/neojj)/[gitsigns](https://github.com/lewis6991/gitsigns.nvim)?**
Yes. Enable integrations in your config:

View file

@ -347,6 +347,9 @@ end
---@param path string
---@return string[]?
local function read_file_lines(path)
if vim.fn.isdirectory(path) == 1 then
return nil
end
local f = io.open(path, 'r')
if not f then
return nil

View file

@ -165,6 +165,39 @@ describe('context', function()
assert.is_nil(hunks[1].context_after)
end)
it('skips when path is a directory', function()
vim.fn.mkdir(vim.fs.joinpath(tmpdir, 'subdir'), 'p')
local hunks = {
make_hunk('subdir', {
file_new_start = 1,
file_new_count = 1,
lines = { '+x' },
}),
}
compute_hunk_context(hunks, 25)
assert.is_nil(hunks[1].context_before)
assert.is_nil(hunks[1].context_after)
end)
it('skips when path is a symlink to a directory', function()
vim.fn.mkdir(vim.fs.joinpath(tmpdir, 'real_dir'), 'p')
vim.uv.fs_symlink(vim.fs.joinpath(tmpdir, 'real_dir'), vim.fs.joinpath(tmpdir, 'link_dir'))
local hunks = {
make_hunk('link_dir', {
file_new_start = 1,
file_new_count = 1,
lines = { '+x' },
}),
}
compute_hunk_context(hunks, 25)
assert.is_nil(hunks[1].context_before)
assert.is_nil(hunks[1].context_after)
end)
it('skips when file does not exist on disk', function()
local hunks = {
make_hunk('nonexistent.lua', {