~sanchayanmaity/dotfiles

c646381a008f5eb28ad27a171b8c0726a04d487b — Sanchayan Maity 2 months ago c51261d
nvim: lsp: Add support for lua
1 files changed, 65 insertions(+), 0 deletions(-)

M nvim/.config/nvim/lua/lsp.lua
M nvim/.config/nvim/lua/lsp.lua => nvim/.config/nvim/lua/lsp.lua +65 -0
@@ 179,3 179,68 @@ for _, lsp in ipairs(servers) do
    capabilities = set_snippet_capabilities(),
  }
end

-- See https://github.com/sumneko/lua-language-server/wiki/Setting-without-VSCode#neovim-with-built-in-lsp-client
-- on why we do this library thing
-- Idea taken from https://gist.github.com/folke/fe5d28423ea5380929c3f7ce674c41d8
local library = {}
local function add_to_library(lib_path)
    for _, p in pairs(vim.fn.expand(lib_path, false, true)) do
    p = vim.loop.fs_realpath(p)
    library[p] = true
  end
end

local function add_libraries()
  local cwd = vim.fn.getcwd()
  if string.find(cwd, "neovim") then
    add_to_library("$VIMRUNTIME")
  elseif string.find(cwd, "dotfiles") then
    add_to_library("$VIMRUNTIME")
    add_to_library("~/.config/nvim")
    add_to_library("~/.local/share/nvim/site/pack/packer/opt/*")
    add_to_library("~/.local/share/nvim/site/pack/packer/start/*")
  else
    add_to_library(cwd .. "/*")
  end
end

local function determine_lua_version()
  local cwd = vim.fn.getcwd()
  if string.find(cwd, "neovim") or string.find(cwd, "dotfiles") then
    return "LuaJIT"
  else
    return "Lua 5.4"
  end
end

add_libraries()

local runtime_path = vim.split(package.path, ';')
table.insert(runtime_path, "lua/?.lua")
table.insert(runtime_path, "lua/?/init.lua")

nvim_lsp.sumneko_lua.setup {
  cmd = { "/usr/bin/lua-language-server" };
  on_attach = on_attach,
  settings = {
    Lua = {
      runtime = {
        version = determine_lua_version(),
        path = runtime_path,
      },
      completion = { callSnippet = "Both" },
      diagnostics = {
        globals = {'vim'},
      },
      workspace = {
        library = library,
        maxPreload = 2000,
        preloadFileSize = 50000
      },
      telemetry = {
        enable = false,
      },
    },
  },
}