diff options
| author | William Boman <william@redwill.se> | 2022-07-07 15:00:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-07 15:00:05 +0200 |
| commit | a683a53470f5458bcf900ac36afdd81cb892242a (patch) | |
| tree | 4b455d3956e075a3a17fd6093ba6f79b571d0270 /lua | |
| parent | fix(r-languageserver): add missing desc (#5) (diff) | |
| download | mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar.gz mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar.bz2 mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar.lz mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar.xz mason-a683a53470f5458bcf900ac36afdd81cb892242a.tar.zst mason-a683a53470f5458bcf900ac36afdd81cb892242a.zip | |
feat: add delve and go-debug-adapter (#7)
* feat: add delve and go-debug-adapter
* fix(go): more package and mod mangling
* fix(ui): fix hydrating package state after reinstallation
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason/_generated/package_index.lua | 2 | ||||
| -rw-r--r-- | lua/mason/core/functional/init.lua | 1 | ||||
| -rw-r--r-- | lua/mason/core/functional/string.lua | 6 | ||||
| -rw-r--r-- | lua/mason/core/managers/go/init.lua | 31 | ||||
| -rw-r--r-- | lua/mason/packages/delve/init.lua | 11 | ||||
| -rw-r--r-- | lua/mason/packages/go-debug-adapter/init.lua | 24 | ||||
| -rw-r--r-- | lua/mason/ui/instance.lua | 1 |
7 files changed, 71 insertions, 5 deletions
diff --git a/lua/mason/_generated/package_index.lua b/lua/mason/_generated/package_index.lua index 32dac71c..55323c26 100644 --- a/lua/mason/_generated/package_index.lua +++ b/lua/mason/_generated/package_index.lua @@ -26,6 +26,7 @@ return { ["cssmodules-language-server"] = "mason.packages.cssmodules-language-server", ["cucumber-language-server"] = "mason.packages.cucumber-language-server", debugpy = "mason.packages.debugpy", + delve = "mason.packages.delve", deno = "mason.packages.deno", ["dhall-lsp"] = "mason.packages.dhall-lsp", ["diagnostic-languageserver"] = "mason.packages.diagnostic-languageserver", @@ -44,6 +45,7 @@ return { ["foam-language-server"] = "mason.packages.foam-language-server", fortls = "mason.packages.fortls", fsautocomplete = "mason.packages.fsautocomplete", + ["go-debug-adapter"] = "mason.packages.go-debug-adapter", ["golangci-lint"] = "mason.packages.golangci-lint", ["golangci-lint-langserver"] = "mason.packages.golangci-lint-langserver", gopls = "mason.packages.gopls", diff --git a/lua/mason/core/functional/init.lua b/lua/mason/core/functional/init.lua index cd28ecb7..fd24f9ee 100644 --- a/lua/mason/core/functional/init.lua +++ b/lua/mason/core/functional/init.lua @@ -73,6 +73,7 @@ _.split = string.split _.gsub = string.gsub _.trim = string.trim _.dedent = string.dedent +_.starts_with = string.starts_with -- table local tbl = require "mason.core.functional.table" diff --git a/lua/mason/core/functional/string.lua b/lua/mason/core/functional/string.lua index 8a5817a8..512c7ce1 100644 --- a/lua/mason/core/functional/string.lua +++ b/lua/mason/core/functional/string.lua @@ -65,4 +65,10 @@ _.dedent = fun.curryN(function(str) return lines:match "^(.-)%s*$" end, 1) +---@param prefix string +---@str string +_.starts_with = fun.curryN(function(prefix, str) + return vim.startswith(str, prefix) +end, 2) + return _ diff --git a/lua/mason/core/managers/go/init.lua b/lua/mason/core/managers/go/init.lua index efa062a6..e4f07df8 100644 --- a/lua/mason/core/managers/go/init.lua +++ b/lua/mason/core/managers/go/init.lua @@ -5,6 +5,8 @@ local spawn = require "mason.core.spawn" local a = require "mason.core.async" local Optional = require "mason.core.optional" local _ = require "mason.core.functional" +local fs = require "mason.core.fs" +local path = require "mason.core.path" local M = {} @@ -81,9 +83,28 @@ function M.parse_mod_version_output(output) return result end +local trim_wildcard_suffix = _.gsub("/%.%.%.$", "") + ---@param pkg string -function M.strip_package_wildcard(pkg) - return string.gsub(pkg, "/%.%.%.$", "") +function M.parse_package_mod(pkg) + if _.starts_with("github.com", pkg) then + local components = _.split("/", pkg) + return trim_wildcard_suffix(_.join("/", { + components[1], -- github.com + components[2], -- owner + components[3], -- repo + })) + elseif _.starts_with("golang.org", pkg) then + local components = _.split("/", pkg) + return trim_wildcard_suffix(_.join("/", { + components[1], -- golang.org + components[2], -- x + components[3], -- owner + components[4], -- repo + })) + else + return trim_wildcard_suffix(pkg) + end end ---@async @@ -93,7 +114,7 @@ function M.get_installed_primary_package_version(receipt, install_dir) if vim.in_fast_event() then a.scheduler() end - local normalized_pkg_name = M.strip_package_wildcard(receipt.primary_source.package) + local normalized_pkg_name = trim_wildcard_suffix(receipt.primary_source.package) -- trims e.g. golang.org/x/tools/gopls to gopls local executable = vim.fn.fnamemodify(normalized_pkg_name, ":t") return spawn @@ -105,7 +126,7 @@ function M.get_installed_primary_package_version(receipt, install_dir) }) :map_catching(function(result) local parsed_output = M.parse_mod_version_output(result.stdout) - return Optional.of_nilable(parsed_output.mod[normalized_pkg_name]) + return Optional.of_nilable(parsed_output.mod[M.parse_package_mod(receipt.primary_source.package)]) :or_else_throw "Failed to parse mod version" end) end @@ -114,7 +135,7 @@ end ---@param receipt InstallReceipt ---@param install_dir string function M.check_outdated_primary_package(receipt, install_dir) - local normalized_pkg_name = M.strip_package_wildcard(receipt.primary_source.package) + local normalized_pkg_name = M.parse_package_mod(receipt.primary_source.package) return spawn .go({ "list", diff --git a/lua/mason/packages/delve/init.lua b/lua/mason/packages/delve/init.lua new file mode 100644 index 00000000..eb6c9e59 --- /dev/null +++ b/lua/mason/packages/delve/init.lua @@ -0,0 +1,11 @@ +local Pkg = require "mason.core.package" +local go = require "mason.core.managers.go" + +return Pkg.new { + name = "delve", + desc = [[Delve is a debugger for the Go programming language.]], + homepage = "https://github.com/go-delve/delve", + languages = { Pkg.Lang.Go }, + categories = { Pkg.Cat.DAP }, + install = go.packages { "github.com/go-delve/delve/cmd/dlv", bin = { "dlv" } }, +} diff --git a/lua/mason/packages/go-debug-adapter/init.lua b/lua/mason/packages/go-debug-adapter/init.lua new file mode 100644 index 00000000..a191b730 --- /dev/null +++ b/lua/mason/packages/go-debug-adapter/init.lua @@ -0,0 +1,24 @@ +local Pkg = require "mason.core.package" +local github = require "mason.core.managers.github" +local _ = require "mason.core.functional" +local path = require "mason.core.path" + +return Pkg.new { + name = "go-debug-adapter", + desc = [[Go debug adapter sourced from the VSCode Go extension.]], + homepage = "https://github.com/golang/vscode-go", + languages = { Pkg.Lang.Go }, + categories = { Pkg.Cat.DAP }, + ---@async + ---@param ctx InstallContext + install = function(ctx) + github + .unzip_release_file({ + repo = "golang/vscode-go", + asset_file = _.compose(_.format "go-%s.vsix", _.gsub("^v", "")), + }) + .with_receipt() + ctx:write_node_exec_wrapper("go-debug-adapter", path.concat { "extension", "dist", "debugAdapter.js" }) + ctx:link_bin("go-debug-adapter", "go-debug-adapter") + end, +} diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua index 9f44966c..2f96e347 100644 --- a/lua/mason/ui/instance.lua +++ b/lua/mason/ui/instance.lua @@ -312,6 +312,7 @@ for _, pkg in ipairs(packages) do local pkg_state = state.packages.states[pkg.name] pkg_state.new_version = nil pkg_state.version = nil + pkg_state.has_expanded_before = false pkg_state.tailed_output = {} pkg_state.short_tailed_output = {} end) |
