From 1967463cf7e61157167f962972b031447b956222 Mon Sep 17 00:00:00 2001 From: Barak Michener Date: Fri, 14 Jan 2022 16:08:50 -0800 Subject: [PATCH 1/2] update to neovim 0.6 --- .config/alacritty/alacritty.yml | 2 +- .vim/nvim.lua | 20 ++++++++++++++++++-- .vimrc | 5 +++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml index 81e28d1..b08167f 100644 --- a/.config/alacritty/alacritty.yml +++ b/.config/alacritty/alacritty.yml @@ -150,7 +150,7 @@ font: style: Oblique # Point size - size: 16.0 + size: 19.0 # Offset is the extra space around each character. `offset.y` can be thought # of as modifying the line spacing, and `offset.x` as modifying the letter diff --git a/.vim/nvim.lua b/.vim/nvim.lua index 20ab0cb..15c5a4b 100644 --- a/.vim/nvim.lua +++ b/.vim/nvim.lua @@ -7,8 +7,21 @@ local nvim_lsp = require'lspconfig' local on_attach = function(client) end +local rust_capabilities = vim.lsp.protocol.make_client_capabilities() +rust_capabilities.textDocument.completion.completionItem.snippetSupport = true +rust_capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + } +} + -- Enable rust_analyzer -nvim_lsp.rust_analyzer.setup({ on_attach=on_attach }) +nvim_lsp.rust_analyzer.setup({ + on_attach=on_attach, + capabilities=rust_capabilities, +}) nvim_lsp.gopls.setup({ on_attach=on_attach }) nvim_lsp.pyright.setup({ on_attach=on_attach }) nvim_lsp.clangd.setup({ on_attach=on_attach }) @@ -41,6 +54,9 @@ nvim_lsp.efm.setup { }, python = { { formatCommand = 'black --quiet -', formatStdin = true } + }, + rust = { + { formatCommand = 'rustfmt', formatStdin = true } } } } @@ -169,7 +185,7 @@ require('lspkind').init({ }) require('trouble').setup { - mode = "lsp_document_diagnostics", + mode = "document_diagnostics", auto_close = true, action_keys = { -- key mappings for actions in the trouble list -- map to {} to remove a mapping, for example: diff --git a/.vimrc b/.vimrc index f353c23..47c70c4 100644 --- a/.vimrc +++ b/.vimrc @@ -268,7 +268,8 @@ nnoremap gW lua vim.lsp.buf.workspace_symbol() "nnoremap ga lua vim.lsp.buf.code_action() nnoremap ga lua require('telescope.builtin').lsp_code_actions({initial_mode = "normal"}) vnoremap ga :lua require('telescope.builtin').lsp_range_code_actions({initial_mode = "normal"}) -nnoremap ge lua vim.lsp.diagnostic.show_line_diagnostics({show_header = false, focusable = false}) +"nnoremap ge lua vim.lsp.diagnostic.show_line_diagnostics({show_header = false, focusable = false}) +nnoremap ge lua vim.diagnostic.open_float({focusable = false}) nnoremap xx TroubleToggle @@ -276,7 +277,7 @@ nnoremap xx TroubleToggle " 300ms of no cursor movement to trigger CursorHold set updatetime=500 " Show diagnostic popup on cursor hold -autocmd CursorHold * lua vim.lsp.diagnostic.show_line_diagnostics({show_header = false, focusable = false}) +autocmd CursorHold * lua vim.diagnostic.open_float({focusable = false}) " Autoformat on save autocmd BufWritePre *.lua lua vim.lsp.buf.formatting_sync(nil, 1000) From ec15ab59131778ffccabd9c820a37559cf6e6b0e Mon Sep 17 00:00:00 2001 From: Barak Michener Date: Fri, 14 Jan 2022 16:48:12 -0800 Subject: [PATCH 2/2] add custom genericizer function --- .vim/filetype.vim | 6 +++++- .vim/nvim.lua | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/.vim/filetype.vim b/.vim/filetype.vim index 652ed69..a02e290 100644 --- a/.vim/filetype.vim +++ b/.vim/filetype.vim @@ -118,4 +118,8 @@ autocmd FileType java let b:auto_trim_whitespace=1 augroup templates autocmd BufNewFile *.vue 0r ~/.vim/skeletons/skeleton.vue -augroup END +augroup end + +augroup rust + autocmd FileType rust nnoremap lg lua rust_where_at_line() +augroup end diff --git a/.vim/nvim.lua b/.vim/nvim.lua index 15c5a4b..6d6f7ae 100644 --- a/.vim/nvim.lua +++ b/.vim/nvim.lua @@ -273,3 +273,55 @@ git_grep_word = function(conf) for k,v in pairs(conf) do opt[k] = v end builtin.grep_string(opt) end + + +function string.insert(str1, str2, pos) + return str1:sub(1,pos)..str2..str1:sub(pos+1) +end + +function string.split(s, delimiter) + result = {}; + for match in (s..delimiter):gmatch("(.-)"..delimiter) do + table.insert(result, match); + end + return result; +end + +local function rust_whereify_line(line, var_name) + if string.find(line, "fn") == nil then + return nil + end + + local paren = string.find(line, "%(") + if paren == nil then return nil end + + local open_generic = string.find(line, "<") + if open_generic ~= nil then + if open_generic < paren then + -- TODO(barakmich): it's already generic, we need to do something for that + -- probably a different function + return nil + end + -- just continue otherwise + end + + local whitespace = string.match(line, "^(%s*)") + + local generic = "<"..var_name..">" + local out = string.insert(line, generic, paren - 1) + + local brace = string.find(out, "%{") + if brace == nil then brace = string.len(out) end + + out = string.insert(out, "\n"..whitespace.."where\n"..whitespace.." "..var_name..": ,\n"..whitespace, brace - 1) + + return string.split(out, "\n") +end + +function rust_where_at_line() + local var_name = vim.fn.input("Variable: ") + local lineNum, col = unpack(vim.api.nvim_win_get_cursor(0)) + local replacements = rust_whereify_line(vim.api.nvim_get_current_line(), var_name) + vim.api.nvim_buf_set_lines(0, lineNum-1, lineNum, false, replacements) + vim.api.nvim_win_set_cursor(0, {lineNum + 2, 4}) +end