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
This commit is contained in:
parent
b5d28e9f2b
commit
35067151e4
11 changed files with 393 additions and 931 deletions
|
|
@ -75,6 +75,12 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
|
|||
algorithm = 'default',
|
||||
max_lines = 500,
|
||||
},
|
||||
priorities = {
|
||||
clear = 198,
|
||||
syntax = 199,
|
||||
line_bg = 200,
|
||||
char_bg = 201,
|
||||
},
|
||||
overrides = {},
|
||||
},
|
||||
fugitive = {
|
||||
|
|
@ -161,6 +167,10 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
|
|||
Character-level (intra-line) diff highlighting.
|
||||
See |diffs.IntraConfig| for fields.
|
||||
|
||||
{priorities} (table, default: see below)
|
||||
Extmark priority values.
|
||||
See |diffs.PrioritiesConfig| for fields.
|
||||
|
||||
{overrides} (table, default: {})
|
||||
Map of highlight group names to highlight
|
||||
definitions (see |nvim_set_hl()|). Applied
|
||||
|
|
@ -182,6 +192,28 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
|
|||
direction. Lines are read with early exit —
|
||||
cost scales with this value, not file size.
|
||||
|
||||
*diffs.PrioritiesConfig*
|
||||
Priorities config fields: ~
|
||||
{clear} (integer, default: 198)
|
||||
Priority for `DiffsClear` extmarks that reset
|
||||
underlying diff foreground colors. Must be
|
||||
below {syntax}.
|
||||
|
||||
{syntax} (integer, default: 199)
|
||||
Priority for treesitter and vim syntax extmarks.
|
||||
Must be below {line_bg} so that colorscheme
|
||||
backgrounds on syntax groups do not obscure
|
||||
line-level diff backgrounds.
|
||||
|
||||
{line_bg} (integer, default: 200)
|
||||
Priority for `DiffsAdd`/`DiffsDelete` line
|
||||
background extmarks. Must be below {char_bg}.
|
||||
|
||||
{char_bg} (integer, default: 201)
|
||||
Priority for `DiffsAddText`/`DiffsDeleteText`
|
||||
character-level background extmarks. Highest
|
||||
priority so changed characters stand out.
|
||||
|
||||
*diffs.TreesitterConfig*
|
||||
Treesitter config fields: ~
|
||||
{enabled} (boolean, default: true)
|
||||
|
|
@ -418,6 +450,7 @@ Configuration: ~
|
|||
disable_diagnostics = true,
|
||||
show_virtual_text = true,
|
||||
show_actions = false,
|
||||
priority = 200,
|
||||
keymaps = {
|
||||
ours = 'doo',
|
||||
theirs = 'dot',
|
||||
|
|
@ -471,6 +504,11 @@ Configuration: ~
|
|||
`DiffsConflictActions` highlight group.
|
||||
Only keymaps that are not `false` appear.
|
||||
|
||||
{priority} (integer, default: 200)
|
||||
Extmark priority for conflict region
|
||||
backgrounds and markers. Adjust if other
|
||||
plugins use the same priority range.
|
||||
|
||||
{keymaps} (table, default: see above)
|
||||
Buffer-local keymaps for conflict resolution
|
||||
and navigation. Each value accepts a string
|
||||
|
|
@ -566,12 +604,13 @@ Summary / commit detail views: ~
|
|||
- Code is parsed with |vim.treesitter.get_string_parser()|
|
||||
- If no treesitter parser and `vim.enabled`: vim syntax fallback via
|
||||
scratch buffer and |synID()|
|
||||
- `Normal` extmarks at priority 198 clear underlying diff foreground
|
||||
- Background extmarks (`DiffsAdd`/`DiffsDelete`) at priority 199
|
||||
- Syntax highlights are applied as extmarks at priority 200
|
||||
- `DiffsClear` extmarks at priority 198 clear underlying diff foreground
|
||||
- Syntax highlights are applied as extmarks at priority 199
|
||||
- Background extmarks (`DiffsAdd`/`DiffsDelete`) at priority 200
|
||||
- Character-level diff extmarks (`DiffsAddText`/`DiffsDeleteText`) at
|
||||
priority 201 overlay changed characters with an intense background
|
||||
- Conceal extmarks hide diff prefixes when `hide_prefix` is enabled
|
||||
- All priorities are configurable via |diffs.PrioritiesConfig|
|
||||
4. Re-highlighting occurs on `TextChanged` (debounced) and `Syntax` events
|
||||
|
||||
Diff mode views: ~
|
||||
|
|
@ -586,15 +625,10 @@ KNOWN LIMITATIONS *diffs-limitations*
|
|||
|
||||
Incomplete Syntax Context ~
|
||||
*diffs-syntax-context*
|
||||
Treesitter parses each diff hunk in isolation. To provide surrounding code
|
||||
context, diffs.nvim reads lines from disk before and after each hunk
|
||||
(see |diffs.ContextConfig|, enabled by default). This resolves most boundary
|
||||
issues where incomplete constructs (e.g., a function definition at the edge
|
||||
of a hunk with no body) would confuse the parser.
|
||||
|
||||
Set `highlights.context.enabled = false` to disable context padding. In rare
|
||||
cases, context padding may not help if the relevant surrounding code is very
|
||||
far from the hunk boundaries.
|
||||
Treesitter parses each diff hunk in isolation. Context lines within the hunk
|
||||
(lines with a ` ` prefix) provide syntactic context for the parser. In rare
|
||||
cases, hunks that start or end mid-expression may produce imperfect highlights
|
||||
due to treesitter error recovery.
|
||||
|
||||
Syntax Highlighting Flash ~
|
||||
*diffs-flash*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue