Skip to content

Commit b7f6600

Browse files
authored
feat(#2197): git and diagnostics folder highlight groups (#2409)
* feat(#2197): add git folder highlight groups * feat(#2197): add diagnostics folder highlight groups
1 parent 8f48426 commit b7f6600

File tree

4 files changed

+118
-67
lines changed

4 files changed

+118
-67
lines changed

doc/nvim-tree-lua.txt

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2180,28 +2180,43 @@ Git Icon: >
21802180
NvimTreeGitRenamed
21812181
NvimTreeGitNew
21822182
NvimTreeGitDeleted
2183-
NvimTreeGitIgnored Comment
2183+
NvimTreeGitIgnored Comment
21842184
<
2185-
Git Text: >
2186-
NvimTreeFileDirty NvimTreeGitDirty
2187-
NvimTreeFileStaged NvimTreeGitStaged
2188-
NvimTreeFileMerge NvimTreeGitMerge
2189-
NvimTreeFileRenamed NvimTreeGitRenamed
2190-
NvimTreeFileNew NvimTreeGitNew
2191-
NvimTreeFileDeleted NvimTreeGitDeleted
2192-
NvimTreeFileIgnored NvimTreeGitIgnored
2185+
Git File Text: >
2186+
NvimTreeFileDirty NvimTreeGitDirty
2187+
NvimTreeFileStaged NvimTreeGitStaged
2188+
NvimTreeFileMerge NvimTreeGitMerge
2189+
NvimTreeFileRenamed NvimTreeGitRenamed
2190+
NvimTreeFileNew NvimTreeGitNew
2191+
NvimTreeFileDeleted NvimTreeGitDeleted
2192+
NvimTreeFileIgnored NvimTreeGitIgnored
2193+
<
2194+
Git Folder Text: >
2195+
NvimTreeFolderDirty NvimTreeFileDirty
2196+
NvimTreeFolderStaged NvimTreeFileStaged
2197+
NvimTreeFolderMerge NvimTreeFileMerge
2198+
NvimTreeFolderRenamed NvimTreeFileRenamed
2199+
NvimTreeFolderNew NvimTreeFileNew
2200+
NvimTreeFolderDeleted NvimTreeFileDeleted
2201+
NvimTreeFolderIgnored NvimTreeFileIgnored
21932202
<
21942203
Diagnostics Icon: >
2195-
NvimTreeLspDiagnosticsError DiagnosticError
2196-
NvimTreeLspDiagnosticsWarning DiagnosticWarn
2197-
NvimTreeLspDiagnosticsInformation DiagnosticInfo
2198-
NvimTreeLspDiagnosticsHint DiagnosticHint
2204+
NvimTreeLspDiagnosticsError DiagnosticError
2205+
NvimTreeLspDiagnosticsWarning DiagnosticWarn
2206+
NvimTreeLspDiagnosticsInformation DiagnosticInfo
2207+
NvimTreeLspDiagnosticsHint DiagnosticHint
2208+
<
2209+
Diagnostics File Text: >
2210+
NvimTreeLspDiagnosticsErrorText NvimTreeLspDiagnosticsError
2211+
NvimTreeLspDiagnosticsWarningText NvimTreeLspDiagnosticsWarning
2212+
NvimTreeLspDiagnosticsInfoText NvimTreeLspDiagnosticsInformation
2213+
NvimTreeLspDiagnosticsHintText NvimTreeLspDiagnosticsHint
21992214
<
2200-
Diagnostics Text: >
2201-
NvimTreeLspDiagnosticsErrorText NvimTreeLspDiagnosticsError
2202-
NvimTreeLspDiagnosticsWarningText NvimTreeLspDiagnosticsWarning
2203-
NvimTreeLspDiagnosticsInfoText NvimTreeLspDiagnosticsInformation
2204-
NvimTreeLspDiagnosticsHintText NvimTreeLspDiagnosticsHint
2215+
Diagnostics Folder Text: >
2216+
NvimTreeLspDiagnosticsErrorFolderText NvimTreeLspDiagnosticsErrorText
2217+
NvimTreeLspDiagnosticsWarningFolderText NvimTreeLspDiagnosticsWarningText
2218+
NvimTreeLspDiagnosticsInfoFolderText NvimTreeLspDiagnosticsInfoText
2219+
NvimTreeLspDiagnosticsHintFolderText NvimTreeLspDiagnosticsHintText
22052220
<
22062221
==============================================================================
22072222
9. EVENTS *nvim-tree-events*

lua/nvim-tree/colors.lua

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,13 @@ local function get_links()
8282
FileStaged = "NvimTreeGitStaged",
8383
FileDeleted = "NvimTreeGitDeleted",
8484
FileIgnored = "NvimTreeGitIgnored",
85+
FolderDirty = "NvimTreeFileDirty",
86+
FolderNew = "NvimTreeFileNew",
87+
FolderRenamed = "NvimTreeFileRenamed",
88+
FolderMerge = "NvimTreeFileMerge",
89+
FolderStaged = "NvimTreeFileStaged",
90+
FolderDeleted = "NvimTreeFileDeleted",
91+
FolderIgnored = "NvimTreeFileIgnored",
8592
LspDiagnosticsError = "DiagnosticError",
8693
LspDiagnosticsWarning = "DiagnosticWarn",
8794
LspDiagnosticsInformation = "DiagnosticInfo",
@@ -90,6 +97,10 @@ local function get_links()
9097
LspDiagnosticsWarningText = "NvimTreeLspDiagnosticsWarning",
9198
LspDiagnosticsInformationText = "NvimTreeLspDiagnosticsInformation",
9299
LspDiagnosticsHintText = "NvimTreeLspDiagnosticsHintFile",
100+
LspDiagnosticsErrorFolderText = "NvimTreeLspDiagnosticsErrorText",
101+
LspDiagnosticsWarningFolderText = "NvimTreeLspDiagnosticsWarningText",
102+
LspDiagnosticsInformationFolderText = "NvimTreeLspDiagnosticsInformationText",
103+
LspDiagnosticsHintFolderText = "NvimTreeLspDiagnosticsHintFileText",
93104
Popup = "Normal",
94105
GitIgnored = "Comment",
95106
StatusLine = "StatusLine",

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

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
local M = {}
22

3-
local H = {}
4-
local I = {}
3+
local HS_FILE = {}
4+
local HS_FOLDER = {}
5+
local ICON = {}
56

67
---diagnostics text highlight group if there is a status
78
---@param node table
89
---@return string|nil highlight
910
function M.get_highlight(node)
10-
if M.config.diagnostics.enable and M.config.renderer.highlight_diagnostics then
11-
return H[node.diag_status]
11+
if node and M.config.diagnostics.enable and M.config.renderer.highlight_diagnostics then
12+
if node.nodes then
13+
return HS_FOLDER[node.diag_status]
14+
else
15+
return HS_FILE[node.diag_status]
16+
end
1217
end
1318
end
1419

1520
---diagnostics icon if there is a status
1621
---@param node table
1722
---@return HighlightedString|nil modified icon
1823
function M.get_icon(node)
19-
if M.config.diagnostics.enable and M.config.renderer.icons.show.diagnostics then
20-
return I[node.diag_status]
24+
if node and M.config.diagnostics.enable and M.config.renderer.icons.show.diagnostics then
25+
return ICON[node.diag_status]
2126
end
2227
end
2328

@@ -27,30 +32,35 @@ function M.setup(opts)
2732
renderer = opts.renderer,
2833
}
2934

30-
H[vim.diagnostic.severity.ERROR] = "NvimTreeLspDiagnosticsErrorText"
31-
H[vim.diagnostic.severity.WARN] = "NvimTreeLspDiagnosticsWarningText"
32-
H[vim.diagnostic.severity.INFO] = "NvimTreeLspDiagnosticsInfoText"
33-
H[vim.diagnostic.severity.HINT] = "NvimTreeLspDiagnosticsHintText"
35+
HS_FILE[vim.diagnostic.severity.ERROR] = "NvimTreeLspDiagnosticsErrorText"
36+
HS_FILE[vim.diagnostic.severity.WARN] = "NvimTreeLspDiagnosticsWarningText"
37+
HS_FILE[vim.diagnostic.severity.INFO] = "NvimTreeLspDiagnosticsInfoText"
38+
HS_FILE[vim.diagnostic.severity.HINT] = "NvimTreeLspDiagnosticsHintText"
3439

35-
I[vim.diagnostic.severity.ERROR] = {
40+
HS_FOLDER[vim.diagnostic.severity.ERROR] = "NvimTreeLspDiagnosticsErrorFolderText"
41+
HS_FOLDER[vim.diagnostic.severity.WARN] = "NvimTreeLspDiagnosticsWarningFolderText"
42+
HS_FOLDER[vim.diagnostic.severity.INFO] = "NvimTreeLspDiagnosticsInfoFolderText"
43+
HS_FOLDER[vim.diagnostic.severity.HINT] = "NvimTreeLspDiagnosticsHintFolderText"
44+
45+
ICON[vim.diagnostic.severity.ERROR] = {
3646
str = M.config.diagnostics.icons.error,
3747
hl = "NvimTreeLspDiagnosticsError",
3848
}
3949

40-
I[vim.diagnostic.severity.WARN] = {
50+
ICON[vim.diagnostic.severity.WARN] = {
4151
str = M.config.diagnostics.icons.warning,
4252
hl = "NvimTreeLspDiagnosticsWarning",
4353
}
44-
I[vim.diagnostic.severity.INFO] = {
54+
ICON[vim.diagnostic.severity.INFO] = {
4555
str = M.config.diagnostics.icons.info,
4656
hl = "NvimTreeLspDiagnosticsInfo",
4757
}
48-
I[vim.diagnostic.severity.HINT] = {
58+
ICON[vim.diagnostic.severity.HINT] = {
4959
str = M.config.diagnostics.icons.hint,
5060
hl = "NvimTreeLspDiagnosticsHint",
5161
}
5262

53-
for _, i in ipairs(I) do
63+
for _, i in ipairs(ICON) do
5464
vim.fn.sign_define(i.hl, { text = i.str, texthl = i.hl })
5565
end
5666
end

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

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,48 @@ local function build_icons_table(i)
4949
}
5050
end
5151

52+
local function build_hl_table()
53+
local file = {
54+
["M "] = "NvimTreeFileStaged",
55+
["C "] = "NvimTreeFileStaged",
56+
["AA"] = "NvimTreeFileStaged",
57+
["AD"] = "NvimTreeFileStaged",
58+
["MD"] = "NvimTreeFileStaged",
59+
["T "] = "NvimTreeFileStaged",
60+
["TT"] = "NvimTreeFileStaged",
61+
[" M"] = "NvimTreeFileDirty",
62+
["CM"] = "NvimTreeFileDirty",
63+
[" C"] = "NvimTreeFileDirty",
64+
[" T"] = "NvimTreeFileDirty",
65+
["MM"] = "NvimTreeFileDirty",
66+
["AM"] = "NvimTreeFileDirty",
67+
dirty = "NvimTreeFileDirty",
68+
["A "] = "NvimTreeFileNew",
69+
["??"] = "NvimTreeFileNew",
70+
["AU"] = "NvimTreeFileMerge",
71+
["UU"] = "NvimTreeFileMerge",
72+
["UD"] = "NvimTreeFileMerge",
73+
["DU"] = "NvimTreeFileMerge",
74+
["UA"] = "NvimTreeFileMerge",
75+
[" D"] = "NvimTreeFileDeleted",
76+
["DD"] = "NvimTreeFileDeleted",
77+
["RD"] = "NvimTreeFileDeleted",
78+
["D "] = "NvimTreeFileDeleted",
79+
["R "] = "NvimTreeFileRenamed",
80+
["RM"] = "NvimTreeFileRenamed",
81+
[" R"] = "NvimTreeFileRenamed",
82+
["!!"] = "NvimTreeFileIgnored",
83+
[" A"] = "none",
84+
}
85+
86+
local folder = {}
87+
for k, v in pairs(file) do
88+
folder[k] = v:gsub("File", "Folder")
89+
end
90+
91+
return file, folder
92+
end
93+
5294
local function nil_() end
5395

5496
local function warn_status(git_status)
@@ -101,39 +143,6 @@ local function get_icons_(node)
101143
return iconss
102144
end
103145

104-
local git_hl = {
105-
["M "] = "NvimTreeFileStaged",
106-
["C "] = "NvimTreeFileStaged",
107-
["AA"] = "NvimTreeFileStaged",
108-
["AD"] = "NvimTreeFileStaged",
109-
["MD"] = "NvimTreeFileStaged",
110-
["T "] = "NvimTreeFileStaged",
111-
["TT"] = "NvimTreeFileStaged",
112-
[" M"] = "NvimTreeFileDirty",
113-
["CM"] = "NvimTreeFileDirty",
114-
[" C"] = "NvimTreeFileDirty",
115-
[" T"] = "NvimTreeFileDirty",
116-
["MM"] = "NvimTreeFileDirty",
117-
["AM"] = "NvimTreeFileDirty",
118-
dirty = "NvimTreeFileDirty",
119-
["A "] = "NvimTreeFileNew",
120-
["??"] = "NvimTreeFileNew",
121-
["AU"] = "NvimTreeFileMerge",
122-
["UU"] = "NvimTreeFileMerge",
123-
["UD"] = "NvimTreeFileMerge",
124-
["DU"] = "NvimTreeFileMerge",
125-
["UA"] = "NvimTreeFileMerge",
126-
[" D"] = "NvimTreeFileDeleted",
127-
["DD"] = "NvimTreeFileDeleted",
128-
["RD"] = "NvimTreeFileDeleted",
129-
["D "] = "NvimTreeFileDeleted",
130-
["R "] = "NvimTreeFileRenamed",
131-
["RM"] = "NvimTreeFileRenamed",
132-
[" R"] = "NvimTreeFileRenamed",
133-
["!!"] = "NvimTreeFileIgnored",
134-
[" A"] = "none",
135-
}
136-
137146
function M.setup_signs(i)
138147
vim.fn.sign_define("NvimTreeGitDirty", { text = i.unstaged, texthl = "NvimTreeGitDirty" })
139148
vim.fn.sign_define("NvimTreeGitStaged", { text = i.staged, texthl = "NvimTreeGitStaged" })
@@ -150,14 +159,20 @@ local function get_highlight_(node)
150159
return
151160
end
152161

153-
return git_hl[git_status[1]]
162+
if node.nodes then
163+
return M.folder_hl[git_status[1]]
164+
else
165+
return M.file_hl[git_status[1]]
166+
end
154167
end
155168

156169
function M.setup(opts)
157170
M.config = opts.renderer
158171

159172
M.git_icons = build_icons_table(opts.renderer.icons.glyphs.git)
160173

174+
M.file_hl, M.folder_hl = build_hl_table()
175+
161176
if opts.renderer.icons.git_placement == "signcolumn" then
162177
M.setup_signs(opts.renderer.icons.glyphs.git)
163178
end

0 commit comments

Comments
 (0)