Skip to content

Commit e9d1490

Browse files
authored
feat(#2415): granular highlight_git, normalise git groups (#2487)
* docs: update CONTRIBUTING.md (#2485) * feat(#2415): granular highlight_git, normalise git groups
1 parent 4167805 commit e9d1490

File tree

9 files changed

+192
-141
lines changed

9 files changed

+192
-141
lines changed

CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
Thank you for contributing.
44

5+
See [Development](https://github.com/nvim-tree/nvim-tree.lua/wiki/Development) for environment setup, tips and tools.
6+
57
## Styling and formatting
68

79
Code is formatted using luacheck, and linted using stylua.
@@ -24,7 +26,7 @@ Once you did, you should run the `scripts/update-help.sh`.
2426
When adding new options, you should declare the defaults in the main `nvim-tree.lua` file.
2527
Once you did, you should run the `scripts/update-help.sh`.
2628

27-
Documentation for options should also be added, see how this is done after `nvim-tree.disable_netrw` in the `nvim-tree-lua.txt` file.
29+
Documentation for options should also be added to `nvim-tree-opts` in `doc/nvim-tree-lua.txt`
2830

2931
## Pull Request
3032

doc/nvim-tree-lua.txt

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ Following is the default configuration. See |nvim-tree-opts| for details.
385385
indent_width = 2,
386386
special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" },
387387
symlink_destination = true,
388-
highlight_git = false,
388+
highlight_git = "none",
389389
highlight_diagnostics = "none",
390390
highlight_opened_files = "none",
391391
highlight_modified = "none",
@@ -822,12 +822,13 @@ Whether to show the destination of the symlink.
822822
Type: `boolean`, Default: `true`
823823

824824
*nvim-tree.renderer.highlight_git*
825-
Enable highlight for git attributes using `NvimTreeGit*` highlight groups.
825+
Enable highlight for git attributes using `NvimTreeGit*HL` highlight groups.
826826
Requires |nvim-tree.git.enable|
827-
Type: `boolean`, Default: `false`
827+
Value can be `"none"`, `"icon"`, `"name"` or `"all"`.
828+
Type: `string`, Default: `"none"`
828829

829830
*nvim-tree.renderer.highlight_diagnostics*
830-
Enable highlight for diagnostics using `NvimTreeDiagnostic*HL` highlight groups.
831+
Enable highlight for diagnostics using `NvimTreeDiagnostic*HL` highlight groups.
831832
Requires |nvim-tree.diagnostics.enable|
832833
Value can be `"none"`, `"icon"`, `"name"` or `"all"`.
833834
Type: `string`, Default: `"none"`
@@ -2195,7 +2196,7 @@ Folder Text: >
21952196
NvimTreeSymlinkFolderName Directory
21962197
<
21972198
Icon: >
2198-
NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue"
2199+
NvimTreeFolderIcon guifg=#8094b4 ctermfg=Blue
21992200
NvimTreeFileIcon NvimTreeNormal
22002201
NvimTreeSymlinkIcon NvimTreeNormal
22012202
NvimTreeOpenedFileIcon NvimTreeOpenedFile
@@ -2218,38 +2219,38 @@ Bookmark Highlight: >
22182219
NvimTreeBookmarkHL SpellLocal
22192220
<
22202221
Picker: >
2221-
NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan"
2222+
NvimTreeWindowPicker guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan
22222223
<
22232224
Live Filter: >
22242225
NvimTreeLiveFilterPrefix PreProc
22252226
NvimTreeLiveFilterValue ModeMsg
22262227
<
22272228
Git Icon: >
2228-
NvimTreeGitDeleted Statement
2229-
NvimTreeGitDirty Statement
2230-
NvimTreeGitIgnored Comment
2231-
NvimTreeGitMerge Constant
2232-
NvimTreeGitNew PreProc
2233-
NvimTreeGitRenamed PreProc
2234-
NvimTreeGitStaged Constant
2229+
NvimTreeGitDeletedIcon Statement
2230+
NvimTreeGitDirtyIcon Statement
2231+
NvimTreeGitIgnoredIcon Comment
2232+
NvimTreeGitMergeIcon Constant
2233+
NvimTreeGitNewIcon PreProc
2234+
NvimTreeGitRenamedIcon PreProc
2235+
NvimTreeGitStagedIcon Constant
22352236
<
22362237
Git File Text: >
2237-
NvimTreeFileDirty NvimTreeGitDirty
2238-
NvimTreeFileStaged NvimTreeGitStaged
2239-
NvimTreeFileMerge NvimTreeGitMerge
2240-
NvimTreeFileRenamed NvimTreeGitRenamed
2241-
NvimTreeFileNew NvimTreeGitNew
2242-
NvimTreeFileDeleted NvimTreeGitDeleted
2243-
NvimTreeFileIgnored NvimTreeGitIgnored
2238+
NvimTreeGitFileDeletedHL NvimTreeGitDeletedIcon
2239+
NvimTreeGitFileDirtyHL NvimTreeGitDirtyIcon
2240+
NvimTreeGitFileIgnoredHL NvimTreeGitIgnoredIcon
2241+
NvimTreeGitFileMergeHL NvimTreeGitMergeIcon
2242+
NvimTreeGitFileNewHL NvimTreeGitNewIcon
2243+
NvimTreeGitFileRenamedHL NvimTreeGitRenamedIcon
2244+
NvimTreeGitFileStagedHL NvimTreeGitStagedIcon
22442245
<
22452246
Git Folder Text: >
2246-
NvimTreeFolderDirty NvimTreeFileDirty
2247-
NvimTreeFolderStaged NvimTreeFileStaged
2248-
NvimTreeFolderMerge NvimTreeFileMerge
2249-
NvimTreeFolderRenamed NvimTreeFileRenamed
2250-
NvimTreeFolderNew NvimTreeFileNew
2251-
NvimTreeFolderDeleted NvimTreeFileDeleted
2252-
NvimTreeFolderIgnored NvimTreeFileIgnored
2247+
NvimTreeGitFolderDeletedHL NvimTreeGitFileDeletedHL
2248+
NvimTreeGitFolderDirtyHL NvimTreeGitFileDirtyHL
2249+
NvimTreeGitFolderIgnoredHL NvimTreeGitFileIgnoredHL
2250+
NvimTreeGitFolderMergeHL NvimTreeGitFileMergeHL
2251+
NvimTreeGitFolderNewHL NvimTreeGitFileNewHL
2252+
NvimTreeGitFolderRenamedHL NvimTreeGitFileRenamedHL
2253+
NvimTreeGitFolderStagedHL NvimTreeGitFileStagedHL
22532254
<
22542255
Diagnostics Icon: >
22552256
NvimTreeDiagnosticErrorIcon DiagnosticError
@@ -2264,12 +2265,11 @@ Diagnostics File Highlight: >
22642265
NvimTreeDiagnosticHintFileHL DiagnosticUnderlineHint
22652266
<
22662267
Diagnostics Folder Highlight: >
2267-
NvimTreeDiagnosticErrorFolderHL DiagnosticUnderlineError
2268-
NvimTreeDiagnosticWarnFolderHL DiagnosticUnderlineWarn
2269-
NvimTreeDiagnosticInfoFolderHL DiagnosticUnderlineInfo
2270-
NvimTreeDiagnosticHintFolderHL DiagnosticUnderlineHint
2268+
NvimTreeDiagnosticErrorFolderHL NvimTreeDiagnosticErrorFileHL
2269+
NvimTreeDiagnosticWarnFolderHL NvimTreeDiagnosticWarnFileHL
2270+
NvimTreeDiagnosticInfoFolderHL NvimTreeDiagnosticInfoFileHL
2271+
NvimTreeDiagnosticHintFolderHL NvimTreeDiagnosticHintFileHL
22712272
<
2272-
22732273
==============================================================================
22742274
8.1 HIGHLIGHT OVERHAUL *nvim-tree-highlight-overhaul*
22752275

@@ -2285,7 +2285,7 @@ Diagnostics Folder Highlight: >
22852285
- `highlight_xxx` is additive instead of overwriting. See
22862286
|nvim-tree-opts-renderer| for precedence.
22872287

2288-
Legacy style may be applied: >
2288+
Legacy diagnostic HL style may be applied: >
22892289
22902290
:hi link NvimTreeDiagnosticErrorFileHL DiagnosticError
22912291
:hi link NvimTreeDiagnosticWarnFileHL DiagnosticWarn
@@ -2300,6 +2300,30 @@ Legacy style may be applied: >
23002300
Legacy highlight group are still obeyed when they are defined and the current
23012301
highlight group is not, hard linking as follows: >
23022302
2303+
NvimTreeGitDeletedIcon NvimTreeGitDeleted
2304+
NvimTreeGitDirtyIcon NvimTreeGitDirty
2305+
NvimTreeGitIgnoredIcon NvimTreeGitIgnored
2306+
NvimTreeGitMergeIcon NvimTreeGitMerge
2307+
NvimTreeGitNewIcon NvimTreeGitNew
2308+
NvimTreeGitRenamedIcon NvimTreeGitRenamed
2309+
NvimTreeGitStagedIcon NvimTreeGitStaged
2310+
2311+
NvimTreeGitFileDeletedHL NvimTreeFileDeleted
2312+
NvimTreeGitFileDirtyHL NvimTreeFileDirty
2313+
NvimTreeGitFileIgnoredHL NvimTreeFileIgnored
2314+
NvimTreeGitFileMergeHL NvimTreeFileMerge
2315+
NvimTreeGitFileNewHL NvimTreeFileNew
2316+
NvimTreeGitFileRenamedHL NvimTreeFileRenamed
2317+
NvimTreeGitFileStagedHL NvimTreeFileStaged
2318+
2319+
NvimTreeGitFolderDeletedHL NvimTreeFolderDeleted
2320+
NvimTreeGitFolderDirtyHL NvimTreeFolderDirty
2321+
NvimTreeGitFolderIgnoredHL NvimTreeFolderIgnored
2322+
NvimTreeGitFolderMergeHL NvimTreeFolderMerge
2323+
NvimTreeGitFolderNewHL NvimTreeFolderNew
2324+
NvimTreeGitFolderRenamedHL NvimTreeFolderRenamed
2325+
NvimTreeGitFolderStagedHL NvimTreeFolderStaged
2326+
23032327
NvimTreeLspDiagnosticsError NvimTreeDiagnosticErrorIcon
23042328
NvimTreeLspDiagnosticsWarning NvimTreeDiagnosticWarnIcon
23052329
NvimTreeLspDiagnosticsInformation NvimTreeDiagnosticInfoIcon

lua/nvim-tree.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
407407
indent_width = 2,
408408
special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" },
409409
symlink_destination = true,
410-
highlight_git = false,
410+
highlight_git = "none",
411411
highlight_diagnostics = "none",
412412
highlight_opened_files = "none",
413413
highlight_modified = "none",

lua/nvim-tree/colors.lua

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -70,31 +70,31 @@ local DEFAULT_LINKS = {
7070
NvimTreeLiveFilterValue = "ModeMsg",
7171

7272
-- Git Icon
73-
NvimTreeGitDeleted = "Statement",
74-
NvimTreeGitDirty = "Statement",
75-
NvimTreeGitIgnored = "Comment",
76-
NvimTreeGitMerge = "Constant",
77-
NvimTreeGitNew = "PreProc",
78-
NvimTreeGitRenamed = "PreProc",
79-
NvimTreeGitStaged = "Constant",
73+
NvimTreeGitDeletedIcon = "Statement",
74+
NvimTreeGitDirtyIcon = "Statement",
75+
NvimTreeGitIgnoredIcon = "Comment",
76+
NvimTreeGitMergeIcon = "Constant",
77+
NvimTreeGitNewIcon = "PreProc",
78+
NvimTreeGitRenamedIcon = "PreProc",
79+
NvimTreeGitStagedIcon = "Constant",
8080

8181
-- Git File Text
82-
NvimTreeFileDirty = "NvimTreeGitDirty",
83-
NvimTreeFileStaged = "NvimTreeGitStaged",
84-
NvimTreeFileMerge = "NvimTreeGitMerge",
85-
NvimTreeFileRenamed = "NvimTreeGitRenamed",
86-
NvimTreeFileNew = "NvimTreeGitNew",
87-
NvimTreeFileDeleted = "NvimTreeGitDeleted",
88-
NvimTreeFileIgnored = "NvimTreeGitIgnored",
82+
NvimTreeGitFileDeletedHL = "NvimTreeGitDeletedIcon",
83+
NvimTreeGitFileDirtyHL = "NvimTreeGitDirtyIcon",
84+
NvimTreeGitFileIgnoredHL = "NvimTreeGitIgnoredIcon",
85+
NvimTreeGitFileMergeHL = "NvimTreeGitMergeIcon",
86+
NvimTreeGitFileNewHL = "NvimTreeGitNewIcon",
87+
NvimTreeGitFileRenamedHL = "NvimTreeGitRenamedIcon",
88+
NvimTreeGitFileStagedHL = "NvimTreeGitStagedIcon",
8989

9090
-- Git Folder Text
91-
NvimTreeFolderDirty = "NvimTreeFileDirty",
92-
NvimTreeFolderStaged = "NvimTreeFileStaged",
93-
NvimTreeFolderMerge = "NvimTreeFileMerge",
94-
NvimTreeFolderRenamed = "NvimTreeFileRenamed",
95-
NvimTreeFolderNew = "NvimTreeFileNew",
96-
NvimTreeFolderDeleted = "NvimTreeFileDeleted",
97-
NvimTreeFolderIgnored = "NvimTreeFileIgnored",
91+
NvimTreeGitFolderDeletedHL = "NvimTreeGitFileDeletedHL",
92+
NvimTreeGitFolderDirtyHL = "NvimTreeGitFileDirtyHL",
93+
NvimTreeGitFolderIgnoredHL = "NvimTreeGitFileIgnoredHL",
94+
NvimTreeGitFolderMergeHL = "NvimTreeGitFileMergeHL",
95+
NvimTreeGitFolderNewHL = "NvimTreeGitFileNewHL",
96+
NvimTreeGitFolderRenamedHL = "NvimTreeGitFileRenamedHL",
97+
NvimTreeGitFolderStagedHL = "NvimTreeGitFileStagedHL",
9898

9999
-- Diagnostics Icon
100100
NvimTreeDiagnosticErrorIcon = "DiagnosticError",
@@ -109,22 +109,48 @@ local DEFAULT_LINKS = {
109109
NvimTreeDiagnosticHintFileHL = "DiagnosticUnderlineHint",
110110

111111
-- Diagnostics Folder Highlight
112-
NvimTreeDiagnosticErrorFolderHL = "DiagnosticUnderlineError",
113-
NvimTreeDiagnosticWarnFolderHL = "DiagnosticUnderlineWarn",
114-
NvimTreeDiagnosticInfoFolderHL = "DiagnosticUnderlineInfo",
115-
NvimTreeDiagnosticHintFolderHL = "DiagnosticUnderlineHint",
112+
NvimTreeDiagnosticErrorFolderHL = "NvimTreeDiagnosticErrorFileHL",
113+
NvimTreeDiagnosticWarnFolderHL = "NvimTreeDiagnosticWarnFileHL",
114+
NvimTreeDiagnosticInfoFolderHL = "NvimTreeDiagnosticInfoFileHL",
115+
NvimTreeDiagnosticHintFolderHL = "NvimTreeDiagnosticHintFileHL",
116116
}
117117

118118
-- nvim-tree highlight groups to legacy
119119
local LEGACY_LINKS = {
120+
NvimTreeGitDeletedIcon = "NvimTreeGitDeleted",
121+
NvimTreeGitDirtyIcon = "NvimTreeGitDirty",
122+
NvimTreeGitIgnoredIcon = "NvimTreeGitIgnored",
123+
NvimTreeGitMergeIcon = "NvimTreeGitMerge",
124+
NvimTreeGitNewIcon = "NvimTreeGitNew",
125+
NvimTreeGitRenamedIcon = "NvimTreeGitRenamed",
126+
NvimTreeGitStagedIcon = "NvimTreeGitStaged",
127+
128+
NvimTreeGitFileDeletedHL = "NvimTreeFileDeleted",
129+
NvimTreeGitFileDirtyHL = "NvimTreeFileDirty",
130+
NvimTreeGitFileIgnoredHL = "NvimTreeFileIgnored",
131+
NvimTreeGitFileMergeHL = "NvimTreeFileMerge",
132+
NvimTreeGitFileNewHL = "NvimTreeFileNew",
133+
NvimTreeGitFileRenamedHL = "NvimTreeFileRenamed",
134+
NvimTreeGitFileStagedHL = "NvimTreeFileStaged",
135+
136+
NvimTreeGitFolderDeletedHL = "NvimTreeFolderDeleted",
137+
NvimTreeGitFolderDirtyHL = "NvimTreeFolderDirty",
138+
NvimTreeGitFolderIgnoredHL = "NvimTreeFolderIgnored",
139+
NvimTreeGitFolderMergeHL = "NvimTreeFolderMerge",
140+
NvimTreeGitFolderNewHL = "NvimTreeFolderNew",
141+
NvimTreeGitFolderRenamedHL = "NvimTreeFolderRenamed",
142+
NvimTreeGitFolderStagedHL = "NvimTreeFolderStaged",
143+
120144
NvimTreeDiagnosticErrorIcon = "NvimTreeLspDiagnosticsError",
121145
NvimTreeDiagnosticWarnIcon = "NvimTreeLspDiagnosticsWarning",
122146
NvimTreeDiagnosticInfoIcon = "NvimTreeLspDiagnosticsInformation",
123147
NvimTreeDiagnosticHintIcon = "NvimTreeLspDiagnosticsHint",
148+
124149
NvimTreeDiagnosticErrorFileHL = "NvimTreeLspDiagnosticsErrorText",
125150
NvimTreeDiagnosticWarnFileHL = "NvimTreeLspDiagnosticsWarningText",
126151
NvimTreeDiagnosticInfoFileHL = "NvimTreeLspDiagnosticsInformationText",
127152
NvimTreeDiagnosticHintFileHL = "NvimTreeLspDiagnosticsHintText",
153+
128154
NvimTreeDiagnosticErrorFolderHL = "NvimTreeLspDiagnosticsErrorFolderText",
129155
NvimTreeDiagnosticWarnFolderHL = "NvimTreeLspDiagnosticsWarningFolderText",
130156
NvimTreeDiagnosticInfoFolderHL = "NvimTreeLspDiagnosticsInformationFolderText",

lua/nvim-tree/legacy.lua

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,12 @@ local function refactored(opts)
4444

4545
-- 2023/10/08
4646
if type(opts.renderer) == "table" and type(opts.renderer.highlight_diagnostics) == "boolean" then
47-
if opts.renderer.highlight_diagnostics then
48-
opts.renderer.highlight_diagnostics = "name"
49-
else
50-
opts.renderer.highlight_diagnostics = "none"
51-
end
47+
opts.renderer.highlight_diagnostics = opts.renderer.highlight_diagnostics and "name" or "none"
48+
end
49+
50+
-- 2023/10/21
51+
if type(opts.renderer) == "table" and type(opts.renderer.highlight_git) == "boolean" then
52+
opts.renderer.highlight_git = opts.renderer.highlight_git and "name" or "none"
5253
end
5354
end
5455

lua/nvim-tree/renderer/builder.lua

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,6 @@ end
285285
function Builder:_get_highlight_override(node, unloaded_bufnr)
286286
local name_hl, icon_hl
287287

288-
-- git
289-
local git_highlight = git.get_highlight(node)
290-
if git_highlight then
291-
name_hl = git_highlight
292-
end
293-
294288
-- opened file
295289
if self.highlight_opened_files and vim.fn.bufloaded(node.absolute_path) > 0 and vim.fn.bufnr(node.absolute_path) ~= unloaded_bufnr then
296290
if self.highlight_opened_files == "all" or self.highlight_opened_files == "name" then
@@ -427,6 +421,7 @@ function Builder:_build_line(node, idx, num_children, unloaded_bufnr)
427421
end
428422

429423
-- extra highighting
424+
self:_append_highlight(node, git.get_highlight, icon.hl, name.hl)
430425
self:_append_highlight(node, bookmarks.get_highlight, icon.hl, name.hl)
431426
self:_append_highlight(node, diagnostics.get_highlight, icon.hl, name.hl)
432427
self:_append_highlight(node, copy_paste.get_highlight, icon.hl, name.hl)

lua/nvim-tree/renderer/components/bookmarks.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ local M = {
77
hl_pos = HL_POSITION.none,
88
}
99

10-
---Bookmark highlight group and position when highlight_bookmark.
10+
---Bookmark highlight group and position when highlight_bookmark
1111
---@param node table
1212
---@return HL_POSITION position none when clipboard empty
1313
---@return string|nil group only when node present in clipboard

lua/nvim-tree/renderer/components/diagnostics.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ local M = {
1212
HL_POS = HL_POSITION.none,
1313
}
1414

15-
---Diagnostics text highlight group when highlight_diagnostics.
15+
---Diagnostics highlight group and position when highlight_diagnostics.
1616
---@param node table
1717
---@return HL_POSITION position none when no status
1818
---@return string|nil group only when status

0 commit comments

Comments
 (0)