mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-13 17:00:09 -04:00
feat: provide a statusline indicator
It will show the current branch at the cursor going the tree as such. root->node->subnode->leaf If an argument is provided to `statusline`, then the tree will be truncated as follows : ..->subnode->subnode
This commit is contained in:
parent
5cc7407c7f
commit
7682a1a49f
3 changed files with 36 additions and 1 deletions
3
autoload/nvim_treesitter.vim
Normal file
3
autoload/nvim_treesitter.vim
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
function! nvim_treesitter#statusline(len)
|
||||||
|
return luaeval("require'nvim-treesitter'.statusline(_A)", a:len)
|
||||||
|
endfunction
|
||||||
|
|
@ -24,4 +24,35 @@ function M.setup(lang)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.statusline(indicator_size)
|
||||||
|
local indicator_size = indicator_size or 1000
|
||||||
|
local expr = require"nvim-treesitter.utils".expression_at_point()
|
||||||
|
local current_node =
|
||||||
|
require'nvim-treesitter.node_movement'.current_node[api.nvim_get_current_buf()]
|
||||||
|
|
||||||
|
local indicator = ""
|
||||||
|
while expr and (#indicator + #(expr:type()) + 5) < indicator_size do
|
||||||
|
|
||||||
|
local prefix = ""
|
||||||
|
if expr:parent() then
|
||||||
|
prefix = "->"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if expr == current_node then
|
||||||
|
indicator = string.format("%s[%s]%s", prefix, expr:type(), indicator)
|
||||||
|
else
|
||||||
|
indicator = prefix .. expr:type() .. indicator
|
||||||
|
end
|
||||||
|
|
||||||
|
expr = expr:parent()
|
||||||
|
end
|
||||||
|
|
||||||
|
if expr then
|
||||||
|
return "..." .. indicator
|
||||||
|
else
|
||||||
|
return indicator
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,12 @@ local M = {}
|
||||||
|
|
||||||
function M.has_parser(lang)
|
function M.has_parser(lang)
|
||||||
local lang = lang or api.nvim_buf_get_option(0, 'filetype')
|
local lang = lang or api.nvim_buf_get_option(0, 'filetype')
|
||||||
|
if not lang or #lang == 0 then return false end
|
||||||
return #api.nvim_get_runtime_file('parser/' .. lang .. '.*', false) > 0
|
return #api.nvim_get_runtime_file('parser/' .. lang .. '.*', false) > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.get_parser(bufnr, lang)
|
function M.get_parser(bufnr, lang)
|
||||||
if M.has_parser() then
|
if M.has_parser(lang) then
|
||||||
local buf = bufnr or api.nvim_get_current_buf()
|
local buf = bufnr or api.nvim_get_current_buf()
|
||||||
local lang = lang or api.nvim_buf_get_option(buf, 'ft')
|
local lang = lang or api.nvim_buf_get_option(buf, 'ft')
|
||||||
if not M[buf] then
|
if not M[buf] then
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue