neovim

Personal neovim configuration files
git clone git://gtms.dev:neovim
Log | Files | Refs

commit 8cc575c959b50dd6b4dc0734fd009c35152a80a6
parent 2672913126d98ea1ac10fa7a32b41fcbfe7cf2f6
Author: Tomas Nemec <nemi@skaut.cz>
Date:   Mon, 28 Nov 2022 16:20:55 +0100

update

Diffstat:
Aafter/plugin/lsp-inlayhints.lua | 24++++++++++++++++++++++++
Mafter/plugin/lsp.lua | 8++++++++
Mcolors/base16.lua | 53+++++++++++++++++++++++++++--------------------------
Mlua/plugins.lua | 4++++
Alua/tms/lsp/request.lua | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlua/tms/options.lua | 2+-
6 files changed, 127 insertions(+), 27 deletions(-)

diff --git a/after/plugin/lsp-inlayhints.lua b/after/plugin/lsp-inlayhints.lua @@ -0,0 +1,24 @@ +if not pcall(require, 'lsp-inlayhints') then + return +end + +local lspih = require('lsp-inlayhints') +lspih.setup({ inlay_hints = { only_current_line = true } }) + +local group = vim.api.nvim_create_augroup('user-inlayhints', {}) + +vim.api.nvim_create_autocmd('LspAttach', { + group = group, + callback = function(args) + if not (args.data and args.data.client_id) then + return + end + + local buf = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + lspih.on_attach(client, buf) + + vim.keymap.set('n', '<leader>gh', require('lsp-inlayhints').toggle, + { silent = true, desc = 'LSP Inlay Hints Toggle' }) + end, +}) diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua @@ -50,6 +50,14 @@ vim.api.nvim_create_autocmd('LspAttach', { if cap.renameProvider then vim.keymap.set('n', 'cd', lb.rename, opt('LSP Rename (change definition')) end + if cap.typeHierarchyProvider then + vim.keymap.set('n', 'gh', function() + require('tms.lsp.request').type_hierarchy('subtypes') + end, opt('LSP Subtypes')) + vim.keymap.set('n', 'gl', function() + require('tms.lsp.request').type_hierarchy('supertypes') + end, opt('LSP Supertypes')) + end end, }) diff --git a/colors/base16.lua b/colors/base16.lua @@ -5,22 +5,23 @@ -- base16-vim (https://github.com/chriskempson/base16-vim) -- by Chris Kempson (https://github.com/chriskempson) -- Gruvbox dark, hard scheme by Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) -local gui00 = '#1d2021' -local gui01 = '#3c3836' -local gui02 = '#504945' -local gui03 = '#665c54' -local gui04 = '#bdae93' -local gui05 = '#d5c4a1' -local gui06 = '#ebdbb2' -local gui07 = '#fbf1c7' -local gui08 = '#fb4934' -local gui09 = '#fe8019' -local gui0A = '#fabd2f' -local gui0B = '#b8bb26' -local gui0C = '#8ec07c' -local gui0D = '#83a598' -local gui0E = '#d3869b' -local gui0F = '#d65d0e' + +local gui00 = "#1d2021" +local gui01 = "#3c3836" +local gui02 = "#504945" +local gui03 = "#665c54" +local gui04 = "#bdae93" +local gui05 = "#d5c4a1" +local gui06 = "#ebdbb2" +local gui07 = "#fbf1c7" +local gui08 = "#fb4934" +local gui09 = "#fe8019" +local gui0A = "#fabd2f" +local gui0B = "#b8bb26" +local gui0C = "#8ec07c" +local gui0D = "#83a598" +local gui0E = "#d3869b" +local gui0F = "#d65d0e" local cterm00 = 0 local cterm03 = 8 @@ -43,7 +44,7 @@ vim.cmd [[ highlight clear syntax reset ]] -vim.g.colors_name = 'base16-gruvbox-dark-hard' +vim.g.colors_name = "base16-gruvbox-dark-hard" -- Vim editor colors fg bg ctermfg ctermbg attr guisp vim.api.nvim_set_hl(0, 'Normal', { fg = gui05, bg = gui00, ctermfg = cterm05, ctermbg = cterm00 }) @@ -139,15 +140,15 @@ vim.api.nvim_set_hl(0, 'cssClassName', { fg = gui0E, ctermfg = cterm0E }) vim.api.nvim_set_hl(0, 'cssColor', { fg = gui0C, ctermfg = cterm0C }) -- Diff highlighting -vim.api.nvim_set_hl(0, 'DiffAdd', { fg = gui0B, bg = gui01, ctermfg = cterm0B, ctermbg = cterm01 }) -vim.api.nvim_set_hl(0, 'DiffChange', { fg = gui03, bg = gui01, ctermfg = cterm03, ctermbg = cterm01 }) -vim.api.nvim_set_hl(0, 'DiffDelete', { fg = gui08, bg = gui01, ctermfg = cterm08, ctermbg = cterm01 }) -vim.api.nvim_set_hl(0, 'DiffText', { fg = gui0D, bg = gui01, ctermfg = cterm0D, ctermbg = cterm01 }) -vim.api.nvim_set_hl(0, 'DiffAdded', { fg = gui0B, bg = gui00, ctermfg = cterm0B, ctermbg = cterm00 }) -vim.api.nvim_set_hl(0, 'DiffFile', { fg = gui08, bg = gui00, ctermfg = cterm08, ctermbg = cterm00 }) -vim.api.nvim_set_hl(0, 'DiffNewFile', { fg = gui0B, bg = gui00, ctermfg = cterm0B, ctermbg = cterm00 }) -vim.api.nvim_set_hl(0, 'DiffLine', { fg = gui0D, bg = gui00, ctermfg = cterm0D, ctermbg = cterm00 }) -vim.api.nvim_set_hl(0, 'DiffRemoved', { fg = gui08, bg = gui00, ctermfg = cterm08, ctermbg = cterm00 }) +vim.api.nvim_set_hl(0, 'DiffAdd', { fg = gui0B, bg = gui01, ctermfg = cterm0B, ctermbg = cterm01 }) +vim.api.nvim_set_hl(0, 'DiffChange', { fg = gui03, bg = gui01, ctermfg = cterm03, ctermbg = cterm01 }) +vim.api.nvim_set_hl(0, 'DiffDelete', { fg = gui08, bg = gui01, ctermfg = cterm08, ctermbg = cterm01 }) +vim.api.nvim_set_hl(0, 'DiffText', { fg = gui0D, bg = gui01, ctermfg = cterm0D, ctermbg = cterm01 }) +vim.api.nvim_set_hl(0, 'DiffAdded', { fg = gui0B, bg = gui00, ctermfg = cterm0B, ctermbg = cterm00 }) +vim.api.nvim_set_hl(0, 'DiffFile', { fg = gui08, bg = gui00, ctermfg = cterm08, ctermbg = cterm00 }) +vim.api.nvim_set_hl(0, 'DiffNewFile', { fg = gui0B, bg = gui00, ctermfg = cterm0B, ctermbg = cterm00 }) +vim.api.nvim_set_hl(0, 'DiffLine', { fg = gui0D, bg = gui00, ctermfg = cterm0D, ctermbg = cterm00 }) +vim.api.nvim_set_hl(0, 'DiffRemoved', { fg = gui08, bg = gui00, ctermfg = cterm08, ctermbg = cterm00 }) -- Git highlighting vim.api.nvim_set_hl(0, 'gitcommitOverflow', { fg = gui08, ctermfg = cterm08 }) diff --git a/lua/plugins.lua b/lua/plugins.lua @@ -9,6 +9,9 @@ return packer.startup({ use { 'wbthomason/packer.nvim', opt = true } + -- EXP + use 'yioneko/nvim-type-fmt' + -- meta use 'tweekmonster/startuptime.vim' use 'nathom/filetype.nvim' @@ -118,6 +121,7 @@ return packer.startup({ use 'b0o/schemastore.nvim' use 'folke/neodev.nvim' use { 'jose-elias-alvarez/null-ls.nvim', requires = { 'nvim-lua/plenary.nvim' } } + use 'lvimuser/lsp-inlayhints.nvim' -- dap use 'mfussenegger/nvim-dap' diff --git a/lua/tms/lsp/request.lua b/lua/tms/lsp/request.lua @@ -0,0 +1,63 @@ +local vim = vim +local validate = vim.validate +local util = require('vim.lsp.util') + +local M = {} + +local function request(method, params, handler) + validate({ method = { method, 's' }, handler = { handler, 'f', true } }) + return vim.lsp.buf_request(0, method, params, handler) +end + +local function pick_type_hierarchy_item(type_hierarchy_items) + if not type_hierarchy_items then + return + end + if #type_hierarchy_items == 1 then + return type_hierarchy_items[1] + end + local items = {} + for i, item in pairs(type_hierarchy_items) do + local entry = item.detail or item.name + table.insert(items, string.format('%d. %s', i, entry)) + end + local choice = vim.fn.inputlist(items) + if choice < 1 or choice > #items then + return + end + return choice +end + +function M.type_hierarchy(method) + vim.validate({ + method = { + method, + function(m) + return (m == 'subtypes') or (m == 'supertypes'), 'Method must be one of ["subtypes", "supertypes"]' + end, + }, + }) + method = 'typeHierarchy/' .. method + local params = util.make_position_params() + request('textDocument/prepareTypeHierarchy', params, function(err, result, ctx) + if err then + vim.notify(err.message, vim.log.levels.WARN) + return + end + + local type_hierarchy_item = pick_type_hierarchy_item(result) + if not type_hierarchy_item then + return + end + + local client = vim.lsp.get_client_by_id(ctx.client_id) + if client then + client.request(method, { item = type_hierarchy_item }, nil, ctx.bufnr) + else + vim.notify(string.format('Client with id=%d disappeared during type hierarchy request', ctx.client_id), + vim.log.levels.WARN) + end + end) +end + +return M diff --git a/lua/tms/options.lua b/lua/tms/options.lua @@ -13,7 +13,7 @@ vim.opt.mouse = 'a' vim.opt.pumheight = 5 vim.opt.shiftround = true vim.opt.shortmess = vim.opt.shortmess + 'c' -vim.opt.showbreak = '">\\ "' +vim.opt.showbreak = '>\\ ' vim.opt.cursorline = true vim.opt.showmode = false vim.opt.smartcase = true