aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-06 19:41:43 +0200
committerWilliam Boman <william@redwill.se>2022-07-07 00:39:59 +0200
commit5f634e0c37e723fc0c33e06b4fd5c2180178db40 (patch)
treefa4f09363adefa8259e23e4d1ea036db628b1243 /scripts
parentfeat(health): use stderr for java version, also check for JAVA_HOME (#765) (diff)
downloadmason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar.gz
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar.bz2
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar.lz
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar.xz
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.tar.zst
mason-5f634e0c37e723fc0c33e06b4fd5c2180178db40.zip
mason.nvim
Diffstat (limited to 'scripts')
-rw-r--r--scripts/autogen_metadata.lua143
-rwxr-xr-xscripts/autogen_metadata.sh4
2 files changed, 43 insertions, 104 deletions
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua
index dcc137f6..803a48de 100644
--- a/scripts/autogen_metadata.lua
+++ b/scripts/autogen_metadata.lua
@@ -1,12 +1,12 @@
-local a = require "nvim-lsp-installer.core.async"
-local Path = require "nvim-lsp-installer.core.path"
-local fetch = require "nvim-lsp-installer.core.fetch"
-local _ = require "nvim-lsp-installer.core.functional"
-local servers = require "nvim-lsp-installer.servers"
-local fs = require "nvim-lsp-installer.core.fs"
+local a = require "mason.core.async"
+local Path = require "mason.core.path"
+local fetch = require "mason.core.fetch"
+local _ = require "mason.core.functional"
+local fs = require "mason.core.fs"
+local lspconfig_server_mapping = require "mason-lspconfig.server-mapping"
-local generated_dir = Path.concat { vim.fn.getcwd(), "lua", "nvim-lsp-installer", "_generated" }
-local schemas_dir = Path.concat { generated_dir, "schemas" }
+local generated_dir = Path.concat { vim.fn.getcwd(), "lua", "mason", "_generated" }
+local schemas_dir = Path.concat { generated_dir, "lsp-schemas" }
print("Creating directory " .. generated_dir)
vim.fn.mkdir(generated_dir, "p")
@@ -14,16 +14,6 @@ vim.fn.mkdir(generated_dir, "p")
print("Creating directory " .. schemas_dir)
vim.fn.mkdir(schemas_dir, "p")
-for _, file in ipairs(vim.fn.glob(Path.concat { generated_dir, "*" }, 1, 1)) do
- print("Deleting " .. file)
- vim.fn.delete(file)
-end
-
-for _, file in ipairs(vim.fn.glob(Path.concat { schemas_dir, "*" }, 1, 1)) do
- print("Deleting " .. file)
- vim.fn.delete(file)
-end
-
---@async
---@param path string
---@param contents string
@@ -44,103 +34,37 @@ local function get_lspconfig(name)
return require(("lspconfig.server_configurations.%s"):format(name))
end
----@param server Server
-local function get_supported_filetypes(server)
- local config = get_lspconfig(server.name)
- local default_options = server:get_default_options()
- local filetypes = _.coalesce(
- -- nvim-lsp-installer options has precedence
- default_options and default_options.filetypes,
- config.default_config.filetypes,
- {}
- )
- return filetypes
-end
-
---@async
-local function create_filetype_map()
+local function create_lspconfig_filetype_map()
local filetype_map = {}
- local available_servers = servers.get_available_servers()
- for _, server in pairs(available_servers) do
- for _, filetype in pairs(get_supported_filetypes(server)) do
+ for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
+ local config = get_lspconfig(server_name)
+ for _, filetype in ipairs(config.default_config.filetypes or {}) do
if not filetype_map[filetype] then
filetype_map[filetype] = {}
end
- table.insert(filetype_map[filetype], server.name)
+ table.insert(filetype_map[filetype], server_name)
table.sort(filetype_map[filetype])
end
end
- write_file(Path.concat { generated_dir, "filetype_map.lua" }, "return " .. vim.inspect(filetype_map), "w")
-end
-
----@async
-local function create_autocomplete_map()
- ---@type table<string, Server>
- local language_map = {}
-
- local available_servers = servers.get_available_servers()
- for _, server in pairs(available_servers) do
- local languages = server.languages
- for _, language in pairs(languages) do
- if not language_map[language] then
- language_map[language] = {}
- end
- table.insert(language_map[language], server)
- end
- end
-
- local autocomplete_candidates = {}
- for language, language_servers in pairs(language_map) do
- local non_deprecated_servers = _.filter(_.prop_eq("deprecated", nil), language_servers)
- local is_candidate = #non_deprecated_servers > 0
-
- if #non_deprecated_servers == 1 then
- local server = non_deprecated_servers[1]
- is_candidate = not vim.startswith(server.name, language)
- end
-
- if is_candidate then
- autocomplete_candidates[language] = _.map(_.prop "name", non_deprecated_servers)
- table.sort(autocomplete_candidates[language])
- end
- end
-
- write_file(
- Path.concat { generated_dir, "language_autocomplete_map.lua" },
- "return " .. vim.inspect(autocomplete_candidates),
- "w"
- )
+ write_file(Path.concat { generated_dir, "lspconfig_filetype_map.lua" }, "return " .. vim.inspect(filetype_map), "w")
end
-
---@async
-local function create_server_metadata()
- local metadata = {}
-
- ---@param server Server
- local function create_metadata_entry(server)
- return { filetypes = get_supported_filetypes(server) }
- end
-
- local available_servers = servers.get_available_servers()
- for _, server in pairs(available_servers) do
- metadata[server.name] = create_metadata_entry(server)
+local function create_lsp_setting_schema_files()
+ for _, file in ipairs(vim.fn.glob(Path.concat { schemas_dir, "*" }, 1, 1)) do
+ print("Deleting " .. file)
+ vim.fn.delete(file)
end
- write_file(Path.concat { generated_dir, "metadata.lua" }, "return " .. vim.inspect(metadata), "w")
-end
-
----@async
-local function create_setting_schema_files()
- local available_servers = servers.get_available_servers()
local gist_data = fetch(
"https://gist.githubusercontent.com/williamboman/a01c3ce1884d4b57cc93422e7eae7702/raw/lsp-packages.json"
):get_or_throw()
local package_json_mappings = vim.json.decode(gist_data)
- for _, server in pairs(available_servers) do
- local package_json_url = package_json_mappings[server.name]
+ for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
+ local package_json_url = package_json_mappings[server_name]
if package_json_url then
print(("Fetching %q..."):format(package_json_url))
local response = fetch(package_json_url):get_or_throw()
@@ -150,10 +74,10 @@ local function create_setting_schema_files()
end
if not schema.properties then
-- Some servers (like dartls) seem to provide an array of configurations (for more than just LSP stuff)
- print(("Could not find appropriate schema structure for %s."):format(server.name))
+ print(("Could not find appropriate schema structure for %s."):format(server_name))
else
write_file(
- Path.concat { schemas_dir, ("%s.lua"):format(server.name) },
+ Path.concat { schemas_dir, ("%s.lua"):format(lspconfig_server_mapping.lspconfig_to_package[server_name]) },
"return " .. vim.inspect(schema, { newline = "", indent = "" }),
"w"
)
@@ -162,11 +86,26 @@ local function create_setting_schema_files()
end
end
+---@async
+local function create_package_index()
+ a.scheduler()
+ local packages = {}
+ local to_lua_path = _.compose(_.gsub("/", "."), _.gsub("^lua/", ""))
+ for _, package_path in ipairs(vim.fn.glob("lua/mason/packages/*/init.lua", false, true)) do
+ local package_filename = vim.fn.fnamemodify(package_path, ":h:t")
+ local lua_path = to_lua_path(vim.fn.fnamemodify(package_path, ":h"))
+ local pkg = require(lua_path)
+ assert(package_filename == pkg.name, ("Package name is not the same as its module name %s"):format(lua_path))
+ packages[pkg.name] = lua_path
+ end
+
+ write_file(Path.concat { generated_dir, "package_index.lua" }, "return " .. vim.inspect(packages), "w")
+end
+
a.run_blocking(function()
a.wait_all {
- create_filetype_map,
- create_autocomplete_map,
- create_server_metadata,
- create_setting_schema_files,
+ create_lspconfig_filetype_map, -- TODO is this needed?
+ create_lsp_setting_schema_files,
+ create_package_index,
}
end)
diff --git a/scripts/autogen_metadata.sh b/scripts/autogen_metadata.sh
index 970a2cb3..5e1b6ceb 100755
--- a/scripts/autogen_metadata.sh
+++ b/scripts/autogen_metadata.sh
@@ -5,8 +5,8 @@ declare -x XDG_DATA_HOME="${XDG_DATA_HOME:-"$HOME/.local/share"}"
declare -x NVIM_PACK_DIR="$XDG_DATA_HOME/nvim/site/pack"
declare -x LSP_CONFIG_DIR="$NVIM_PACK_DIR/packer/start/nvim-lspconfig"
-declare -x LSP_INSTALLER_DIR="$PWD"
+declare -x MASON_DIR="$PWD"
nvim -u NONE -E -R --headless \
- --cmd "set rtp+=${LSP_CONFIG_DIR},${LSP_INSTALLER_DIR}" \
+ --cmd "set rtp+=${LSP_CONFIG_DIR},${MASON_DIR}" \
+"luafile scripts/autogen_metadata.lua" +q