diff --git a/lua/mason-core/managers/github/init.lua b/lua/mason-core/managers/github/init.lua index 55f3600f4..a0336d30e 100644 --- a/lua/mason-core/managers/github/init.lua +++ b/lua/mason-core/managers/github/init.lua @@ -88,7 +88,7 @@ end ---@param processor async fun(opts: table) local function release_file_processor(filename, processor) ---@async - ---@param opts {repo: string, asset_file: string|fun(release: string):string} + ---@param opts {repo: string, version: Optional|nil, asset_file: string|fun(release: string):string} return function(opts) local release_file_source = M.release_file(opts) std.download_file(release_file_source.download_url, filename) diff --git a/lua/mason-registry/bash-debug-adapter/init.lua b/lua/mason-registry/bash-debug-adapter/init.lua new file mode 100644 index 000000000..9331d9677 --- /dev/null +++ b/lua/mason-registry/bash-debug-adapter/init.lua @@ -0,0 +1,45 @@ +local Pkg = require "mason-core.package" +local github = require "mason-core.managers.github" +local github_client = require "mason-core.managers.github.client" +local _ = require "mason-core.functional" +local path = require "mason-core.path" +local Optional = require "mason-core.optional" + +return Pkg.new { + name = "bash-debug-adapter", + desc = [[Bash shell debugger, based on bashdb.]], + homepage = "https://github.com/rogalmic/vscode-bash-debug", + languages = { Pkg.Lang.JavaScript, Pkg.Lang.TypeScript }, + categories = { Pkg.Cat.DAP }, + ---@async + ---@param ctx InstallContext + install = function(ctx) + local repo = "rogalmic/vscode-bash-debug" + ---@type GitHubRelease + local release = ctx.requested_version + :map(function(version) + return github_client.fetch_release(repo, version) + end) + :or_else_get(function() + return github_client.fetch_latest_release(repo) + end) + :get_or_throw() + + ---@type GitHubReleaseAsset + local release_asset = _.find_first(_.prop_satisfies(_.matches "%.vsix$", "name"), release.assets) + + github + .unzip_release_file({ + repo = repo, + asset_file = release_asset.name, + version = Optional.of(release.tag_name), + }) + .with_receipt() + + ctx.fs:rmrf(path.concat { "extension", "images" }) + ctx:link_bin( + "bash-debug-adapter", + ctx:write_node_exec_wrapper("bash-debug-adapter", path.concat { "extension", "out", "bashDebug.js" }) + ) + end, +} diff --git a/lua/mason-registry/index.lua b/lua/mason-registry/index.lua index 52b42b9dc..dd280326d 100644 --- a/lua/mason-registry/index.lua +++ b/lua/mason-registry/index.lua @@ -10,6 +10,7 @@ return { ["asm-lsp"] = "mason-registry.asm-lsp", ["astro-language-server"] = "mason-registry.astro-language-server", ["awk-language-server"] = "mason-registry.awk-language-server", + ["bash-debug-adapter"] = "mason-registry.bash-debug-adapter", ["bash-language-server"] = "mason-registry.bash-language-server", ["beancount-language-server"] = "mason-registry.beancount-language-server", ["bicep-lsp"] = "mason-registry.bicep-lsp", diff --git a/lua/mason/mappings/language.lua b/lua/mason/mappings/language.lua index e68cb5c0c..0b38eef1e 100644 --- a/lua/mason/mappings/language.lua +++ b/lua/mason/mappings/language.lua @@ -49,7 +49,7 @@ return { hoon = { "hoon-language-server" }, html = { "erb-lint", "html-lsp", "prettier", "prettierd" }, java = { "clang-format", "jdtls" }, - javascript = { "chrome-debug-adapter", "clang-format", "deno", "eslint-lsp", "eslint_d", "firefox-debug-adapter", "node-debug2-adapter", "prettier", "prettierd", "quick-lint-js", "rome", "typescript-language-server", "xo" }, + javascript = { "bash-debug-adapter", "chrome-debug-adapter", "clang-format", "deno", "eslint-lsp", "eslint_d", "firefox-debug-adapter", "node-debug2-adapter", "prettier", "prettierd", "quick-lint-js", "rome", "typescript-language-server", "xo" }, jinja = { "curlylint", "djlint" }, json = { "clang-format", "fixjson", "jq", "json-lsp", "prettier", "prettierd", "spectral-language-server" }, jsonnet = { "jsonnet-language-server" }, @@ -102,7 +102,7 @@ return { text = { "grammarly-languageserver", "ltex-ls", "proselint", "vale" }, toml = { "taplo" }, twig = { "curlylint" }, - typescript = { "chrome-debug-adapter", "deno", "eslint-lsp", "eslint_d", "firefox-debug-adapter", "node-debug2-adapter", "prettier", "prettierd", "rome", "typescript-language-server", "xo" }, + typescript = { "bash-debug-adapter", "chrome-debug-adapter", "deno", "eslint-lsp", "eslint_d", "firefox-debug-adapter", "node-debug2-adapter", "prettier", "prettierd", "rome", "typescript-language-server", "xo" }, v = { "vls" }, vala = { "vala-language-server" }, vimscript = { "vim-language-server", "vint" },