Skip to content
This repository has been archived by the owner on Jul 6, 2024. It is now read-only.

Commit

Permalink
feat: added workspace support
Browse files Browse the repository at this point in the history
  • Loading branch information
folke committed Jul 14, 2021
1 parent cf3b028 commit 681c0fc
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 81 deletions.
8 changes: 8 additions & 0 deletions .nvim.settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"lua-dev": {
"library": { "plugins": ["workspace.nvim"] }
},
"lspconfig": {
"sumneko_lua": { "settings": {} }
}
}
1 change: 1 addition & 0 deletions lua/lua-dev/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ local M = {}

--- @class LuaApiOptions
M.defaults = {
config_name = "sumneko_lua", -- name of the lspconfig config
library = {
vimruntime = true, -- runtime path
types = true, -- full signature, docs and completion of vim.api, vim.treesitter, vim.lsp and others
Expand Down
41 changes: 41 additions & 0 deletions lua/lua-dev/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,49 @@ local M = {}
function M.setup(opts)
local config = require("lua-dev.config")
config.setup(opts)
M.setup_workspace()
local ret = require("lua-dev.sumneko").setup()
return vim.tbl_deep_extend("force", {}, ret, config.options.lspconfig or {})
end

function M.setup_workspace()
local ok, workspace = pcall(require, "workspace")
if not ok then
return
end
local config = require("lua-dev.config")
local sumneko = require("lua-dev.sumneko")
workspace.register({
name = "lua-dev",

get_schema = function()
return require("workspace.schema").to_schema({ ["lua-dev"] = config.defaults })
end,

---@param ws Workspace
on_workspace_settings = function(ws)
local local_settings = ws.local_settings

-- merge global lua-dev options with workspace options
local opts = ws.settings:get("lua-dev", { defaults = config.options })

-- enable lua-dev if:
-- * this is a lua file part of your nvim config
-- * this is a workspace that has a lua folder (so most likely a plugin)
-- * the local workspace settings have lua-dev.enabled = true
local is_vim_config = ws:has_file(sumneko.config_path())
local enabled = is_vim_config or ws:has_file(ws.root_dir .. "/lua") or local_settings:get("lua-dev.enabled")

if enabled then
-- enable plugins by default only for nvim configs
if not is_vim_config and not local_settings:get("lua-dev.library.plugins") then
opts.library.plugins = false
end
local settings = sumneko.get(opts).setup().settings
ws.settings:merge(settings, "lspconfig." .. opts.config_name .. ".settings")
end
end,
})
end

return M
162 changes: 81 additions & 81 deletions lua/lua-dev/sumneko.lua
Original file line number Diff line number Diff line change
@@ -1,106 +1,106 @@
local Config = require("lua-dev.config")

local M = {}
local S = {}

function M.library()
local ret = {}
function S.get(opts)
local M = {}

if Config.options.library.types then
ret[M.types()] = true
end
function M.library()
local ret = {}

if opts.library.types then
ret[M.types()] = true
end

local function add(lib, filter)
for _, p in pairs(vim.fn.expand(lib .. "/lua", false, true)) do
p = vim.loop.fs_realpath(p)
if p then
-- p = vim.fn.fnamemodify(p, ":h")
local skip = false
if type(filter) == "table" then
local name = vim.fn.fnamemodify(p, ":t")
skip = true
for _, f in pairs(filter) do
if name == f then
skip = false
break
local function add(lib, filter)
for _, p in pairs(vim.fn.expand(lib .. "/lua", false, true)) do
p = vim.loop.fs_realpath(p)
if p then
-- p = vim.fn.fnamemodify(p, ":h")
local skip = false
if type(filter) == "table" then
local name = vim.fn.fnamemodify(p, ":h:t")
skip = true
for _, f in pairs(filter) do
if name == f then
skip = false
break
end
end
end
end
if not skip then
ret[p] = true
if not skip then
ret[p] = true
end
end
end
end
end

if Config.options.library.vimruntime then
add("$VIMRUNTIME")
end
if opts.library.vimruntime then
add("$VIMRUNTIME")
end

if Config.options.library.plugins then
for _, site in pairs(vim.split(vim.o.packpath, ",")) do
add(site .. "/pack/*/opt/*", Config.options.library.plugins)
add(site .. "/pack/*/start/*", Config.options.library.plugins)
if opts.library.plugins then
for _, site in pairs(vim.split(vim.o.packpath, ",")) do
add(site .. "/pack/*/opt/*", opts.library.plugins)
add(site .. "/pack/*/start/*", opts.library.plugins)
end
end
end

return ret
end
return ret
end

function M.path()
local path = {} --vim.split(package.path, ";")
table.insert(path, "lua/?.lua")
table.insert(path, "lua/?/init.lua")
for lib, _ in pairs(M.library()) do
function M.path()
local path = {} --vim.split(package.path, ";")
table.insert(path, "lua/?.lua")
table.insert(path, "lua/?/init.lua")
-- for lib, _ in pairs(M.library()) do
-- table.insert(path, lib .. "/?.lua")
-- table.insert(path, lib .. "/?/init.lua")
-- end
return path
end
return path
end

function M.config_path()
return vim.loop.fs_realpath(vim.fn.stdpath("config"))
end
function M.config_path()
return vim.loop.fs_realpath(vim.fn.stdpath("config"))
end

function M.types()
local f = debug.getinfo(1, "S").source:sub(2)
return vim.loop.fs_realpath(vim.fn.fnamemodify(f, ":h:h:h") .. "/types")
end
function M.types()
local f = debug.getinfo(1, "S").source:sub(2)
return vim.loop.fs_realpath(vim.fn.fnamemodify(f, ":h:h:h") .. "/types")
end

function M.setup()
local path = M.path()
return {
on_new_config = function(config, root_dir)
local lib = vim.tbl_deep_extend("force", {}, config.settings.Lua.workspace.library)
lib[vim.loop.fs_realpath(root_dir) .. "/lua"] = nil
lib[vim.loop.fs_realpath(root_dir)] = nil
config.settings.Lua.workspace.library = lib
return config
end,
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 = path,
},
completion = { callSnippet = "Replace" },
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = { "vim" },
},
-- hint = { enable = true },
workspace = {
-- Make the server aware of Neovim runtime files
library = M.library(),
maxPreload = 1000,
preloadFileSize = 150,
function M.setup()
local path = M.path()
return {
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 = path,
},
completion = { callSnippet = "Replace" },
-- diagnostics = {
-- -- Get the language server to recognize the `vim` global
-- globals = { "vim" },
-- },
-- hint = { enable = true },
workspace = {
-- Make the server aware of Neovim runtime files
library = M.library(),
maxPreload = 1000,
preloadFileSize = 150,
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = { enable = false },
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = { enable = false },
},
},
}
}
end
return M
end

return M
S = vim.tbl_deep_extend("force", S, S.get(Config.options))

return S

0 comments on commit 681c0fc

Please sign in to comment.