Переглянути джерело

fix(lsp): enforce lvim completion for lua-server (#3035)

kylo252 2 роки тому
батько
коміт
68fdbaa51d
2 змінених файлів з 47 додано та 17 видалено
  1. 9 0
      .luarc.json
  2. 38 17
      lua/lvim/lsp/providers/sumneko_lua.lua

+ 9 - 0
.luarc.json

@@ -0,0 +1,9 @@
+{
+  "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
+  "Lua.diagnostics.disable": [
+    "redundant-parameter",
+    "param-type-mismatch",
+    "missing-parameter"
+  ],
+  "diagnostics.libraryFiles": "Disable"
+}

+ 38 - 17
lua/lvim/lsp/providers/sumneko_lua.lua

@@ -1,32 +1,53 @@
-local dev_opts = {
+local default_workspace = {
   library = {
-    vimruntime = true, -- runtime path
-    types = true, -- full signature, docs and completion of vim.api, vim.treesitter, vim.lsp and others
-    -- plugins = true, -- installed opt or start plugins in packpath
-    -- you can also specify the list of plugins to make available as a workspace library
-    plugins = { "plenary.nvim" },
+    vim.fn.expand "$VIMRUNTIME",
+    get_lvim_base_dir(),
+    require("lua-dev.sumneko").types(),
   },
-  override = nil, -- function(root_dir, options) end,
+
+  maxPreload = 1000,
+  preloadFileSize = 10000,
 }
 
-local lua_dev_loaded, lua_dev = pcall(require, "lua-dev")
-if lua_dev_loaded then
-  lua_dev.setup(dev_opts)
+local add_packages_to_workspace = function(packages, config)
+  -- config.settings.Lua = config.settings.Lua or { workspace = default_workspace }
+  local runtimedirs = vim.api.nvim__get_runtime({ "lua" }, true, { is_lua = true })
+  local workspace = config.settings.Lua.workspace
+  for _, v in pairs(runtimedirs) do
+    for _, pack in ipairs(packages) do
+      if v:match(pack) and not vim.tbl_contains(workspace.library, v) then
+        table.insert(workspace.library, v)
+      end
+    end
+  end
 end
 
+local lspconfig = require "lspconfig"
+
+local make_on_new_config = function(on_new_config, _)
+  return lspconfig.util.add_hook_before(on_new_config, function(new_config, _)
+    local server_name = new_config.name
+
+    if server_name ~= "sumneko_lua" then
+      return
+    end
+    local plugins = { "plenary.nvim", "telescope.nvim", "nvim-treesitter", "LuaSnip" }
+    add_packages_to_workspace(plugins, new_config)
+  end)
+end
+
+lspconfig.util.default_config = vim.tbl_extend("force", lspconfig.util.default_config, {
+  on_new_config = make_on_new_config(lspconfig.util.default_config.on_new_config),
+})
+
 local opts = {
   settings = {
     Lua = {
+      telemetry = { enable = false },
       diagnostics = {
         globals = { "vim", "lvim", "packer_plugins" },
       },
-      workspace = {
-        library = {
-          [require("lvim.utils").join_paths(get_runtime_dir(), "lvim", "lua")] = true,
-        },
-        maxPreload = 100000,
-        preloadFileSize = 10000,
-      },
+      workspace = default_workspace,
     },
   },
 }