aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-12-29 16:58:06 +0100
committerGitHub <noreply@github.com>2021-12-29 16:58:06 +0100
commite97c04c939d3380b0c734d5c1d464b9dc06a9e8f (patch)
tree1a761437bbad68dd21e0720ef524d41334acce5c /scripts
parentfix(arduino_language_server): install clangd, also add docs on how to work wi... (diff)
downloadmason-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.lua59
-rwxr-xr-xscripts/autogen_metadata.sh3
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