feat(highlight): add treesitter context padding from disk
Problem: treesitter parses each diff hunk in isolation, so incomplete syntax constructs at hunk boundaries (e.g., a function definition with no body) produce ERROR nodes and drop captures. Solution: read N lines from the on-disk file before/after each hunk and prepend/append them as unmapped padding lines. The line_map guard in highlight_treesitter skips extmarks for unmapped lines, so padding provides syntax context without visual output. Controlled by highlights.context (default 25, 0 to disable). Also applies to the vim syntax fallback path via a leading_offset filter.
This commit is contained in:
parent
ba1f830629
commit
2e1ebdee03
7 changed files with 308 additions and 24 deletions
10
README.md
10
README.md
|
|
@ -41,12 +41,10 @@ luarocks install diffs.nvim
|
|||
|
||||
## Known Limitations
|
||||
|
||||
- **Incomplete syntax context**: Treesitter parses each diff hunk in isolation
|
||||
without surrounding code context. When a hunk shows lines added to an existing
|
||||
block (e.g., adding a plugin inside `return { ... }`), the parser doesn't see
|
||||
the `return` statement and may produce incorrect highlighting. This is
|
||||
inherent to parsing code fragments—no diff tooling solves this without
|
||||
significant complexity.
|
||||
- **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 (controlled by `highlights.context`, default 25).
|
||||
This resolves most boundary issues. Set `highlights.context = 0` to disable.
|
||||
|
||||
- **Syntax flashing**: `diffs.nvim` hooks into the `FileType fugitive` event
|
||||
triggered by `vim-fugitive`, at which point the buffer is preliminarily
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue