diff options
| author | William Boman <william@redwill.se> | 2022-07-06 19:41:43 +0200 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2022-07-07 00:39:59 +0200 |
| commit | 5f634e0c37e723fc0c33e06b4fd5c2180178db40 (patch) | |
| tree | fa4f09363adefa8259e23e4d1ea036db628b1243 /scripts | |
| parent | feat(health): use stderr for java version, also check for JAVA_HOME (#765) (diff) | |
| download | mason-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.lua | 143 | ||||
| -rwxr-xr-x | scripts/autogen_metadata.sh | 4 |
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 |
