summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/lang/lua.lua
blob: c7305d099880222855c691bbacd19713c4202fe8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

local M = {}

M.config = function()
  O.lang.lua = {
    diagnostics = {
      virtual_text = { spacing = 0, prefix = "" },
      signs = true,
      underline = true,
    },
    formatter = {
      exe = "stylua",
      args = {},
      stdin = false,
    },
    linters = { "luacheck" },
    lsp = {
      path = DATA_PATH .. "/lspinstall/lua/sumneko-lua-language-server",
    },
  }
end

M.format = function()
  O.formatters.filetype["lua"] = {
    function()
      return {
        exe = O.lang.lua.formatter.exe,
        args = O.lang.lua.formatter.args,
        stdin = O.lang.lua.formatter.stdin,
        tempfile_prefix = ".formatter",
      }
    end,
  }

  require("formatter.config").set_defaults {
    logging = false,
    filetype = O.formatters.filetype,
  }
end

M.lint = function()
  require("lint").linters_by_ft = {
    lua = O.lang.lua.linters,
  }
end

M.lsp = function()
  if not require("utils").check_lsp_client_active "sumneko_lua" then
    -- https://github.com/sumneko/lua-language-server/wiki/Build-and-Run-(Standalone)
    local sumneko_root_path = DATA_PATH .. "/lspinstall/lua"
    local sumneko_binary = sumneko_root_path .. "/sumneko-lua-language-server"

    require("lspconfig").sumneko_lua.setup {
      cmd = { sumneko_binary, "-E", sumneko_root_path .. "/main.lua" },
      on_attach = require("lsp").common_on_attach,
      settings = {
        Lua = {
          runtime = {
            -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
            version = "LuaJIT",
            -- Setup your lua path
            path = vim.split(package.path, ";"),
          },
          diagnostics = {
            -- Get the language server to recognize the `vim` global
            globals = { "vim", "O" },
          },
          workspace = {
            -- Make the server aware of Neovim runtime files
            library = {
              [vim.fn.expand "$VIMRUNTIME/lua"] = true,
              [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true,
            },
            maxPreload = 100000,
            preloadFileSize = 1000,
          },
        },
      },
    }
  end
end

M.dap = function()
  -- TODO: implement dap
  return "No DAP configured!"
end

return M