Skip to content

feat(api): add public inline diff rendering API#345

Open
fredrikaverpil wants to merge 1 commit intoesmuellert:mainfrom
fredrikaverpil:feat/inline-diff-api
Open

feat(api): add public inline diff rendering API#345
fredrikaverpil wants to merge 1 commit intoesmuellert:mainfrom
fredrikaverpil:feat/inline-diff-api

Conversation

@fredrikaverpil
Copy link
Contributor

@fredrikaverpil fredrikaverpil commented Mar 25, 2026

Why

I'd like the codediff.nvim experience in regular buffers where there are git diffs.

Also, the gitsigns.nvim community has requested Zed-style inline diff rendering (gitsigns#899). codediff already has the hard parts solved — C diff engine, virtual line rendering with treesitter syntax highlighting, character-level diff coloring — but none of it is accessible as a public API.

What

Add 5 public Lua API functions to require("codediff"):

Function Description
diff(original_lines, modified_lines, opts) Pure diff computation, returns { changes, moves, hit_timeout }
render_inline_diff(bufnr, diff_result, original_lines, modified_lines, opts) Render inline diff on a buffer (deleted lines as virtual lines, added lines highlighted)
clear_inline_diff(bufnr) Clear inline diff decorations from a buffer
render_inline(show, global) Toggle inline diff with git integration, per-buffer or globally via autocmds
change_base(base, global) Change base revision (e.g. "HEAD", ":0"), re-renders active buffers

Notes

  • Default base is HEAD (git index) (not the :0, which is the gitsigns convention)
  • Low-level functions delegate directly to existing modules with no wrapping logic
  • Works without codediff.setup() — highlights are initialized lazily on first render
  • Guards against namespace conflict with active :CodeDiff sessions
  • Non-git buffers are silent no-ops; new files show all lines as added

@fredrikaverpil fredrikaverpil force-pushed the feat/inline-diff-api branch 2 times, most recently from 5d2a86a to 93ffcd7 Compare March 25, 2026 11:27
@fredrikaverpil fredrikaverpil marked this pull request as ready for review March 25, 2026 11:38
@fredrikaverpil fredrikaverpil force-pushed the feat/inline-diff-api branch 2 times, most recently from 9926092 to 209cd38 Compare March 25, 2026 12:17
Expose codediff's inline diff rendering as a reusable Lua API for both
standalone use and plugin consumers (e.g. gitsigns.nvim).

Low-level API (re-exports, no state):
- codediff.diff() — pure diff computation
- codediff.render_inline_diff() — render on any buffer
- codediff.clear_inline_diff() — clear decorations

High-level API (standalone with git integration):
- codediff.render_inline() — toggle inline diff per-buffer or globally
- codediff.change_base() — change base revision for comparison
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant