No description
Find a file
Barrett Ruth 35067151e4
fix: pre-release cleanup for v0.2.0 (#102)
## Problem

Three minor issues remain before the v0.2.0 release:

1. Git quotes filenames containing spaces, unicode, or special
characters
   in the fugitive status buffer. `parse_file_line` passed the quotes
   through verbatim, causing file-not-found errors on diff operations.

2. Navigation wrap-around in both conflict and merge modules was silent,
giving no indication when jumping past the last/first item back to the
   beginning/end.

3. `resolved_hunks` and `(resolved)` virtual text in the merge module
persisted across buffer re-reads, showing stale markers for hunks that
   were no longer resolved.

## Solution

1. Add an `unquote()` helper to fugitive.lua that strips surrounding
   quotes and unescapes `\\`, `\"`, `\n`, `\t`, and octal `\NNN`
   sequences. Applied to both return paths in `parse_file_line`.

2. Add `vim.notify` before the wrap-around jump in all four navigation
   functions (`goto_next`/`goto_prev` in conflict.lua and merge.lua).

3. Clear `resolved_hunks[bufnr]` and the merge namespace at the top of
   `setup_keymaps` so each buffer init starts fresh.

Closes #66
2026-02-09 15:08:36 -05:00
.github fix: remove useless ci script 2026-02-04 15:39:27 -05:00
doc fix: pre-release cleanup for v0.2.0 (#102) 2026-02-09 15:08:36 -05:00
lua/diffs fix: pre-release cleanup for v0.2.0 (#102) 2026-02-09 15:08:36 -05:00
plugin feat: unified diff conflict resolution for unmerged files (#99) 2026-02-09 12:21:13 -05:00
spec fix: pre-release cleanup for v0.2.0 (#102) 2026-02-09 15:08:36 -05:00
.busted feat(test): testing infrastructure 2026-02-01 23:09:05 -05:00
.editorconfig feat: initial setup files 2026-02-01 16:30:24 -05:00
.gitignore feat: initial setup files 2026-02-01 16:30:24 -05:00
.luarc.json fix(ci): add jit to luarc globals for lua-language-server 2026-02-06 13:58:30 -05:00
.pre-commit-config.yaml fix: use yaml, not yml YAML file extension 2026-02-02 22:14:04 -05:00
.prettierignore feat: initial setup files 2026-02-01 16:30:24 -05:00
.prettierrc fix: use yaml, not yml YAML file extension 2026-02-02 22:14:04 -05:00
diffs.nvim-scm-1.rockspec feat: rename everything 2026-02-02 22:09:13 -05:00
LICENSE feat: initial setup files 2026-02-01 16:30:24 -05:00
README.md feat(conflict): add virtual text formatting and action lines (#101) 2026-02-09 13:55:13 -05:00
selene.toml feat: initial setup files 2026-02-01 16:30:24 -05:00
stylua.toml feat: initial setup files 2026-02-01 16:30:24 -05:00
vim.toml cleanup 2026-02-02 14:06:58 -05:00

diffs.nvim

Syntax highlighting for diffs in Neovim

Enhance vim-fugitive and Neovim's built-in diff mode with language-aware syntax highlighting.

diffs.nvim preview

Features

  • Treesitter syntax highlighting in fugitive diffs and commit views
  • Character-level intra-line diff highlighting
  • :Gdiff unified diff against any revision
  • Background-only diff colors for &diff buffers
  • Inline merge conflict detection, highlighting, and resolution
  • Vim syntax fallback, context padding, configurable blend/debounce

Requirements

  • Neovim 0.9.0+

Installation

Install with your package manager of choice or via luarocks:

luarocks install diffs.nvim

Documentation

:help diffs.nvim

Known Limitations

  • Incomplete syntax context: Treesitter parses each diff hunk in isolation. To improve accuracy, diffs.nvim reads lines from disk before and after each hunk for parsing context (highlights.context, enabled by default with 25 lines). This resolves most boundary issues. Set highlights.context.enabled = false to disable.

  • Syntax flashing: diffs.nvim hooks into the FileType fugitive event triggered by vim-fugitive, at which point the buffer is preliminarily painted. The buffer is then re-painted after debounce_ms milliseconds, causing an unavoidable visual "flash" even when debounce_ms = 0.

  • Conflicting diff plugins: diffs.nvim may not interact well with other plugins that modify diff highlighting. Known plugins that may conflict:

    • diffview.nvim - provides its own diff highlighting and conflict resolution UI
    • mini.diff - visualizes buffer differences with its own highlighting system
    • gitsigns.nvim - generally compatible, but both plugins modifying line highlights may produce unexpected results
    • git-conflict.nvim - diffs.nvim now includes built-in conflict resolution; disable one or the other to avoid overlap

Acknowledgements