working
This commit is contained in:
parent
5bdde24dfb
commit
dd1d1bb6e9
49 changed files with 2444 additions and 1322 deletions
140
lua/plugins/better-comments.lua
Normal file
140
lua/plugins/better-comments.lua
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
|
||||
-- TODO: don't having to resave to remove extmark
|
||||
-- TODO: see the others TODO
|
||||
|
||||
|
||||
local M = {}
|
||||
|
||||
local api = vim.api
|
||||
local cmd = vim.api.nvim_create_autocmd
|
||||
local treesitter = vim.treesitter
|
||||
local opts = {
|
||||
tags = {
|
||||
{
|
||||
name = "TODO",
|
||||
fg = "white",
|
||||
bg = "#0a7aca",
|
||||
bold = true,
|
||||
},
|
||||
{
|
||||
name = "FIX",
|
||||
fg = "white",
|
||||
bg = "#f44747",
|
||||
bold = true,
|
||||
},
|
||||
{
|
||||
name = "WARNING",
|
||||
fg = "#FFA500",
|
||||
bold = false,
|
||||
},
|
||||
{
|
||||
name = "FUTURE",
|
||||
fg = "#f44747",
|
||||
bold = true,
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
M.Setup = function(config)
|
||||
if config and config.default==false then
|
||||
opts.tags = {}
|
||||
end
|
||||
if config and config.tags then
|
||||
opts.tags = vim.tbl_deep_extend("force", opts.tags, config.tags or {})
|
||||
end
|
||||
|
||||
local augroup = vim.api.nvim_create_augroup("better-comments", {clear = true})
|
||||
cmd({ 'BufWinEnter', 'BufFilePost', 'BufWritePost', 'TextChanged', 'TextChangedI' }, {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
local current_buffer = api.nvim_get_current_buf()
|
||||
local current_buffer_name = api.nvim_buf_get_name(current_buffer)
|
||||
if current_buffer_name == '' then
|
||||
return
|
||||
end
|
||||
local fileType = api.nvim_buf_get_option(current_buffer, "filetype")
|
||||
local success, parsed_query = pcall(function()
|
||||
return treesitter.query.parse(fileType, [[(comment) @all]])
|
||||
end)
|
||||
if not success then
|
||||
return
|
||||
end
|
||||
local commentsTree = treesitter.query.parse(fileType, [[(comment) @all]])
|
||||
|
||||
-- FIX: Check if file has treesitter
|
||||
local root = Get_root(current_buffer, fileType)
|
||||
local comments = {}
|
||||
for _, node in commentsTree:iter_captures(root, current_buffer, 0, -1) do
|
||||
local range = { node:range() }
|
||||
table.insert(comments, {
|
||||
line = range[1],
|
||||
col_start = range[2],
|
||||
finish = range[4],
|
||||
text = vim.treesitter.get_node_text(node, current_buffer)
|
||||
})
|
||||
end
|
||||
|
||||
if comments == {} then
|
||||
return
|
||||
end
|
||||
Create_hl(opts.tags)
|
||||
|
||||
for id, comment in ipairs(comments) do
|
||||
for hl_id, hl in ipairs(opts.tags) do
|
||||
if string.find(comment.text, hl.name) then
|
||||
local ns_id = vim.api.nvim_create_namespace(hl.name)
|
||||
if hl.virtual_text and hl.virtual_text ~= "" then
|
||||
local v_opts = {
|
||||
id = id,
|
||||
virt_text = { { hl.virtual_text, "" } },
|
||||
virt_text_pos = 'overlay',
|
||||
virt_text_win_col = comment.finish + 2,
|
||||
}
|
||||
|
||||
-- FIX: comment.line -> 0 in col
|
||||
api.nvim_buf_set_extmark(current_buffer, ns_id, comment.line, 0, v_opts)
|
||||
end
|
||||
|
||||
-- FIX: using for ns_id ns_id instead of 0
|
||||
-- so that when we clear the namespace the color also clear
|
||||
vim.api.nvim_buf_add_highlight(current_buffer, ns_id, tostring(hl_id), comment.line,
|
||||
comment.col_start,
|
||||
comment.finish)
|
||||
else
|
||||
-- FIX: added else to delted extmark
|
||||
|
||||
-- TODO: THIS PART IS CALLED A LOT FIND A WAY TO NOT CHECK EVERY TIME
|
||||
if hl.virtual_text ~= "" then
|
||||
local ns_id = vim.api.nvim_create_namespace(hl.name)
|
||||
|
||||
-- FIX: clearing the namespace to delete the extmark and the color
|
||||
api.nvim_buf_clear_namespace(current_buffer, ns_id, comment.line, comment.line+1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
Get_root = function(bufnr, filetype)
|
||||
local parser = vim.treesitter.get_parser(bufnr, filetype, {})
|
||||
local tree = parser:parse()[1]
|
||||
return tree:root()
|
||||
end
|
||||
|
||||
function Create_hl(list)
|
||||
for id, hl in ipairs(list) do
|
||||
vim.api.nvim_set_hl(0, tostring(id), {
|
||||
fg = hl.fg,
|
||||
bg = hl.bg,
|
||||
bold = hl.bold,
|
||||
underline = hl.underline,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue