fix: tsx support lsp and treesitter

This commit is contained in:
asep komarudin 2024-02-18 21:29:22 +07:00
parent 523588ee4f
commit a25f1abde3
7 changed files with 118 additions and 5 deletions

View file

@ -0,0 +1,83 @@
local lspconfig_status_ok, lspconfig = pcall(require, "lspconfig")
if not lspconfig_status_ok then
return
end
lspconfig.tsserver.setup({
on_attach = require("user.lsp.handlers").on_attach,
capabilities = require("user.lsp.handlers").capabilities,
-- add cmd
cmd = { "typescript-language-server", "--stdio" },
-- add file type support
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
},
-- add dynamic root dir support
root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
init_options = {
hostInfo = "neovim",
},
})
lspconfig.emmet_ls.setup({
on_attach = require("user.lsp.handlers").on_attach,
capabilities = require("user.lsp.handlers").capabilities,
-- add cmd
cmd = { "emmet-ls", "-c", "--stdio" },
-- add file type support
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
},
-- add dynamic root dir support
root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
})
lspconfig.eslint.setup({
on_attach = require("user.lsp.handlers").on_attach,
capabilities = require("user.lsp.handlers").capabilities,
-- add cmd
cmd = { "vscode-eslint-language-server", "--stdio" }, -- add file type support
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
},
-- add dynamic root dir support
root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
})
local status_ok, configs = pcall(require, "nvim-treesitter.configs")
if not status_ok then
return
end
configs.setup({
ensure_installed = { "typescript", "tsx" }, -- pastikan parser TypeScript terinstal
highlight = {
enable = true, -- aktifkan highlight berbasis treesitter
additional_vim_regex_highlighting = false,
},
rainbow = {
enable = false,
},
incremental_selection = { enable = true },
indent = { enable = true, disable = { "python", "css" } },
autopairs = {
enable = true,
},
})
require("nvim-ts-autotag").setup()

View file

@ -38,14 +38,14 @@
"nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" }, "nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" },
"nvim-notify": { "branch": "master", "commit": "5371f4bfc1f6d3adf4fe9d62cd3a9d44356bfd15" }, "nvim-notify": { "branch": "master", "commit": "5371f4bfc1f6d3adf4fe9d62cd3a9d44356bfd15" },
"nvim-scrollview": { "branch": "main", "commit": "c29c5f69d37040a1fac88cbea7f5e6f06f0aff4d" }, "nvim-scrollview": { "branch": "main", "commit": "c29c5f69d37040a1fac88cbea7f5e6f06f0aff4d" },
"nvim-tree.lua": { "branch": "master", "commit": "2dbe4ea2b5dd29892f712835ed9f6df8afb22d75" }, "nvim-tree.lua": { "branch": "master", "commit": "d35a8d5ec6358ada4b058431b367b32360737466" },
"nvim-treesitter": { "branch": "master", "commit": "f197a15b0d1e8d555263af20add51450e5aaa1f0" }, "nvim-treesitter": { "branch": "master", "commit": "f197a15b0d1e8d555263af20add51450e5aaa1f0" },
"nvim-ts-autotag": { "branch": "main", "commit": "531f48334c422222aebc888fd36e7d109cb354cd" }, "nvim-ts-autotag": { "branch": "main", "commit": "531f48334c422222aebc888fd36e7d109cb354cd" },
"nvim-ts-context-commentstring": { "branch": "main", "commit": "7ab799a9792f7cf3883cf28c6a00ad431f3d382a" }, "nvim-ts-context-commentstring": { "branch": "main", "commit": "7ab799a9792f7cf3883cf28c6a00ad431f3d382a" },
"nvim-ts-rainbow2": { "branch": "master", "commit": "b3120cd5ae9ca524af9cb602f41e12e301fa985f" }, "nvim-ts-rainbow2": { "branch": "master", "commit": "b3120cd5ae9ca524af9cb602f41e12e301fa985f" },
"nvim-web-devicons": { "branch": "master", "commit": "a55b801b7ef5719ca25692c3a0a5447fdfb692ed" }, "nvim-web-devicons": { "branch": "master", "commit": "a55b801b7ef5719ca25692c3a0a5447fdfb692ed" },
"plenary.nvim": { "branch": "master", "commit": "50012918b2fc8357b87cff2a7f7f0446e47da174" }, "plenary.nvim": { "branch": "master", "commit": "50012918b2fc8357b87cff2a7f7f0446e47da174" },
"smart-splits.nvim": { "branch": "master", "commit": "36bfe63246386fc5ae2679aa9b17a7746b7403d5" }, "smart-splits.nvim": { "branch": "master", "commit": "e1e1e6ca3754bd8ef971fb69673cc17965eb9e37" },
"telescope.nvim": { "branch": "master", "commit": "b744cf59752aaa01561afb4223006de26f3836fd" }, "telescope.nvim": { "branch": "master", "commit": "b744cf59752aaa01561afb4223006de26f3836fd" },
"toggleterm.nvim": { "branch": "main", "commit": "193786e0371e3286d3bc9aa0079da1cd41beaa62" }, "toggleterm.nvim": { "branch": "main", "commit": "193786e0371e3286d3bc9aa0079da1cd41beaa62" },
"tokyonight.nvim": { "branch": "main", "commit": "67c6050e1ca41260c919236a098ba278472c7520" }, "tokyonight.nvim": { "branch": "main", "commit": "67c6050e1ca41260c919236a098ba278472c7520" },

