From c7ce82666b862d71e2e1dc2c85926c6af172988a Mon Sep 17 00:00:00 2001 From: vonhyou Date: Wed, 18 Mar 2026 15:17:19 -0400 Subject: [PATCH 1/2] feat(pack): add elixir lang pack with `expert` LSP --- lua/astrocommunity/pack/elixir/README.md | 15 +++++++ lua/astrocommunity/pack/elixir/init.lua | 55 ++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 lua/astrocommunity/pack/elixir/README.md create mode 100644 lua/astrocommunity/pack/elixir/init.lua diff --git a/lua/astrocommunity/pack/elixir/README.md b/lua/astrocommunity/pack/elixir/README.md new file mode 100644 index 000000000..72d1a9d93 --- /dev/null +++ b/lua/astrocommunity/pack/elixir/README.md @@ -0,0 +1,15 @@ +# Elixir Language Pack + +**Requirements:** `elixir` and `mix` must be in your `PATH` and executable + +This plugin does the following: + +- Adds official [elixir-lang/expert](https://github.com/elixir-lang/expert) LSP. +- Adds `mix format` formatter via `conform.nvim` +- Adds `elixir`, `heex`, and `eex` Treesitter parsers + +## Note + +Expert is registered manually at runtime because AstroNvim pins `nvim-lspconfig` to a version predating `lsp/expert.lua`. + +This pack uses [Expert](https://expert-lsp.org), the **official** Elixir language server maintained under `elixir-lang`. It is currently in [release candidate stage](https://github.com/elixir-lang/expert/milestone/1). diff --git a/lua/astrocommunity/pack/elixir/init.lua b/lua/astrocommunity/pack/elixir/init.lua new file mode 100644 index 000000000..d3ddfe8f2 --- /dev/null +++ b/lua/astrocommunity/pack/elixir/init.lua @@ -0,0 +1,55 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + optional = true, + opts = function(_, opts) + if opts.ensure_installed ~= "all" then + opts.ensure_installed = + require("astrocore").list_insert_unique(opts.ensure_installed, { "elixir", "heex", "eex" }) + end + end, + }, + { + "WhoIsSethDaniel/mason-tool-installer.nvim", + optional = true, + opts = function(_, opts) + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { "expert" }) + end, + }, + { + "williamboman/mason-lspconfig.nvim", + optional = true, + opts = function(_, opts) + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { "expert" }) + end, + }, + { + "AstroNvim/astrolsp", + optional = true, + opts = function(_, opts) + local configs = require "lspconfig.configs" + if not configs.expert then + configs.expert = { + default_config = { + cmd = { "expert", "--stdio" }, + root_dir = function(fname) return require("lspconfig").util.root_pattern("mix.exs", ".git")(fname) end, + filetypes = { "elixir", "eelixir", "heex" }, + settings = {}, + }, + } + end + opts.servers = require("astrocore").list_insert_unique(opts.servers, { "expert" }) + end, + }, + { + "stevearc/conform.nvim", + optional = true, + opts = { + formatters_by_ft = { + elixir = { "mix" }, + heex = { "mix" }, + eex = { "mix" }, + }, + }, + }, +} From 00f09b344fd5ed64feec5b3b040d55034d79f5f2 Mon Sep 17 00:00:00 2001 From: vonhyou Date: Mon, 13 Apr 2026 17:51:59 -0400 Subject: [PATCH 2/2] add AstroNvim v6 compatibility --- lua/astrocommunity/pack/elixir/README.md | 5 ++- lua/astrocommunity/pack/elixir/init.lua | 46 ++++++++---------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/lua/astrocommunity/pack/elixir/README.md b/lua/astrocommunity/pack/elixir/README.md index 72d1a9d93..f6f15c259 100644 --- a/lua/astrocommunity/pack/elixir/README.md +++ b/lua/astrocommunity/pack/elixir/README.md @@ -7,9 +7,8 @@ This plugin does the following: - Adds official [elixir-lang/expert](https://github.com/elixir-lang/expert) LSP. - Adds `mix format` formatter via `conform.nvim` - Adds `elixir`, `heex`, and `eex` Treesitter parsers +- AstroNvim v6 compatiblity ## Note -Expert is registered manually at runtime because AstroNvim pins `nvim-lspconfig` to a version predating `lsp/expert.lua`. - -This pack uses [Expert](https://expert-lsp.org), the **official** Elixir language server maintained under `elixir-lang`. It is currently in [release candidate stage](https://github.com/elixir-lang/expert/milestone/1). +This pack uses [Expert](https://expert-lsp.org), the **official** Elixir language server maintained under `elixir-lang`. diff --git a/lua/astrocommunity/pack/elixir/init.lua b/lua/astrocommunity/pack/elixir/init.lua index d3ddfe8f2..178d6afbb 100644 --- a/lua/astrocommunity/pack/elixir/init.lua +++ b/lua/astrocommunity/pack/elixir/init.lua @@ -1,54 +1,36 @@ return { { - "nvim-treesitter/nvim-treesitter", - optional = true, - opts = function(_, opts) - if opts.ensure_installed ~= "all" then - opts.ensure_installed = - require("astrocore").list_insert_unique(opts.ensure_installed, { "elixir", "heex", "eex" }) - end - end, - }, - { - "WhoIsSethDaniel/mason-tool-installer.nvim", + "mason-org/mason-lspconfig.nvim", optional = true, opts = function(_, opts) opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { "expert" }) end, }, { - "williamboman/mason-lspconfig.nvim", + "AstroNvim/astrocore", optional = true, - opts = function(_, opts) - opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { "expert" }) - end, + ---@type AstroCoreOpts + opts = { + treesitter = { ensure_installed = { "elixir", "heex", "eex" } }, + }, }, { "AstroNvim/astrolsp", optional = true, - opts = function(_, opts) - local configs = require "lspconfig.configs" - if not configs.expert then - configs.expert = { - default_config = { - cmd = { "expert", "--stdio" }, - root_dir = function(fname) return require("lspconfig").util.root_pattern("mix.exs", ".git")(fname) end, - filetypes = { "elixir", "eelixir", "heex" }, - settings = {}, - }, - } - end - opts.servers = require("astrocore").list_insert_unique(opts.servers, { "expert" }) - end, + ---@type AstroLSPOpts + opts = { + servers = { "expert" }, + }, }, { "stevearc/conform.nvim", optional = true, opts = { formatters_by_ft = { - elixir = { "mix" }, - heex = { "mix" }, - eex = { "mix" }, + elixir = { "mix_format" }, + heex = { "mix_format" }, + eelixir = { "mix_format" }, + surface = { "mix_format" }, }, }, },