mirror of
https://github.com/windwp/nvim-ts-autotag.git
synced 2024-12-28 21:19:16 -06:00
fix(#199): Auto-tag react fragments
Detects if `<>` was typed in a react file (`js`, `jsx`, or `tsx`) and autocloses the fragment tag.
This commit is contained in:
parent
06fe07d752
commit
f4528df26e
@ -242,6 +242,42 @@ local function check_close_tag(close_slash_tag)
|
||||
return false
|
||||
end
|
||||
|
||||
local function is_react_file()
|
||||
local ft = vim.bo.ft
|
||||
-- check filetypes first.
|
||||
if ft == 'javascriptreact' or 'typescriptreact' then
|
||||
return true
|
||||
elseif ft ~= 'javascript' then
|
||||
return false
|
||||
end
|
||||
|
||||
local ok, buf_parser = pcall(vim.treesitter.get_parser)
|
||||
if not ok then
|
||||
return false
|
||||
end
|
||||
|
||||
local tree = buf_parser:parse(true)
|
||||
if not tree then
|
||||
return false
|
||||
end
|
||||
|
||||
local root = tree[1]:root()
|
||||
-- parse the tree for jsx nodes
|
||||
local query = vim.treesitter.query.parse('javascript', [[
|
||||
(jsx_element)
|
||||
(jsx_self_closing_element)
|
||||
]])
|
||||
|
||||
-- iterate over nodes to find jsx nodes
|
||||
for _, node in query:iter_captures(root, 0, 0, -1) do
|
||||
if node then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
M.close_tag = function()
|
||||
local ok, buf_parser = pcall(vim.treesitter.get_parser)
|
||||
if not ok then
|
||||
@ -252,6 +288,9 @@ M.close_tag = function()
|
||||
if result == true and tag_name ~= nil then
|
||||
vim.api.nvim_put({ string.format("</%s>", tag_name) }, "", true, false)
|
||||
vim.cmd([[normal! F>]])
|
||||
elseif is_react_file() then
|
||||
vim.api.nvim_put({ "</>" }, "", true, false)
|
||||
vim.cmd([[normal! F>]])
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user