diff options
| author | William Boman <william@redwill.se> | 2022-07-09 01:00:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-09 01:00:34 +0200 |
| commit | d132a7a673d43b2da73f75e09fbe7fb49c431514 (patch) | |
| tree | 4b3b10d68ee149382d71b6977664bcb9d6dd2d20 /scripts/lua/mason-scripts | |
| parent | feat: add black (#34) (diff) | |
| download | mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.gz mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.bz2 mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.lz mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.xz mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.zst mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.zip | |
chore(workflow): modularize scripts and remove mason-lspconfig from CI checks (#36)
Diffstat (limited to 'scripts/lua/mason-scripts')
| -rw-r--r-- | scripts/lua/mason-scripts/mason-lspconfig/generate.lua | 39 | ||||
| -rw-r--r-- | scripts/lua/mason-scripts/mason-schemas/generate.lua | 63 | ||||
| -rw-r--r-- | scripts/lua/mason-scripts/mason/generate.lua | 49 | ||||
| -rw-r--r-- | scripts/lua/mason-scripts/utils.lua | 21 |
4 files changed, 172 insertions, 0 deletions
diff --git a/scripts/lua/mason-scripts/mason-lspconfig/generate.lua b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua new file mode 100644 index 00000000..2fa58692 --- /dev/null +++ b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua @@ -0,0 +1,39 @@ +local a = require "mason-core.async" +local path = require "mason-core.path" +local _ = require "mason-core.functional" +local lspconfig_server_mapping = require "mason-lspconfig.mappings.server" +local script_utils = require "mason-scripts.utils" + +local MASON_LSPCONFIG_DIR = path.concat { vim.loop.cwd(), "lua", "mason-lspconfig" } + +local function get_lspconfig(name) + return require(("lspconfig.server_configurations.%s"):format(name)) +end + +---@async +local function create_lspconfig_filetype_map() + local filetype_map = {} + + 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.sort(filetype_map[filetype]) + end + end + + script_utils.write_file( + path.concat { MASON_LSPCONFIG_DIR, "mappings", "filetype.lua" }, + "return " .. vim.inspect(filetype_map), + "w" + ) +end + +a.run_blocking(function() + a.wait_all { + create_lspconfig_filetype_map, + } +end) diff --git a/scripts/lua/mason-scripts/mason-schemas/generate.lua b/scripts/lua/mason-scripts/mason-schemas/generate.lua new file mode 100644 index 00000000..20793fcb --- /dev/null +++ b/scripts/lua/mason-scripts/mason-schemas/generate.lua @@ -0,0 +1,63 @@ +local a = require "mason-core.async" +local path = require "mason-core.path" +local fetch = require "mason-core.fetch" +local _ = require "mason-core.functional" +local lspconfig_server_mapping = require "mason-lspconfig.mappings.server" +local script_utils = require "mason-scripts.utils" + +local MASON_SCHEMAS_DIR = path.concat { vim.loop.cwd(), "lua", "mason-schemas" } + +---@async +local function create_lsp_setting_schema_files() + local lsp_schemas_path = path.concat { MASON_SCHEMAS_DIR, "lsp" } + + for _, file in + ipairs(vim.fn.glob( + path.concat { + lsp_schemas_path, + "*", + }, + 1, + 1 + )) + do + print("Deleting " .. file) + vim.fn.delete(file) + end + + 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_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() + local schema = vim.json.decode(response) + if schema.contributes and schema.contributes.configuration then + schema = schema.contributes.configuration + 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)) + else + script_utils.write_file( + path.concat { + lsp_schemas_path, + ("%s.lua"):format(lspconfig_server_mapping.lspconfig_to_package[server_name]), + }, + "return " .. vim.inspect(schema, { newline = "", indent = "" }), + "w" + ) + end + end + end +end + +a.run_blocking(function() + a.wait_all { + create_lsp_setting_schema_files, + } +end) diff --git a/scripts/lua/mason-scripts/mason/generate.lua b/scripts/lua/mason-scripts/mason/generate.lua new file mode 100644 index 00000000..5d02ab56 --- /dev/null +++ b/scripts/lua/mason-scripts/mason/generate.lua @@ -0,0 +1,49 @@ +local a = require "mason-core.async" +local path = require "mason-core.path" +local _ = require "mason-core.functional" +local registry = require "mason-registry" +local script_utils = require "mason-scripts.utils" + +local MASON_DIR = path.concat { vim.loop.cwd(), "lua", "mason" } +local MASON_REGISTRY_DIR = path.concat { vim.loop.cwd(), "lua", "mason-registry" } + +---@async +local function create_language_map() + local language_map = {} + local sorted_packages = _.sort_by(_.prop "name", registry.get_all_packages()) + _.each(function(pkg) + _.each(function(language) + local language_lc = language:lower() + language_map[language_lc] = _.append(pkg.name, language_map[language_lc] or {}) + end, pkg.spec.languages) + end, sorted_packages) + + script_utils.write_file( + path.concat { MASON_DIR, "mappings", "language.lua" }, + "return " .. vim.inspect(language_map), + "w" + ) +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-registry/*/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 + + script_utils.write_file(path.concat { MASON_REGISTRY_DIR, "index.lua" }, "return " .. vim.inspect(packages), "w") +end + +a.run_blocking(function() + a.wait_all { + create_language_map, + create_package_index, + } +end) diff --git a/scripts/lua/mason-scripts/utils.lua b/scripts/lua/mason-scripts/utils.lua new file mode 100644 index 00000000..771d419a --- /dev/null +++ b/scripts/lua/mason-scripts/utils.lua @@ -0,0 +1,21 @@ +local fs = require "mason-core.fs" + +local M = {} + +---@async +---@param path string +---@param contents string +---@param flags string +function M.write_file(path, contents, flags) + fs.async.write_file( + path, + table.concat({ + "-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.", + "-- stylua: ignore start", + contents, + }, "\n"), + flags + ) +end + +return M |
