feat(comment): allow commentstring to be determined from node metadata

**Problem:** Some weird languages have different comment syntax
depending on the location in the code, and we do not have a way to
determine the correct `commentstring` for these special cases.

**Solution:** Allow queries to specify `commentstring` values in
metadata, allowing users/`nvim-treesitter` to provide a better
commenting experience without hugely increasing the scope of the code in
core.
This commit is contained in:
Riley Bruins
2024-09-24 08:41:46 -07:00
committed by Christian Clason
parent 59c328bc88
commit 65c7033cbe
5 changed files with 164 additions and 0 deletions

View File

@@ -19,6 +19,18 @@ local function get_commentstring(ref_position)
local row, col = ref_position[1] - 1, ref_position[2]
local ref_range = { row, col, row, col + 1 }
-- Get 'commentstring' from tree-sitter captures' metadata.
-- Traverse backwards to prefer narrower captures.
local caps = vim.treesitter.get_captures_at_pos(0, row, col)
for i = #caps, 1, -1 do
local id, metadata = caps[i].id, caps[i].metadata
local md_cms = metadata['bo.commentstring'] or metadata[id] and metadata[id]['bo.commentstring']
if md_cms then
return md_cms
end
end
-- - Get 'commentstring' from the deepest LanguageTree which both contains
-- reference range and has valid 'commentstring' (meaning it has at least
-- one associated 'filetype' with valid 'commentstring').