local lspconfig_status_ok, lspconfig = pcall(require, "lspconfig") if not lspconfig_status_ok then return end local function idxOf(array, value) for i, v in ipairs(array) do if v == value then return i end end return nil end local unregis_lsp = {} local data_ok, unregis = pcall(require, "core.config") if data_ok then if unregis.unregister_lsp ~= nil then unregis_lsp = unregis.unregister_lsp end end local idxts = idxOf(unregis_lsp, "tsserver") if idxts ~= nil then 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", }, }) end local idxemmet = idxOf(unregis_lsp, "emmet_ls") if idxemmet ~= nil then 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"), }) end local idxeslint = idxOf(unregis_lsp, "eslint") if idxeslint ~= nil then 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"), }) end 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()