Skip to content

Commit a743abf

Browse files
committed
feat: refactor treesitter filetype detection
1 parent a75d2f2 commit a743abf

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

autoload/vsnip/source.vim

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,25 @@ endfunction
2323
"
2424
function! vsnip#source#filetypes( bufnr ) abort
2525
if has( "nvim" )
26-
let l:filetype = v:lua.require'vsnip.treesitter'.get_ft_at_cursor( a:bufnr )
26+
let l:filetypes = v:lua.require'vsnip.treesitter'.get_ft_at_cursor( a:bufnr )
27+
28+
if l:filetypes.filetype == ""
29+
return [ "global" ]
30+
else
31+
return get(
32+
\ g:vsnip_filetypes, l:filetypes.injected_filetype,
33+
\ get( g:vsnip_filetypes, l:filetypes.filetype,
34+
\ [ l:filetypes.filetype ]
35+
\ ) )
36+
\ + [ "global" ]
37+
endif
2738
else
2839
let l:filetype = getbufvar( a:bufnr, "&filetype", "" )
29-
endif
3040

31-
return split( l:filetype, '\.' ) + get( g:vsnip_filetypes, l:filetype, [] ) + [ "global" ]
41+
" FIXME: split( l:filetype, '\.' ) - does it has any sense, can buffer filetype contain "." character?
42+
" return split( l:filetype, '\.' ) + get( g:vsnip_filetypes, l:filetype, [] ) + [ "global" ]
43+
return [ l:filetype ] + get( g:vsnip_filetypes, l:filetype, [] ) + [ "global" ]
44+
endif
3245
endfunction
3346

3447
"

lua/vsnip/treesitter.lua

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ function M.is_available ()
2323
end
2424

2525
function M.get_ft_at_cursor ( bufnr )
26+
local filetypes = {
27+
filetype = "",
28+
injected_filetype = "",
29+
}
30+
2631
if M.is_available() then
2732
local cur_node = ts_utils.get_node_at_cursor( vim.fn.bufwinid( bufnr ) )
2833

@@ -34,23 +39,27 @@ function M.get_ft_at_cursor ( bufnr )
3439
local filetype = get_parser_filetype( language_at_cursor )
3540

3641
if filetype ~= "" then
42+
filetypes.filetype = filetype
43+
3744
local parent_language_tree = language_tree_at_cursor:parent()
3845

3946
if parent_language_tree then
4047
local parent_language = parent_language_tree:lang()
4148
local parent_filetype = get_parser_filetype( parent_language )
4249

4350
if parent_filetype ~= "" then
44-
filetype = filetype .. "." .. parent_filetype .. "/" .. filetype
51+
filetypes.injected_filetype = parent_filetype .. "/" .. filetype
4552
end
4653
end
4754

48-
return filetype
55+
return filetypes
4956
end
5057
end
5158
end
5259

53-
return vim.bo[ bufnr ].filetype or ""
60+
filetypes.filetype = vim.bo[ bufnr ].filetype or ""
61+
62+
return filetypes
5463
end
5564

5665
return M

0 commit comments

Comments
 (0)