diff options
| author | William Boman <william@redwill.se> | 2021-12-29 16:58:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-29 16:58:06 +0100 |
| commit | e97c04c939d3380b0c734d5c1d464b9dc06a9e8f (patch) | |
| tree | 1a761437bbad68dd21e0720ef524d41334acce5c /scripts | |
| parent | fix(arduino_language_server): install clangd, also add docs on how to work wi... (diff) | |
| download | mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar.gz mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar.bz2 mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar.lz mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar.xz mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.tar.zst mason-e97c04c939d3380b0c734d5c1d464b9dc06a9e8f.zip | |
feat(ui): display interactive server settings schema table (#363)
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/autogen_metadata.lua | 59 | ||||
| -rwxr-xr-x | scripts/autogen_metadata.sh | 3 |
2 files changed, 54 insertions, 8 deletions
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua index 44af5526..3331f2db 100644 --- a/scripts/autogen_metadata.lua +++ b/scripts/autogen_metadata.lua @@ -1,4 +1,6 @@ local uv = vim.loop +local a = require "plenary.async" +local curl = require "plenary.curl" local Path = require "nvim-lsp-installer.path" local Data = require "nvim-lsp-installer.data" @@ -9,15 +11,24 @@ package.loaded["nvim-lsp-installer.fs"] = nil local servers = require "nvim-lsp-installer.servers" local generated_dir = Path.concat { vim.fn.getcwd(), "lua", "nvim-lsp-installer", "_generated" } +local schemas_dir = Path.concat { generated_dir, "schemas" } print("Creating directory " .. generated_dir) 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 + ---@param path string ---@param txt string ---@param flag string|number @@ -42,9 +53,13 @@ local function write_file(path, txt, flag) end) end +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 = require(("lspconfig.server_configurations.%s"):format(server.name)) + local config = get_lspconfig(server.name) local default_options = server:get_default_options() local filetypes = coalesce( -- nvim-lsp-installer options has precedence @@ -55,7 +70,7 @@ local function get_supported_filetypes(server) return filetypes end -do +local create_filetype_map = a.void(function() local filetype_map = {} local available_servers = servers.get_available_servers() @@ -70,9 +85,9 @@ do end write_file(Path.concat { generated_dir, "filetype_map.lua" }, "return " .. vim.inspect(filetype_map), "w") -end +end) -do +local create_autocomplete_map = a.void(function() ---@type table<string, Server> local language_map = {} @@ -112,9 +127,9 @@ do "return " .. vim.inspect(autocomplete_candidates), "w" ) -end +end) -do +local create_server_metadata = a.void(function() local metadata = {} ---@param server Server @@ -128,4 +143,34 @@ do end write_file(Path.concat { generated_dir, "metadata.lua" }, "return " .. vim.inspect(metadata), "w") -end +end) + +local create_setting_schema_files = a.void(function() + local available_servers = servers.get_available_servers() + + for _, server in pairs(available_servers) do + local config = get_lspconfig(server.name) + if config.docs.package_json then + local package_json_url = config.docs.package_json + print(("Fetching %q..."):format(package_json_url)) + local response = a.wrap(curl.get, 2)(package_json_url, {}) + assert(response.status == 200, "Failed to fetch package.json for " .. server.name) + local schema = vim.json.decode(response.body).contributes.configuration + 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 + write_file( + Path.concat { schemas_dir, ("%s.lua"):format(server.name) }, + "return " .. vim.inspect(schema, { newline = "", indent = "" }), + "w" + ) + end + end + end +end) + +create_filetype_map() +create_autocomplete_map() +create_server_metadata() +create_setting_schema_files() diff --git a/scripts/autogen_metadata.sh b/scripts/autogen_metadata.sh index 92a96bba..9e2339cf 100755 --- a/scripts/autogen_metadata.sh +++ b/scripts/autogen_metadata.sh @@ -5,8 +5,9 @@ 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 PLENARY_DIR="$NVIM_PACK_DIR/packer/start/plenary.nvim" declare -x LSP_INSTALLER_DIR="$PWD" nvim -u NONE -E -R --headless \ - --cmd "set rtp+=${LSP_INSTALLER_DIR},${LSP_CONFIG_DIR}" \ + --cmd "set rtp+=${PLENARY_DIR},${LSP_CONFIG_DIR},${LSP_INSTALLER_DIR}" \ +"luafile scripts/autogen_metadata.lua" +q |
