diff options
Diffstat (limited to 'lua/lvim/lsp')
| -rw-r--r-- | lua/lvim/lsp/config.lua | 1 | ||||
| -rw-r--r-- | lua/lvim/lsp/null-ls/formatters.lua | 29 | ||||
| -rw-r--r-- | lua/lvim/lsp/null-ls/init.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/lsp/null-ls/linters.lua | 24 | ||||
| -rw-r--r-- | lua/lvim/lsp/null-ls/services.lua | 14 | 
5 files changed, 42 insertions, 28 deletions
| diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua index ce7ed891..9a2f17df 100644 --- a/lua/lvim/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -40,6 +40,7 @@ return {    },    null_ls = {      setup = {}, +    config = {},    },    override = {      "angularls", diff --git a/lua/lvim/lsp/null-ls/formatters.lua b/lua/lvim/lsp/null-ls/formatters.lua index 20939039..96012f21 100644 --- a/lua/lvim/lsp/null-ls/formatters.lua +++ b/lua/lvim/lsp/null-ls/formatters.lua @@ -4,6 +4,8 @@ local null_ls = require "null-ls"  local services = require "lvim.lsp.null-ls.services"  local Log = require "lvim.core.log" +local is_registered = require("null-ls.sources").is_registered +  function M.list_registered_providers(filetype)    local null_ls_methods = require "null-ls.methods"    local formatter_method = null_ls_methods.internal["FORMATTING"] @@ -30,24 +32,29 @@ function M.list_configured(formatter_configs)    local formatters, errors = {}, {}    for _, fmt_config in ipairs(formatter_configs) do -    local formatter_name = fmt_config.exe:gsub("-", "_") -    local formatter = null_ls.builtins.formatting[formatter_name] +    local name = fmt_config.exe:gsub("-", "_") +    local formatter = null_ls.builtins.formatting[name]      if not formatter then        Log:error("Not a valid formatter: " .. fmt_config.exe) -      errors[fmt_config.exe] = {} -- Add data here when necessary +      errors[name] = {} -- Add data here when necessary +    elseif is_registered(fmt_config.exe) then +      Log:trace "Skipping registering  the source more than once"      else        local formatter_cmd = services.find_command(formatter._opts.command)        if not formatter_cmd then          Log:warn("Not found: " .. formatter._opts.command) -        errors[fmt_config.exe] = {} -- Add data here when necessary +        errors[name] = {} -- Add data here when necessary        else          Log:debug("Using formatter: " .. formatter_cmd) -        formatters[fmt_config.exe] = formatter.with { -          command = formatter_cmd, -          extra_args = fmt_config.args, -          filetypes = fmt_config.filetypes, -        } +        table.insert( +          formatters, +          formatter.with { +            command = formatter_cmd, +            extra_args = fmt_config.args, +            filetypes = fmt_config.filetypes, +          } +        )        end      end    end @@ -60,8 +67,8 @@ function M.setup(formatter_configs)      return    end -  local formatters_by_ft = M.list_configured(formatter_configs) -  null_ls.register { sources = formatters_by_ft.supported } +  local formatters = M.list_configured(formatter_configs) +  null_ls.register { sources = formatters.supported }  end  return M diff --git a/lua/lvim/lsp/null-ls/init.lua b/lua/lvim/lsp/null-ls/init.lua index 5e8c6b11..f5e820e8 100644 --- a/lua/lvim/lsp/null-ls/init.lua +++ b/lua/lvim/lsp/null-ls/init.lua @@ -9,7 +9,7 @@ function M:setup()      return    end -  null_ls.config() +  null_ls.config(lvim.lsp.null_ls.config)    local default_opts = require("lvim.lsp").get_common_opts()    if vim.tbl_isempty(lvim.lsp.null_ls.setup or {}) then diff --git a/lua/lvim/lsp/null-ls/linters.lua b/lua/lvim/lsp/null-ls/linters.lua index ced4bf34..efc3ffad 100644 --- a/lua/lvim/lsp/null-ls/linters.lua +++ b/lua/lvim/lsp/null-ls/linters.lua @@ -4,6 +4,8 @@ local null_ls = require "null-ls"  local services = require "lvim.lsp.null-ls.services"  local Log = require "lvim.core.log" +local is_registered = require("null-ls.sources").is_registered +  function M.list_registered_providers(filetype)    local null_ls_methods = require "null-ls.methods"    local linter_method = null_ls_methods.internal["DIAGNOSTICS"] @@ -21,6 +23,7 @@ function M.list_available(filetype)        table.insert(linters, provider.name)      end    end +    table.sort(linters)    return linters  end @@ -29,24 +32,29 @@ function M.list_configured(linter_configs)    local linters, errors = {}, {}    for _, lnt_config in pairs(linter_configs) do -    local linter_name = lnt_config.exe:gsub("-", "_") -    local linter = null_ls.builtins.diagnostics[linter_name] +    local name = lnt_config.exe:gsub("-", "_") +    local linter = null_ls.builtins.diagnostics[name]      if not linter then        Log:error("Not a valid linter: " .. lnt_config.exe)        errors[lnt_config.exe] = {} -- Add data here when necessary +    elseif is_registered(lnt_config.exe) then +      Log:trace "Skipping registering the source more than once"      else        local linter_cmd = services.find_command(linter._opts.command)        if not linter_cmd then          Log:warn("Not found: " .. linter._opts.command) -        errors[lnt_config.exe] = {} -- Add data here when necessary +        errors[name] = {} -- Add data here when necessary        else          Log:debug("Using linter: " .. linter_cmd) -        linters[lnt_config.exe] = linter.with { -          command = linter_cmd, -          extra_args = lnt_config.args, -          filetypes = lnt_config.filetypes, -        } +        table.insert( +          linters, +          linter.with { +            command = linter_cmd, +            extra_args = lnt_config.args, +            filetypes = lnt_config.filetypes, +          } +        )        end      end    end diff --git a/lua/lvim/lsp/null-ls/services.lua b/lua/lvim/lsp/null-ls/services.lua index 9cb29f49..9151cc39 100644 --- a/lua/lvim/lsp/null-ls/services.lua +++ b/lua/lvim/lsp/null-ls/services.lua @@ -46,15 +46,13 @@ function M.find_command(command)  end  function M.list_registered_providers_names(filetype) -  local u = require "null-ls.utils" -  local c = require "null-ls.config" +  local s = require "null-ls.sources" +  local available_sources = s.get_available(filetype)    local registered = {} -  for method, source in pairs(c.get()._methods) do -    for name, filetypes in pairs(source) do -      if u.filetype_matches(filetypes, filetype) then -        registered[method] = registered[method] or {} -        table.insert(registered[method], name) -      end +  for _, source in ipairs(available_sources) do +    for method in pairs(source.methods) do +      registered[method] = registered[method] or {} +      table.insert(registered[method], source.name)      end    end    return registered | 
