From 0d041ecb255b13480fa921214a29f7aecb210331 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Sun, 7 Apr 2024 15:44:30 +0200 Subject: [PATCH] fix(loader): add entire luarocks lua path (#248) * fix(loader): add entire luarocks lua path * chore(loader): reduce failure notification level to warn --- nix/plugin-overlay.nix | 2 +- plugin/rocks.lua | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/nix/plugin-overlay.nix b/nix/plugin-overlay.nix index 958b5f83..96e0724f 100644 --- a/nix/plugin-overlay.nix +++ b/nix/plugin-overlay.nix @@ -170,7 +170,7 @@ in { -- Copied from installer.lua local rocks_config = { rocks_path = vim.fn.stdpath("data") .. "/rocks", - luarocks_binary = "${final.luarocks}/bin/luarocks", + luarocks_binary = "${final.lua51Packages.luarocks}/bin/luarocks", } vim.g.rocks_nvim = rocks_config diff --git a/plugin/rocks.lua b/plugin/rocks.lua index 8a556e59..a1a7b014 100644 --- a/plugin/rocks.lua +++ b/plugin/rocks.lua @@ -6,24 +6,30 @@ local nio = require("nio") local adapter = require("rocks.adapter") local config = require("rocks.config.internal") -local function get_luarocks_loader_path_from_luarocks() - local sc = vim.system({ config.luarocks_binary, "which", "luarocks.loader" }):wait() - return sc.stdout and sc.stdout:match("(%S+)loader.lua") +local function get_luarocks_lua_dir_from_luarocks() + local sc = vim.system({ config.luarocks_binary, "--lua-version=5.1", "which", "luarocks.loader" }):wait() + local result = sc.stdout and sc.stdout:match(vim.fs.joinpath("(%S+)", "luarocks", "loader.lua")) + return result end -- Initialize the luarocks loader if config.enable_luarocks_loader then local default_luarocks_binary = vim.fs.joinpath(config.rocks_path, "bin", "luarocks") - local luarocks_loader_path = config.luarocks_binary == default_luarocks_binary - and vim.fs.joinpath(default_luarocks_binary, "share", "lua", "5.1", "luarocks", "?.lua") - or get_luarocks_loader_path_from_luarocks() - if luarocks_loader_path then - package.path = package.path .. ";" .. luarocks_loader_path .. "?.lua" + local luarocks_lua_dir = config.luarocks_binary == default_luarocks_binary + and vim.fs.joinpath(default_luarocks_binary, "share", "lua", "5.1") + or get_luarocks_lua_dir_from_luarocks() + if luarocks_lua_dir then + package.path = package.path + .. ";" + .. table.concat({ + vim.fs.joinpath(luarocks_lua_dir, "?.lua"), + vim.fs.joinpath(luarocks_lua_dir, "init.lua"), + }, ";") vim.env.LUAROCKS_CONFIG = config.luarocks_config local ok, err = pcall(require, "luarocks.loader") -- TODO: log errors if not ok then - vim.notify("Failed to initialize luarocks loader: " .. err, vim.log.levels.ERROR, { + vim.notify("Failed to initialize luarocks loader: " .. err, vim.log.levels.WARN, { title = "rocks.nvim", }) end