aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-registry/rust-analyzer/init.lua
blob: 39b25995693dfcc64efdb05071e1520bda4b8ca3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
local Pkg = require "mason-core.package"
local platform = require "mason-core.platform"
local _ = require "mason-core.functional"
local github = require "mason-core.managers.github"
local std = require "mason-core.managers.std"

local coalesce, when = _.coalesce, _.when

return Pkg.new {
    name = "rust-analyzer",
    desc = _.dedent [[
        rust-analyzer is an implementation of Language Server Protocol for the Rust programming language. It provides
        features like completion and goto definition for many code editors, including VS Code, Emacs and Vim.
    ]],
    homepage = "https://rust-analyzer.github.io",
    languages = { Pkg.Lang.Rust },
    categories = { Pkg.Cat.LSP },
    ---@async
    ---@param ctx InstallContext
    install = function(ctx)
        local libc = platform.get_libc()

        local asset_file = coalesce(
            when(platform.is.mac_arm64, "rust-analyzer-aarch64-apple-darwin.gz"),
            when(platform.is.mac_x64, "rust-analyzer-x86_64-apple-darwin.gz"),
            when(
                platform.is.linux,
                coalesce(
                    when(
                        libc == "glibc",
                        coalesce(
                            when(platform.arch == "arm64", "rust-analyzer-aarch64-unknown-linux-gnu.gz"),
                            when(platform.arch == "x64", "rust-analyzer-x86_64-unknown-linux-gnu.gz")
                        )
                    ),
                    when(
                        libc == "musl",
                        coalesce(when(platform.arch == "x64", "rust-analyzer-x86_64-unknown-linux-musl.gz"))
                    )
                )
            ),
            when(platform.is.win_arm64, "rust-analyzer-aarch64-pc-windows-msvc.gz"),
            when(platform.is.win_x64, "rust-analyzer-x86_64-pc-windows-msvc.gz")
        )

        github
            .gunzip_release_file({
                repo = "rust-lang/rust-analyzer",
                asset_file = asset_file,
                out_file = platform.is.win and "rust-analyzer.exe" or "rust-analyzer",
            })
            .with_receipt()
        std.chmod("+x", { "rust-analyzer" })
        ctx:link_bin("rust-analyzer", platform.is.win and "rust-analyzer.exe" or "rust-analyzer")
    end,
}