Skip to content

Commit

Permalink
fix(windwp#199): Auto-tag react fragments
Browse files Browse the repository at this point in the history
Detects if `<>` was typed in a react file (`js`, `jsx`, or `tsx`)
and autocloses the fragment tag.
  • Loading branch information
roy.crippen4 committed Jul 14, 2024
1 parent 06fe07d commit f4528df
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions lua/nvim-ts-autotag/internal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down

0 comments on commit f4528df

Please sign in to comment.