feat(neovim): update config

This commit is contained in:
Felix Schröter 2020-09-26 23:54:07 +02:00
parent 5e0b72ca74
commit 0a772c90b0
No known key found for this signature in database
GPG key ID: 910ACB9F6BD26F58
10 changed files with 251 additions and 215 deletions

View file

@ -0,0 +1,18 @@
-- extensions for lsp functionality
local function preview_location_callback(_, method, result)
if result == nil or vim.tbl_isempty(result) then
vim.lsp.log.info(method, 'No location found')
return nil
end
if vim.tbl_islist(result) then
vim.lsp.util.preview_location(result[1])
else
vim.lsp.util.preview_location(result)
end
end
function peek_definition()
local params = vim.lsp.util.make_position_params()
return vim.lsp.buf_request(0, 'textDocument/definition', params, preview_location_callback)
end

View file

@ -0,0 +1,151 @@
local nvim_lsp = require'nvim_lsp'
local configs = require'nvim_lsp/configs'
local util = require'nvim_lsp/util'
-- format on save
-- TODO often takes way longer to save than 1000 ms (e.g. 7000 ms in fitnesspilot-web)
local diagnosticls_on_attach = function(_, bufnr)
vim.api.nvim_command("au BufWritePre <buffer> lua vim.lsp.buf.formatting_sync(nil, 1000)")
end
nvim_lsp.bashls.setup{}
nvim_lsp.jsonls.setup{}
nvim_lsp.yamlls.setup{}
nvim_lsp.html.setup{}
nvim_lsp.cssls.setup{}
nvim_lsp.vimls.setup{}
nvim_lsp.dockerls.setup{}
nvim_lsp.rnix.setup{}
nvim_lsp.tsserver.setup{}
nvim_lsp.omnisharp.setup{
cmd = {"omnisharp", "--languageserver"};
}
nvim_lsp.pyls.setup{}
nvim_lsp.terraformls.setup{}
nvim_lsp.hls.setup{}
-- based on: https://github.com/mikew/vimrc/blob/master/src/nvim/coc-settings.json
-- multiple LSP's currently not supported: https://github.com/neovim/neovim/issues/12755
-- nvim_lsp.diagnosticls.setup{
-- on_attach = diagnosticls_on_attach;
-- filetypes = {
-- "javascript",
-- "javascript.jsx",
-- "javascriptreact",
-- "typescript",
-- "typescript.jsx",
-- "typescriptreact",
-- "json",
-- "yaml",
-- "markdown",
-- "html",
-- "css"
-- };
-- init_options = {
-- linters = {
-- eslint = {
-- command = "eslint";
-- args = {
-- "--stdin",
-- "--stdin-filename",
-- "%filepath",
-- "--format",
-- "json"
-- };
-- rootPatterns = {".git"};
-- debounce = 50;
-- sourceName = "eslint";
-- parseJson = {
-- errorsRoot = "[0].messages";
-- line = "line";
-- column = "column";
-- endLine = "endLine";
-- endColumn = "endColumn";
-- message = "${message} [${ruleId}]";
-- security = "severity";
-- };
-- securities = {
-- ["2"] = "error";
-- ["1"] = "warning";
-- };
-- };
-- stylelint = {
-- command = "stylelint";
-- args = {
-- "--stdin",
-- "--formatter",
-- "json",
-- "--file",
-- "%filepath"
-- };
-- rootPatterns = {".git"};
-- debounce = 50;
-- sourceName = "stylelint";
-- parseJson = {
-- errorsRoot = "[0].warnings";
-- line = "line";
-- column = "column";
-- message = "${text}";
-- security = "severity";
-- };
-- securities = {
-- error = "error";
-- warning = "warning";
-- };
-- };
-- };
-- filetypes = {
-- javascript = {"eslint"};
-- ["javascript.jsx"] = {"eslint"};
-- javascriptreact = {"eslint"};
-- typescript = {"eslint"};
-- ["typescript.jsx"] = {"eslint"};
-- typescriptreact = {"eslint"};
-- css = {"stylelint"};
-- };
-- formatters = {
-- eslint = {
-- command = "eslint";
-- args = {
-- "--fix",
-- "%file"
-- };
-- rootPatterns = {".git"};
-- isStdout = 1;
-- doesWriteToFile = 1;
-- };
-- stylelint = {
-- command = "stylelint";
-- args = {
-- "--stdin",
-- "--fix",
-- "--file",
-- "%filepath"
-- };
-- rootPatterns = {".git"};
-- };
-- prettier = {
-- command = "prettier";
-- args = {
-- "--stdin",
-- "--stdin-filepath",
-- "%filepath"
-- };
-- rootPatterns = {".git"};
-- };
-- };
-- formatFiletypes = {
-- javascript = {"eslint"};
-- ["javascript.jsx"] = {"eslint"};
-- javascriptreact = {"eslint"};
-- typescript = {"eslint"};
-- ["typescript.jsx"] = {"eslint"};
-- typescriptreact = {"eslint"};
-- json = {"prettier"};
-- yaml = {"prettier"};
-- markdown = {"prettier"};
-- html = {"prettier"};
-- css = {"stylelint"};
-- };
-- };
-- }

View file

@ -0,0 +1,39 @@
" autocomplete config
set completeopt=menu,preview,menuone,noinsert
set omnifunc=v:lua.vim.lsp.omnifunc
let g:deoplete#enable_at_startup = 1
let g:deoplete#smart_case = 1
" Use <c-space> to trigger completion.
inoremap <silent><expr> <c-space> deoplete#manual_complete()
" Autocomplete and cycle from top-to-bottom of suggestions using <Tab>.
inoremap <expr><TAB> pumvisible() ? "\<c-n>" : "\<TAB>"
" <TAB>: completion.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ deoplete#manual_complete()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" maps
nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>
nnoremap <silent> gp <cmd>lua peek_definition()<CR>
nnoremap <silent> gy <cmd>lua vim.lsp.buf.type_definition()<CR>
nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>
nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>
nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>
nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
nnoremap <silent> <leader>sd <cmd>lua vim.lsp.buf.document_symbol()<CR>
nnoremap <silent> <leader>sw <cmd>lua vim.lsp.buf.workspace_symbol()<CR>
nnoremap <silent> <leader>f <cmd>lua vim.lsp.buf.formatting()<CR>
nnoremap <silent> <leader>a <cmd>lua vim.lsp.buf.code_action()<CR>
nnoremap <silent> <leader>r <cmd>lua vim.lsp.buf.rename()<CR>