commit 8cc575c959b50dd6b4dc0734fd009c35152a80a6
parent 2672913126d98ea1ac10fa7a32b41fcbfe7cf2f6
Author: Tomas Nemec <nemi@skaut.cz>
Date: Mon, 28 Nov 2022 16:20:55 +0100
update
Diffstat:
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