From b7d401af503e3e9d69931c111a21c6608e5f2e7e Mon Sep 17 00:00:00 2001 From: Mitchell Hanberg Date: Wed, 7 Jun 2023 23:59:58 -0400 Subject: [PATCH] feat(credo): auto install latest version --- bin/credo-language-server | 2 +- lua/elixir/init.lua | 5 ++--- lua/elixir/utils.lua | 11 +++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/bin/credo-language-server b/bin/credo-language-server index b50aebc2..5ec88a68 100755 --- a/bin/credo-language-server +++ b/bin/credo-language-server @@ -2,6 +2,6 @@ System.no_halt(true) -Mix.install([ {:credo_language_server, System.get_env("CREDO_LSP_VERSION")}, ]) +Mix.install([{:credo_language_server, System.get_env("CREDO_LSP_VERSION")}]) Application.ensure_all_started(:credo_language_server) diff --git a/lua/elixir/init.lua b/lua/elixir/init.lua index 714a57f8..1ba8bd56 100644 --- a/lua/elixir/init.lua +++ b/lua/elixir/init.lua @@ -2,6 +2,7 @@ local elixirls = require("elixir.elixirls") local credo = require("elixir.credo") local mix = require("elixir.mix") local projectionist = require("elixir.projectionist") +local utils = require("elixir.utils") local M = {} @@ -16,8 +17,6 @@ M.credo.default_bin = ( vim.fn.fnamemodify(debug.getinfo(1).source, ":h") .. "/../../bin/credo-language-server" ):gsub("^@", "") -M.credo.default_version = "0.0.5" - local enabled = function(value) return value == nil or value == true end @@ -33,7 +32,7 @@ function M.setup(opts) end if not opts.credo.version then - opts.credo.version = M.credo.default_version + opts.credo.version = utils.latest_release("elixir-tools", "credo-language-server") end mix.setup() diff --git a/lua/elixir/utils.lua b/lua/elixir/utils.lua index 90a6bb83..52716e41 100644 --- a/lua/elixir/utils.lua +++ b/lua/elixir/utils.lua @@ -22,4 +22,15 @@ function M.root_dir(fname) return vim.fs.dirname(maybe_umbrella_path or child_or_root_path) end +function M.latest_release(owner, repo) + local curl = string.format( + [[curl --silent -L -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/%s/%s/releases/latest]], + owner, + repo + ) + local resp = vim.json.decode(vim.fn.system(curl)) + + return resp and resp.tag_name or nil +end + return M