diff --git a/hosts/dnsc-air/default.nix b/hosts/dnsc-air/default.nix index 399c6db..35d2804 100644 --- a/hosts/dnsc-air/default.nix +++ b/hosts/dnsc-air/default.nix @@ -42,6 +42,7 @@ stylua typescript-language-server vscode-langservers-extracted + astro-language-server lua-language-server prettierd eslint_d diff --git a/modules/nvim/config/lsp/astro.lua b/modules/nvim/config/lsp/astro.lua new file mode 100644 index 0000000..d653381 --- /dev/null +++ b/modules/nvim/config/lsp/astro.lua @@ -0,0 +1,25 @@ +local function get_typescript_server_path(root_dir) + local project_roots = vim.fs.find("node_modules", { path = root_dir, upward = true, limit = math.huge }) + for _, project_root in ipairs(project_roots) do + local typescript_path = project_root .. "/typescript" + local stat = vim.loop.fs_stat(typescript_path) + if stat and stat.type == "directory" then + return typescript_path .. "/lib" + end + end + return "" +end + +return { + cmd = { "astro-ls", "--stdio" }, + filetypes = { "astro" }, + root_markers = { "package.json", "tsconfig.json", "jsconfig.json", ".git" }, + init_options = { + typescript = {}, + }, + before_init = function(_, config) + if config.init_options and config.init_options.typescript and not config.init_options.typescript.tsdk then + config.init_options.typescript.tsdk = get_typescript_server_path(config.root_dir) + end + end, +} diff --git a/modules/nvim/config/lua/dnsc/lsp.lua b/modules/nvim/config/lua/dnsc/lsp.lua index f847b6b..a39dbf8 100644 --- a/modules/nvim/config/lua/dnsc/lsp.lua +++ b/modules/nvim/config/lua/dnsc/lsp.lua @@ -2,6 +2,7 @@ vim.lsp.enable("ts_ls") vim.lsp.enable("lua_ls") vim.lsp.enable("jsonls") vim.lsp.enable("nil_ls") +vim.lsp.enable("astro") vim.diagnostic.config({ virtual_text = false,