View file

@ -0,0 +1,10 @@
return {
-- "pmizio/typescript-tools.nvim",
-- event = "BufRead",
-- dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" },
-- config = function()
-- require("typescript-tools").setup({
-- on_attach = require("user.lsp.handlers").on_attach,
-- })
-- end,
}

View file

@ -4,6 +4,8 @@ if not status_ok then
return return
end end
local Rule = require("nvim-autopairs.rule")
npairs.setup({ npairs.setup({
check_ts = true, check_ts = true,
ts_config = { ts_config = {
@ -14,7 +16,7 @@ npairs.setup({
disable_filetype = { "TelescopePrompt", "spectre_panel" }, disable_filetype = { "TelescopePrompt", "spectre_panel" },
fast_wrap = { fast_wrap = {
map = "<M-e>", map = "<M-e>",
chars = { "{", "[", "(", '"', "'" }, chars = { "{", "[", "(", '"', "'", "`" },
pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
offset = 0, -- Offset from pattern match offset = 0, -- Offset from pattern match
end_key = "$", end_key = "$",
@ -25,6 +27,14 @@ npairs.setup({
}, },
}) })
npairs.add_rules({
Rule("/", ">"):with_pair(function(opts)
local pair = opts.line:sub(opts.col, opts.col + 1)
if (vim.bo.filetype == "jsx" or vim.bo.filetype == "tsx") and pair == "/" then
return npairs.esc("/>") .. "<esc>i"
end
end),
})
-- If you want insert `(` after select function or method item -- If you want insert `(` after select function or method item
local cmp_autopairs = require("nvim-autopairs.completion.cmp") local cmp_autopairs = require("nvim-autopairs.completion.cmp")
local cmp_status_ok, cmp = pcall(require, "cmp") local cmp_status_ok, cmp = pcall(require, "cmp")

View file

@ -101,6 +101,10 @@ M.on_attach = function(client, bufnr)
client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentFormattingProvider = false
end end
if client.supports_method("textDocument/inlayHint") then
vim.lsp.inlay_hint.enable(bufnr, true)
end
lsp_keymaps(bufnr) lsp_keymaps(bufnr)
local status_ok, illuminate = pcall(require, "illuminate") local status_ok, illuminate = pcall(require, "illuminate")
if not status_ok then if not status_ok then

View file

@ -30,11 +30,11 @@ configs.setup({
-- }, -- },
rainbow = { rainbow = {
enable = true, enable = true,
disable = { "html" }, disable = { "html", "jsx" },
equery = "rainbow-parens", equery = "rainbow-parens",
strategy = require("ts-rainbow").strategy.global, strategy = require("ts-rainbow").strategy.global,
}, },
autotag = { enable = true }, -- autotag = { enable = true, enable_rename = true, enable_close = true, enable_close_on_slash = true },
incremental_selection = { enable = true }, incremental_selection = { enable = true },
indent = { enable = true, disable = { "python", "css" } }, indent = { enable = true, disable = { "python", "css" } },
autopairs = { autopairs = {

View file

@ -27,6 +27,12 @@ material_icon.setup({
cterm_color = "220", cterm_color = "220",
name = "jsx", name = "jsx",
}, },
["tsx"] = {
icon = "",
color = "#1354bf",
cterm_color = "220",
name = "Tsx",
},
["svg"] = { ["svg"] = {
icon = "󰜡", icon = "󰜡",
color = "#FDB03A", color = "#FDB03A",