feat(config): add new config file

* Added efm formatter options
* Auto install lsp servers
This commit is contained in:
Matt Leong 2021-10-24 15:10:28 -07:00
parent a417d1df3d
commit d4e314928d
5 changed files with 145 additions and 16 deletions

View file

@ -1 +1,5 @@
require('cosmic')
local ok, err = pcall(require, 'cosmic')
if not ok then
error(string.format('Error loading core...\n\n%s', err))
end

13
lua/cosmic/config.lua Normal file
View file

@ -0,0 +1,13 @@
local config = {
lsp = {
format_on_save = true,
servers = {
eslint = nil,
efm = {
-- disable_formatters = {'eslint'}
}
}
}
}
return config

View file

@ -45,4 +45,6 @@ M.root_dir = function(fname)
or util.root_pattern('tsconfig.json')(fname)
end
M.autostart = true
return M

View file

@ -1,17 +1,28 @@
local util = require('lspconfig').util
local config = require('cosmic.config')
local formatters = {}
local stylua = {
formatters.stylua = {
formatCommand = 'stylua -s --quote-style AutoPreferSingle --indent-type Spaces --indent-width 2 -',
formatStdin = true,
}
local prettier = {
formatters.eslint = {
lintCommand = 'eslint_d -f unix --stdin --stdin-filename ${INPUT}',
lintStdin = true,
lintFormats = { '%f:%l:%c: %m' },
lintIgnoreExitCode = true,
formatCommand = 'eslint_d --stdin --fix-to-stdout --stdin-filename=${INPUT}',
formatStdin = true,
}
formatters.prettier = {
-- formatCommand = 'prettier --stdin-filepath ${INPUT}',
formatCommand = 'prettierd "${INPUT}"',
formatStdin = true,
}
local filetypes = {
--[[ local filetypes = {
css = { prettier },
html = { prettier },
lua = { stylua },
@ -23,8 +34,71 @@ local filetypes = {
typescript = { prettier },
typescriptreact = { prettier },
yaml = { prettier },
} ]]
local filetype_defaults = {
css = {},
html = {},
lua = {},
javascript = {},
javascriptreact = {},
json = {},
markdown = {},
scss = {},
typescript = {},
typescriptreact = {},
yaml = {},
}
formatters.defaults = {
eslint = {
'javascript',
'javascriptreact',
'json',
'typescriptreact',
'typescript',
},
prettier = {
'css',
'html',
'javascript',
'javascriptreact',
'json',
'typescriptreact',
'typescript',
'markdown',
'scss',
'yaml',
},
stylua = { 'lua' }
}
local function is_formatter_disabled(formatter)
if config.lsp.servers.efm.disable_formatters then
for i in pairs(config.lsp.servers.efm.disable_formatters) do
local disabled = config.lsp.servers.efm.disable_formatters[i]
if disabled == formatter then
return true
end
end
end
return false
end
local languages = {}
for formatter, filetypes in pairs(formatters.defaults) do
if not is_formatter_disabled(formatter) then
-- print(formatter)
for i in pairs(formatters.defaults[formatter]) do
local filetype = formatters.defaults[formatter][i]
-- print(filetype)
languages[filetype] = languages[filetype] or {}
table.insert(languages[filetype], { [formatter] = formatters[formatter] })
end
end
end
-- print(vim.inspect(languages))
return {
init_options = { documentFormatting = true, codeAction = true },
root_dir = function(fname)
@ -34,6 +108,6 @@ return {
or util.root_pattern('.eslintrc.js')(fname)
or util.root_pattern('tsconfig.json')(fname)
end,
filetypes = vim.tbl_keys(filetypes),
settings = { languages = filetypes },
filetype_defaults = vim.tbl_keys(filetype_defaults),
settings = { languages = languages },
}

View file

@ -1,4 +1,5 @@
local default_config = require('cosmic.lsp.providers.defaults')
local config = require('cosmic.config')
local lsp_installer = require('nvim-lsp-installer')
lsp_installer.settings({
@ -16,24 +17,59 @@ lsp_installer.settings({
},
})
-- initial default serverse
local requested_servers = {
'eslint',
'efm',
'tsserver',
'sumneko_lua',
'jsonls',
'cssls',
'html',
-- 'intelephense',
-- 'pyright',
-- 'gopls',
}
-- add servers set in config to requested_servers table
for config_server in pairs(config.lsp.servers) do
if requested_servers[config_server] == nil then
table.insert(requested_servers, config_server)
end
end
-- go through requested_servers and ensure installation
local lsp_installer_servers = require('nvim-lsp-installer.servers')
for server in pairs(requested_servers) do
local requested_server = requested_servers[server]
local ok, serv = lsp_installer_servers.get_server(requested_server)
if ok then
if not serv:is_installed() then
serv:install()
end
end
end
--[[ Auto-format *.rs (rust) files prior to saving them
autocmd BufWritePre *.rs lua vim.lsp.buf.formatting_sync(nil, 1000) ]]
lsp_installer.on_server_ready(function(server)
local opts = default_config
--[[ if config.lsp.servers[server.name] == nil then
opts.autostart = false
end ]]
if server.name == 'sumneko_lua' then
local config = require('cosmic.lsp.providers.lua')
opts = vim.tbl_deep_extend('force', opts, config)
opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.lua'))
elseif server.name == 'tsserver' then
local config = require('cosmic.lsp.providers.tsserver')
opts = vim.tbl_deep_extend('force', opts, config)
opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.tsserver'))
elseif server.name == 'efm' then
local config = require('cosmic.lsp.providers.efm')
opts = vim.tbl_deep_extend('force', opts, config)
opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.efm'))
elseif server.name == 'jsonls' then
local config = require('cosmic.lsp.providers.jsonls')
opts = vim.tbl_deep_extend('force', opts, config)
opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.jsonls'))
elseif server.name == 'eslint' then
local config = require('cosmic.lsp.providers.eslint')
opts = vim.tbl_deep_extend('force', opts, config)
opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.eslint'))
end
-- This setup() function is exactly the same as lspconfig's setup function (:help lspconfig-quickstart)