diff options
| author | Kyren223 <kyren223@proton.me> | 2025-08-02 19:25:55 +0300 |
|---|---|---|
| committer | Kyren223 <kyren223@proton.me> | 2025-08-02 19:25:55 +0300 |
| commit | 8b3ee7a446fd835476b15ad80a5a7d42156cf4b8 (patch) | |
| tree | 0990b3e376d5e224caefc3a98e678e8d5b7de26e /.config | |
| parent | de2afae2825dbfcf92a2e1b43b02d60d3932ac2a (diff) | |
Added todo highlights in all files not just comments from treesitter
Diffstat (limited to '.config')
| -rw-r--r-- | .config/nvim/init.lua | 6 | ||||
| -rw-r--r-- | .config/nvim/lua/autocmds.lua | 80 |
2 files changed, 82 insertions, 4 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 1b45c73..e0a9875 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -12,12 +12,14 @@ end vim.print = _G.dd require('options') -vim.schedule(function() +-- WARNING: not sure why it was in schedule but that caused issues +-- WARNING: so I removed it +-- vim.schedule(function() require('keymaps') require('autocmds') require('usrcmds') require('extra') -end) +-- end) -- Enable all LSPs local lsp = require('lsp') diff --git a/.config/nvim/lua/autocmds.lua b/.config/nvim/lua/autocmds.lua index f69b7cb..ad8087b 100644 --- a/.config/nvim/lua/autocmds.lua +++ b/.config/nvim/lua/autocmds.lua @@ -19,7 +19,7 @@ vim.api.nvim_create_autocmd('BufEnter', { end, }) --- highlight %v, %s etc in go string literals +-- NOTE: highlight %v, %s etc in go string literals vim.api.nvim_create_autocmd({ 'BufEnter', 'TextChanged', 'InsertLeave' }, { pattern = '*.go', callback = function() @@ -55,7 +55,7 @@ vim.api.nvim_create_autocmd({ 'BufEnter', 'TextChanged', 'InsertLeave' }, { end, }) --- Snacks snippet to notify LSP servers when renaming files in oil.nvim +-- NOTE: Snacks snippet to notify LSP servers when renaming files in oil.nvim vim.api.nvim_create_autocmd('User', { pattern = 'OilActionsPost', callback = function(event) @@ -178,3 +178,79 @@ vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufEnter' }, { vim.api.nvim_buf_set_lines(0, 0, -1, false, content) end, }) + +-- NOTE: Function to highlight TODO/NOTE patterns +local ns = vim.api.nvim_create_namespace('todo_highlight') +local groups = { + todo = { + keywords = { 'TODO', 'WIP' }, + hl = '@comment.todo.comment', + }, + warning = { + keywords = { 'WARN', 'WARNING', 'HACK', 'SECURITY', 'SECURE' }, + hl = '@comment.warning.comment', + }, + error = { + keywords = { 'FIX', 'FIXME', 'BUG', 'ERROR', 'UNSAFE', 'SAFETY' }, + hl = '@comment.fix.comment', + }, + perf = { + keywords = { 'PERF', 'OPTIMIZE' }, + hl = '@comment.perf.comment', + }, + note = { + keywords = { 'NOTE', 'INFO', 'DOCS', 'TEST' }, + hl = '@comment.note.comment', + }, +} +local scopes = { + bracket = '@punctuation.bracket.comment', + constant = '@constant.comment', + delimiter = '@punctuation.delimiter.comment', +} + +function RenderTodoHighlights(bufnr) + vim.api.nvim_buf_clear_namespace(bufnr, ns, 0, -1) + local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) + + for i, line in ipairs(lines) do + -- 1) highlight keywords per group + for _, cfg in pairs(groups) do + for _, kw in ipairs(cfg.keywords) do + for s, e in line:gmatch('()' .. kw .. '()') do + vim.api.nvim_buf_add_highlight(bufnr, ns, cfg.hl, i - 1, s - 1, e - 1) + + -- 2) highlight (...) parts only if a group keyword was found + local start = 1 + while true do + local s, e = line:find('%b()', start) + if not s then + break + end + -- "(" and ")" + vim.api.nvim_buf_add_highlight(bufnr, ns, scopes.bracket, i - 1, s - 1, s) + vim.api.nvim_buf_add_highlight(bufnr, ns, scopes.bracket, i - 1, e - 1, e) + -- inner constant + if e - s > 1 then + vim.api.nvim_buf_add_highlight(bufnr, ns, scopes.constant, i - 1, s, e - 1) + end + start = e + 1 + end + + -- 3) highlight any ":" as delimiter only if a group keyword was found + for s, _ in line:gmatch('():') do + vim.api.nvim_buf_add_highlight(bufnr, ns, scopes.delimiter, i - 1, s - 1, s) + end + end + end + end + end +end + +vim.api.nvim_create_autocmd({ 'VimEnter', 'BufRead', 'BufWinEnter', 'BufWritePost', 'TextChanged', 'TextChangedI' }, { + nested = true, + callback = function(args) + local bufnr = args.buf + RenderTodoHighlights(bufnr) + end, +}) |
