feat: get null-ls registered providers by filetype (#1186)

This commit is contained in:
kylo252 2021-07-31 15:04:22 +02:00 committed by GitHub
parent f36082da0d
commit 8157f50d13
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 10 deletions

View file

@ -203,25 +203,19 @@ table.insert(gls.right, {
local function get_attached_provider_name(msg) local function get_attached_provider_name(msg)
msg = msg or "LSP Inactive" msg = msg or "LSP Inactive"
local buf_clients = vim.lsp.buf_get_clients() local buf_clients = vim.lsp.buf_get_clients()
local utils = require "utils"
if next(buf_clients) == nil then if next(buf_clients) == nil then
return msg return msg
end end
local buf_ft = vim.bo.filetype local buf_ft = vim.bo.filetype
local buf_client_names = {} local buf_client_names = {}
local null_ls_providers = require("lsp.null-ls").requested_providers local null_ls_providers = require("lsp.null-ls").get_registered_providers_by_filetype(buf_ft)
for _, client in pairs(buf_clients) do for _, client in pairs(buf_clients) do
if client.name == "null-ls" then if client.name ~= "null-ls" then
for _, provider in pairs(null_ls_providers) do
if vim.tbl_contains(provider.filetypes, buf_ft) then
if not vim.tbl_contains(buf_client_names, provider.name) then
table.insert(buf_client_names, provider.name)
end
end
end
else
table.insert(buf_client_names, client.name) table.insert(buf_client_names, client.name)
end end
end end
utils.list_extend_unique(buf_client_names, null_ls_providers)
return table.concat(buf_client_names, ", ") return table.concat(buf_client_names, ", ")
end end

View file

@ -6,6 +6,17 @@ local nodejs_local_providers = { "prettier", "prettierd", "prettier_d_slim", "es
M.requested_providers = {} M.requested_providers = {}
function M.get_registered_providers_by_filetype(ft)
local matches = {}
for _, provider in pairs(M.requested_providers) do
if vim.tbl_contains(provider.filetypes, ft) then
table.insert(matches, provider.name)
end
end
return matches
end
local function is_nodejs_provider(provider) local function is_nodejs_provider(provider)
for _, local_provider in ipairs(nodejs_local_providers) do for _, local_provider in ipairs(nodejs_local_providers) do
if local_provider == provider.exe then if local_provider == provider.exe then

View file

@ -110,6 +110,32 @@ function utils.is_string(t)
return type(t) == "string" return type(t) == "string"
end end
--- Extends a list-like table with the unique values of another list-like table.
---
--- NOTE: This mutates dst!
---
--@see |vim.tbl_extend()|
---
--@param dst list which will be modified and appended to.
--@param src list from which values will be inserted.
--@param start Start index on src. defaults to 1
--@param finish Final index on src. defaults to #src
--@returns dst
function utils.list_extend_unique(dst, src, start, finish)
vim.validate {
dst = { dst, "t" },
src = { src, "t" },
start = { start, "n", true },
finish = { finish, "n", true },
}
for i = start or 1, finish or #src do
if not vim.tbl_contains(dst, src[i]) then
table.insert(dst, src[i])
end
end
return dst
end
function utils.unrequire(m) function utils.unrequire(m)
package.loaded[m] = nil package.loaded[m] = nil
_G[m] = nil _G[m] = nil