aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--scripts/autogen_metadata.lua6
-rw-r--r--tests/core/managers/go_spec.lua27
9 files changed, 88 insertions, 21 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)
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua
index ff57794b..d28e2803 100644
--- a/scripts/autogen_metadata.lua
+++ b/scripts/autogen_metadata.lua
@@ -106,9 +106,9 @@ local function create_package_index()
end
a.run_blocking(function()
- a.wait_all {
+ a.wait_all(_.filter(_.identity, {
create_lspconfig_filetype_map, -- TODO is this needed?
- create_lsp_setting_schema_files,
+ not vim.env.SKIP_SCHEMAS and create_lsp_setting_schema_files,
create_package_index,
- }
+ }))
end)
diff --git a/tests/core/managers/go_spec.lua b/tests/core/managers/go_spec.lua
index 0afe09a8..7526120e 100644
--- a/tests/core/managers/go_spec.lua
+++ b/tests/core/managers/go_spec.lua
@@ -63,8 +63,8 @@ end)
describe("go version check", function()
local go_version_output = [[
gopls: go1.18
- path golang.org/x/tools/gopls
- mod golang.org/x/tools/gopls v0.8.1 h1:q5nDpRopYrnF4DN/1o8ZQ7Oar4Yd4I5OtGMx5RyV2/8=
+ path golang.org/x/tools/cmd
+ mod golang.org/x/tools/cmd v0.8.1 h1:q5nDpRopYrnF4DN/1o8ZQ7Oar4Yd4I5OtGMx5RyV2/8=
dep github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
dep mvdan.cc/xurls/v2 v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=
build -compiler=gc
@@ -74,8 +74,8 @@ gopls: go1.18
it("should parse go version output", function()
local parsed = go.parse_mod_version_output(go_version_output)
assert.same({
- path = { ["golang.org/x/tools/gopls"] = "" },
- mod = { ["golang.org/x/tools/gopls"] = "v0.8.1" },
+ path = { ["golang.org/x/tools/cmd"] = "" },
+ mod = { ["golang.org/x/tools/cmd"] = "v0.8.1" },
dep = { ["github.com/google/go-cmp"] = "v0.5.7", ["mvdan.cc/xurls/v2"] = "v2.4.0" },
build = { ["-compiler=gc"] = "", ["GOOS=darwin"] = "" },
}, parsed)
@@ -92,7 +92,7 @@ gopls: go1.18
mock.new {
primary_source = mock.new {
type = "go",
- package = "golang.org/x/tools/gopls/...",
+ package = "golang.org/x/tools/cmd/gopls/...",
},
},
path.package_prefix "dummy"
@@ -105,6 +105,7 @@ gopls: go1.18
"gopls",
cwd = path.package_prefix "dummy",
}
+ print(result:err_or_nil())
assert.is_true(result:is_success())
assert.equals("v0.8.1", result:get_or_nil())
@@ -121,7 +122,7 @@ gopls: go1.18
"list",
"-json",
"-m",
- "golang.org/x/tools/gopls@latest",
+ "golang.org/x/tools/cmd@latest",
cwd = path.package_prefix "dummy",
})
.returns(Result.success {
@@ -147,7 +148,7 @@ gopls: go1.18
mock.new {
primary_source = mock.new {
type = "go",
- package = "golang.org/x/tools/gopls/...",
+ package = "golang.org/x/tools/cmd/gopls/...",
},
},
path.package_prefix "dummy"
@@ -155,7 +156,7 @@ gopls: go1.18
assert.is_true(result:is_success())
assert.same({
- name = "golang.org/x/tools/gopls",
+ name = "golang.org/x/tools/cmd",
current_version = "v0.8.1",
latest_version = "v2.0.0",
}, result:get_or_nil())
@@ -164,10 +165,10 @@ gopls: go1.18
end)
)
- it("should trim package wildcard specifier", function()
- assert.equals(
- "https://github.com/cweill/gotests",
- go.strip_package_wildcard "https://github.com/cweill/gotests/..."
- )
+ it("should parse package mod names", function()
+ assert.equals("github.com/cweill/gotests", go.parse_package_mod "github.com/cweill/gotests/...")
+ assert.equals("golang.org/x/tools/gopls", go.parse_package_mod "golang.org/x/tools/gopls/...")
+ assert.equals("golang.org/x/crypto", go.parse_package_mod "golang.org/x/crypto/...")
+ assert.equals("github.com/go-delve/delve", go.parse_package_mod "github.com/go-delve/delve/cmd/dlv")
end)
end)