aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-07 15:00:05 +0200
committerGitHub <noreply@github.com>2022-07-07 15:00:05 +0200
commita683a53470f5458bcf900ac36afdd81cb892242a (patch)
tree4b455d3956e075a3a17fd6093ba6f79b571d0270 /lua
parentfix(r-languageserver): add missing desc (#5) (diff)
downloadmason-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.lua2
-rw-r--r--lua/mason/core/functional/init.lua1
-rw-r--r--lua/mason/core/functional/string.lua6
-rw-r--r--lua/mason/core/managers/go/init.lua31
-rw-r--r--lua/mason/packages/delve/init.lua11
-rw-r--r--lua/mason/packages/go-debug-adapter/init.lua24
-rw-r--r--lua/mason/ui/instance.lua1
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)