diff options
| author | kylo252 <[email protected]> | 2021-11-02 17:03:21 +0100 | 
|---|---|---|
| committer | kylo252 <[email protected]> | 2021-11-02 17:03:21 +0100 | 
| commit | b04bb9b79864e846af8936d6cee6ced0dd0bf93e (patch) | |
| tree | 1d4d0a40330f426b51b8d62409d23869887bf7dd /lua/lvim | |
| parent | 17648e5a07f8c4fe851b09f3037db58c73fe292f (diff) | |
| parent | 32ca5afa4ad21f1a616cc30323c272191e7548c1 (diff) | |
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lvim')
| -rw-r--r-- | lua/lvim/bootstrap.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/config/init.lua | 4 | ||||
| -rw-r--r-- | lua/lvim/core/autocmds.lua | 5 | ||||
| -rw-r--r-- | lua/lvim/core/commands.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/core/info.lua | 4 | ||||
| -rw-r--r-- | lua/lvim/core/which-key.lua | 4 | ||||
| -rw-r--r-- | lua/lvim/lsp/config.lua | 5 | ||||
| -rw-r--r-- | lua/lvim/lsp/manager.lua | 43 | ||||
| -rw-r--r-- | lua/lvim/lsp/utils.lua | 17 | ||||
| -rw-r--r-- | lua/lvim/plugin-loader.lua | 58 | ||||
| -rw-r--r-- | lua/lvim/utils/ft.lua | 47 | ||||
| -rw-r--r-- | lua/lvim/utils/hooks.lua | 3 | 
12 files changed, 89 insertions, 105 deletions
| diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua index e17c79db..74a9bf45 100644 --- a/lua/lvim/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -87,7 +87,7 @@ function M:init(base_dir)    require("lvim.config"):init() -  require("lvim.plugin-loader"):init { +  require("lvim.plugin-loader").init {      package_root = self.pack_dir,      install_path = self.packer_install_dir,    } diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua index e89cb260..1256e236 100644 --- a/lua/lvim/config/init.lua +++ b/lua/lvim/config/init.lua @@ -102,8 +102,8 @@ function M:reload()    local plugins = require "lvim.plugins"    utils.toggle_autoformat()    local plugin_loader = require "lvim.plugin-loader" -  plugin_loader:cache_reset() -  plugin_loader:load { plugins, lvim.plugins } +  plugin_loader.cache_clear() +  plugin_loader.load { plugins, lvim.plugins }    vim.cmd ":PackerInstall"    vim.cmd ":PackerCompile"    -- vim.cmd ":PackerClean" diff --git a/lua/lvim/core/autocmds.lua b/lua/lvim/core/autocmds.lua index 5d1d365e..569622be 100644 --- a/lua/lvim/core/autocmds.lua +++ b/lua/lvim/core/autocmds.lua @@ -6,11 +6,6 @@ function M.load_augroups()    return {      _general_settings = { -      { -        "Filetype", -        "*", -        "lua require('lvim.utils.ft').do_filetype(vim.fn.expand(\"<amatch>\"))", -      },        { "FileType", "qf,help,man", "nnoremap <silent> <buffer> q :close<CR>" },        {          "TextYankPost", diff --git a/lua/lvim/core/commands.lua b/lua/lvim/core/commands.lua index b750f12b..61148889 100644 --- a/lua/lvim/core/commands.lua +++ b/lua/lvim/core/commands.lua @@ -14,6 +14,8 @@ M.defaults = {    [[ command! LvimInfo lua require('lvim.core.info').toggle_popup(vim.bo.filetype) ]],    [[ command! LvimCacheReset lua require('lvim.utils.hooks').reset_cache() ]],    [[ command! LvimUpdate lua require('lvim.bootstrap').update() ]], +  [[ command! LvimSyncCorePlugins lua require('lvim.plugin-loader'):sync_core_plugins() ]], +  [[ command! LvimReload lua require('lvim.config'):reload() ]],  }  M.load = function(commands) diff --git a/lua/lvim/core/info.lua b/lua/lvim/core/info.lua index 5707cc30..fc87691e 100644 --- a/lua/lvim/core/info.lua +++ b/lua/lvim/core/info.lua @@ -61,11 +61,13 @@ local function make_client_info(client)    local client_enabled_caps = lsp_utils.get_client_capabilities(client.id)    local name = client.name    local id = client.id +  local filetypes = lsp_utils.get_supported_filetypes(name)    local document_formatting = client.resolved_capabilities.document_formatting    local attached_buffers_list = table.concat(vim.lsp.get_buffers_by_client_id(client.id), ", ")    local client_info = {      fmt("* Name:                      %s", name),      fmt("* Id:                        [%s]", tostring(id)), +    fmt("* filetype(s):               [%s]", table.concat(filetypes, ", ")),      fmt("* Attached buffers:          [%s]", tostring(attached_buffers_list)),      fmt("* Supports formatting:       %s", tostring(document_formatting)),    } @@ -106,7 +108,7 @@ function M.toggle_popup(ft)    local lsp_info = {      "Language Server Protocol (LSP) info", -    fmt "* Associated server(s):", +    fmt "* Active server(s):",    }    for _, client in pairs(clients) do diff --git a/lua/lvim/core/which-key.lua b/lua/lvim/core/which-key.lua index 42e37456..b036e376 100644 --- a/lua/lvim/core/which-key.lua +++ b/lua/lvim/core/which-key.lua @@ -98,7 +98,7 @@ M.config = function()          name = "Packer",          c = { "<cmd>PackerCompile<cr>", "Compile" },          i = { "<cmd>PackerInstall<cr>", "Install" }, -        r = { "<cmd>lua require('lvim.utils').reload_lv_config()<cr>", "Reload" }, +        r = { "<cmd>lua require('lvim.plugin-loader').recompile()<cr>", "Re-compile" },          s = { "<cmd>PackerSync<cr>", "Sync" },          S = { "<cmd>PackerStatus<cr>", "Status" },          u = { "<cmd>PackerUpdate<cr>", "Update" }, @@ -220,7 +220,7 @@ M.config = function()            },            P = { "<cmd>exe 'edit '.stdpath('cache').'/packer.nvim.log'<cr>", "Open the Packer logfile" },          }, -        r = { "<cmd>lua require('lvim.utils').reload_lv_config()<cr>", "Reload configurations" }, +        r = { "<cmd>LvimReload<cr>", "Reload LunarVim's configuration" },          u = { "<cmd>LvimUpdate<cr>", "Update LunarVim" },        },        s = { diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua index 2d9104ea..ccc524ee 100644 --- a/lua/lvim/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -46,15 +46,20 @@ return {      "ansiblels",      "denols",      "ember", +    "emmet_ls",      "eslint",      "eslintls", +    "graphql",      "jedi_language_server", +    "ltex", +    "phpactor",      "pylsp",      "rome",      "sqlls",      "sqls",      "stylelint_lsp",      "tailwindcss", +    "tflint",      "volar",    },  } diff --git a/lua/lvim/lsp/manager.lua b/lua/lvim/lsp/manager.lua index a8544803..dbb7b87f 100644 --- a/lua/lvim/lsp/manager.lua +++ b/lua/lvim/lsp/manager.lua @@ -39,6 +39,12 @@ local function resolve_config(name, user_config)    return config  end +-- manually start the server and don't wait for the usual filetype trigger from lspconfig +local function buf_try_add(server_name, bufnr) +  bufnr = bufnr or vim.api.nvim_get_current_buf() +  require("lspconfig")[server_name].manager.try_add_wrapper(bufnr) +end +  ---Setup a language server by providing a name  ---@param server_name string name of the language server  ---@param user_config table [optional] when available it will take predence over any default configurations @@ -48,32 +54,37 @@ function M.setup(server_name, user_config)    if lvim_lsp_utils.is_client_active(server_name) then      return    end +  local servers = require "nvim-lsp-installer.servers"    local config = resolve_config(server_name, user_config) -  local server_available, requested_server = require("nvim-lsp-installer.servers").get_server(server_name) +  local server_available, requested_server = servers.get_server(server_name) -  local function ensure_installed(server) -    if server:is_installed() then -      return true -    end -    if not lvim.lsp.automatic_servers_installation then -      Log:debug(server.name .. " is not managed by the automatic installer") -      return false +  if server_available then +    local install_notification = false + +    if not requested_server:is_installed() then +      if lvim.lsp.automatic_servers_installation then +        Log:debug "Automatic server installation detected" +        requested_server:install() +        install_notification = true +      else +        Log:debug(requested_server.name .. " is not managed by the automatic installer") +      end      end -    Log:debug(string.format("Installing [%s]", server.name)) -    server:install() -    vim.schedule(function() -      vim.cmd [[LspStart]] -    end) -  end -  if server_available and ensure_installed(requested_server) then -    requested_server:setup(config) +    requested_server:on_ready(function() +      if install_notification then +        vim.notify(string.format("Installation complete for [%s] server", requested_server.name), vim.log.levels.INFO) +      end +      install_notification = false +      requested_server:setup(config) +    end)    else      -- since it may not be installed, don't attempt to configure the LSP unless there is a custom provider      local has_custom_provider, _ = pcall(require, "lvim/lsp/providers/" .. server_name)      if has_custom_provider then        require("lspconfig")[server_name].setup(config) +      buf_try_add(server_name)      end    end  end diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua index a34fbf44..7cc8f54f 100644 --- a/lua/lvim/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -49,14 +49,17 @@ function M.get_client_capabilities(client_id)  end  function M.get_supported_filetypes(server_name) -  -- print("got filetypes query request for: " .. server_name) -  local configs = require "lspconfig/configs" -  pcall(require, ("lspconfig/" .. server_name)) -  for _, config in pairs(configs) do -    if config.name == server_name then -      return config.document_config.default_config.filetypes or {} -    end +  -- temporary workaround: https://github.com/neovim/nvim-lspconfig/pull/1358 +  if server_name == "dockerls" then +    return { "dockerfile" } +  end +  local lsp_installer_servers = require "nvim-lsp-installer.servers" +  local server_available, requested_server = lsp_installer_servers.get_server(server_name) +  if not server_available then +    return {}    end + +  return requested_server:get_supported_filetypes()  end  return M diff --git a/lua/lvim/plugin-loader.lua b/lua/lvim/plugin-loader.lua index e1ede7bc..c4bd7373 100644 --- a/lua/lvim/plugin-loader.lua +++ b/lua/lvim/plugin-loader.lua @@ -5,7 +5,9 @@ local Log = require "lvim.core.log"  -- we need to reuse this outside of init()  local compile_path = get_config_dir() .. "/plugin/packer_compiled.lua" -function plugin_loader:init(opts) +local _, packer = pcall(require, "packer") + +function plugin_loader.init(opts)    opts = opts or {}    local install_path = opts.install_path or vim.fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim" @@ -16,14 +18,10 @@ function plugin_loader:init(opts)      vim.cmd "packadd packer.nvim"    end -  local packer_ok, packer = pcall(require, "packer") -  if not packer_ok then -    return -  end -    packer.init {      package_root = package_root,      compile_path = compile_path, +    log = { level = "warn" },      git = { clone_timeout = 300 },      display = {        open_fn = function() @@ -31,36 +29,51 @@ function plugin_loader:init(opts)        end,      },    } +end -  self.packer = packer -  return self +-- packer expects a space separated list +local function pcall_packer_command(cmd, kwargs) +  local status_ok, msg = pcall(function() +    require("packer")[cmd](unpack(kwargs or {})) +  end) +  if not status_ok then +    Log:warn(cmd .. " failed with: " .. vim.inspect(msg)) +    Log:trace(vim.inspect(vim.fn.eval "v:errmsg")) +  end  end -function plugin_loader:cache_clear() +function plugin_loader.cache_clear()    if vim.fn.delete(compile_path) == 0 then      Log:debug "deleted packer_compiled.lua"    end  end -function plugin_loader:cache_reset() -  self.cache_clear() -  require("packer").compile() +function plugin_loader.recompile() +  plugin_loader.cache_clear() +  pcall_packer_command "compile"    if utils.is_file(compile_path) then      Log:debug "generated packer_compiled.lua"    end  end -function plugin_loader:load(configurations) -  return self.packer.startup(function(use) -    for _, plugins in ipairs(configurations) do -      for _, plugin in ipairs(plugins) do -        use(plugin) +function plugin_loader.load(configurations) +  Log:debug "loading plugins configuration" +  local status_ok, _ = xpcall(function() +    packer.startup(function(use) +      for _, plugins in ipairs(configurations) do +        for _, plugin in ipairs(plugins) do +          use(plugin) +        end        end -    end -  end) +    end) +  end, debug.traceback) +  if not status_ok then +    Log:warn "problems detected while loading plugins' configurations" +    Log:trace(debug.traceback()) +  end  end -function plugin_loader:get_core_plugins() +function plugin_loader.get_core_plugins()    local list = {}    local plugins = require "lvim.plugins"    for _, item in pairs(plugins) do @@ -69,9 +82,10 @@ function plugin_loader:get_core_plugins()    return list  end -function plugin_loader:sync_core_plugins() +function plugin_loader.sync_core_plugins()    local core_plugins = plugin_loader.get_core_plugins() -  vim.cmd("PackerSync " .. unpack(core_plugins)) +  Log:trace(string.format("Syncing core plugins: [%q]", table.concat(core_plugins, ", "))) +  pcall_packer_command("sync", core_plugins)  end  return plugin_loader diff --git a/lua/lvim/utils/ft.lua b/lua/lvim/utils/ft.lua deleted file mode 100644 index e9852e6f..00000000 --- a/lua/lvim/utils/ft.lua +++ /dev/null @@ -1,47 +0,0 @@ --- Here be dragons --- Opening files with telescope will not start LSP without this -local ft = {} - -ft.find_lua_ftplugins = function(filetype) -  local patterns = { -    string.format("ftplugin/%s.lua", filetype), - -    -- Looks like we don't need this, because the first one works -    -- string.format("after/ftplugin/%s.lua", filetype), -  } - -  local result = {} -  for _, pat in ipairs(patterns) do -    vim.list_extend(result, vim.api.nvim_get_runtime_file(pat, true)) -  end - -  return result -end - -ft.do_filetype = function(filetype) -  local ftplugins = ft.find_lua_ftplugins(filetype) - -  local f_env = setmetatable({ -    -- Override print, so the prints still go through, otherwise it's confusing for people -    print = vim.schedule_wrap(print), -  }, { -    -- Buf default back read/write to whatever is going on in the global landscape -    __index = _G, -    __newindex = _G, -  }) - -  for _, file in ipairs(ftplugins) do -    local f = loadfile(file) -    if not f then -      vim.api.nvim_err_writeln("Unable to load file: " .. file) -    else -      local ok, msg = pcall(setfenv(f, f_env)) - -      if not ok then -        vim.api.nvim_err_writeln("Error while processing file: " .. file .. "\n" .. msg) -      end -    end -  end -end - -return ft diff --git a/lua/lvim/utils/hooks.lua b/lua/lvim/utils/hooks.lua index cc884523..0fe4a7fd 100644 --- a/lua/lvim/utils/hooks.lua +++ b/lua/lvim/utils/hooks.lua @@ -15,8 +15,7 @@ end  ---Tip: Useful for clearing any outdated settings  function M.reset_cache()    _G.__luacache.clear_cache() - -  plugin_loader:cache_reset() +  require("lvim.plugin-loader").recompile()    package.loaded["lvim.lsp.templates"] = nil    Log:debug "Re-generatring ftplugin template files" | 
