diff --git a/autoload/emmet.vim b/autoload/emmet.vim index efafc3f..e242bea 100644 --- a/autoload/emmet.vim +++ b/autoload/emmet.vim @@ -379,8 +379,12 @@ function! emmet#getFileType(...) abort endif endif - let pos = emmet#util#getcurpos() - let type = synIDattr(synID(max([pos[1], 1]), max([pos[2], 1]), 1), 'name') + if get(g:, 'loaded_nvim_treesitter', 0) + let type = luaeval('require"emmet_utils".get_node_at_cursor()') + else + let pos = emmet#util#getcurpos() + let type = synIDattr(synID(max([pos[1], 1]), max([pos[2], 1]), 1), 'name') + endif " ignore htmlTagName as it seems to occur too often if type == 'htmlTagName' diff --git a/lua/emmet_utils.lua b/lua/emmet_utils.lua new file mode 100644 index 0000000..7f57d9a --- /dev/null +++ b/lua/emmet_utils.lua @@ -0,0 +1,25 @@ +local M = {} + +M.get_node_at_cursor = function() + local ts_utils = require("nvim-treesitter.ts_utils") + local node = ts_utils.get_node_at_cursor() + if not node then + return nil + end + + while node do + local node_type = node:type() + + if node_type == "element" then + return "html" + elseif node_type == "stylesheet" then + return "css" + end + + node = node:parent() + end + + return "" +end + +return M