Skip to content

Commit 55260b1

Browse files
committed
feat: refactor treesitter filetype detection
1 parent b7445b3 commit 55260b1

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

lua/vsnip/treesitter.lua

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ if not ok_utils then
1010
ts_utils = nil
1111
end
1212

13+
local function get_parser_filetype ( lang )
14+
if lang and ts_parsers.list[ lang ] then
15+
return ts_parsers.list[ lang ].filetype or lang
16+
else
17+
return ""
18+
end
19+
end
20+
1321
function M.is_available ()
1422
return ok_parsers and ok_utils
1523
end
@@ -22,8 +30,29 @@ function M.get_ft_at_cursor ( bufnr )
2230
local parser = ts_parsers.get_parser( bufnr )
2331
local lang = parser:language_for_range( { cur_node:range() } ):lang()
2432

25-
if ts_parsers.list[ lang ] ~= nil then
26-
return ts_parsers.list[ lang ].filetype or lang
33+
local filetype = get_parser_filetype( lang )
34+
35+
if filetype ~= "" then
36+
37+
-- XXX: not works
38+
local parent_parser = parser:parent()
39+
40+
if parent_parser then
41+
local parent_lang = parent_parser:lang()
42+
43+
if parent_lang and parent_lang ~= filetype then
44+
local parent_filetype = get_parser_filetype( parent_lang )
45+
46+
if parent_filetype ~= "" then
47+
filetype = filetype .. "." .. parent_filetype .. "/" .. filetype
48+
end
49+
end
50+
end
51+
52+
-- XXX
53+
vim.print( "--- " .. filetype )
54+
55+
return filetype
2756
end
2857
end
2958
end

0 commit comments

Comments
 (0)