commit 9e6a397cbf62135cf01080b1cd6b4fd7285a7319
parent b4dba0c4fd562e13d602b1c00bdc5927a6de0456
Author: Tomas Nemec <nemi@skaut.cz>
Date: Thu, 21 Apr 2022 15:44:52 +0200
update
Diffstat:
11 files changed, 201 insertions(+), 104 deletions(-)
diff --git a/after/plugin/bqf.lua b/after/plugin/bqf.lua
@@ -1,3 +1,3 @@
if not pcall(require, 'bqf') then return end
-require('bqf').setup { auto_enable = true, auto_resize_height = false, preview = { auto_preview = true } }
+require('bqf').setup { auto_enable = true, auto_resize_height = true, preview = { auto_preview = false } }
diff --git a/after/plugin/fugitive.lua b/after/plugin/fugitive.lua
@@ -1,5 +0,0 @@
-if not vim.g.loaded_fugitive then return end
-
-vim.keymap.set('n', '<leader>gg', '<cmd>G<cr>', { noremap = true })
-vim.keymap.set('n', '<leader>gc', '<cmd>G commit<cr>', { noremap = true })
-vim.keymap.set('n', '<leader>gb', '<cmd>Git blame<cr>', { noremap = true })
diff --git a/after/plugin/git.lua b/after/plugin/git.lua
@@ -1,4 +1,89 @@
if vim.g.loaded_git_messenger == 1 then
- vim.g.git_messenger_floating_win_opts = { border = 'single' }
- vim.keymap.set('n', '<leader>gm', '<plug>(git-messenger)', { noremap = true })
+ vim.g.git_messenger_floating_win_opts = { border = 'single' }
+ vim.keymap.set('n', '<leader>gm', '<plug>(git-messenger)', { noremap = true, desc = 'Git Message' })
+end
+
+if vim.g.loaded_fugitive then
+ vim.keymap.set('n', '<leader>gg', '<cmd>G<cr>', { noremap = true, desc = 'Git Status' })
+ vim.keymap.set('n', '<leader>gc', '<cmd>G commit<cr>', { noremap = true, desc = 'Git Commit' })
+ vim.keymap.set('n', '<leader>gb', '<cmd>Git blame<cr>', { noremap = true, desc = 'Git Blame' })
+end
+
+local has_igit, igit = pcall(require, 'igit')
+if has_igit then
+ igit.setup({
+ command = 'IG',
+ -- branch = { open_cmd = 'botright' },
+ -- log = { open_cmd = 'botright' },
+ -- status = { open_cmd = 'botright' },
+ })
+end
+
+local has_gsigns, gsigns = pcall(require, 'gitsigns')
+if has_gsigns then
+ local get_theme = function()
+ local dark_theme = { add = '│', change = '│', delete = '│', topdelete = '‾', changedel = '│' }
+ local light_theme = { add = ' ', change = ' ', delete = ' ', topdelete = ' ', changedel = ' ' }
+ local theme = dark_theme
+ if vim.opt.background:get() == 'light' then theme = light_theme end
+ return theme
+ end
+
+ local theme = get_theme()
+ gsigns.setup {
+ signs = {
+ add = {
+ hl = 'GitSignsAdd',
+ text = theme.add,
+ -- text = ' ',
+ numhl = 'GitSignsAddNr',
+ linehl = 'GitSignsAddLn',
+ },
+ change = {
+ hl = 'GitSignsChange',
+ text = theme.change,
+ -- text = ' ',
+ numhl = 'GitSignsChangeNr',
+ linehl = 'GitSignsChangeLn',
+ },
+ delete = {
+ hl = 'GitSignsDelete',
+ text = theme.delete,
+ -- text = ' ',
+ numhl = 'GitSignsDeleteNr',
+ linehl = 'GitSignsDeleteLn',
+ },
+ topdelete = {
+ hl = 'GitSignsDelete',
+ text = theme.topdelete,
+ -- text = ' ',
+ numhl = 'GitSignsDeleteNr',
+ linehl = 'GitSignsDeleteLn',
+ },
+ changedelete = {
+ hl = 'GitSignsChange',
+ text = theme.changedel,
+ -- text = ' ',
+ numhl = 'GitSignsChangeNr',
+ linehl = 'GitSignsChangeLn',
+ },
+ },
+ keymaps = {},
+ }
+
+ vim.keymap.set('n', '>c', function() gsigns.next_hunk() end, { desc = 'Git Next Hunk' })
+ vim.keymap.set('n', '>[', function() gsigns.next_hunk() end, { desc = 'Git Next Hunk' })
+ vim.keymap.set('n', '<c', function() gsigns.prev_hunk() end, { desc = 'Git Previous Hunk' })
+ vim.keymap.set('n', '<[', function() gsigns.prev_hunk() end, { desc = 'Git Previous Hunk' })
+ vim.keymap.set('n', '<leader>hs', function() gsigns.stage_hunk() end, { desc = 'Git Stage Hunk' })
+ vim.keymap.set('n', '<leader>hu', function() gsigns.undo_stage_hunk() end, { desc = 'Git Undo Stage Hunk' })
+ vim.keymap.set('n', '<leader>hr', function() gsigns.reset_hunk() end, { desc = 'Git Reset Hunk' })
+ vim.keymap.set('n', '<leader>hR', function() gsigns.reset_buffer() end, { desc = 'Git Reset Buffer' })
+ vim.keymap.set('n', '<leader>hp', function() gsigns.preview_hunk() end, { desc = 'Git Preview Hunk' })
+ vim.keymap.set('n', '<leader>hb', function() gsigns.toggle_current_line_blame() end,
+ { desc = 'Git Toggle Blame Line' })
+ vim.keymap.set('n', '<leader>hl', function() gsigns.toggle_linehl() end, { desc = 'Git Highlight Lines' })
+ vim.keymap.set('n', '<leader>hn', function() gsigns.toggle_numhl() end, { desc = 'Git Highlight Num' })
+ vim.keymap.set('o', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>')
+ vim.keymap.set('x', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>')
end
diff --git a/after/plugin/gitsigns.lua b/after/plugin/gitsigns.lua
@@ -1,66 +0,0 @@
-if not pcall(require, 'gitsigns') then return end
-
-local get_theme = function()
- local dark_theme = { add = '│', change = '│', delete = '│', topdelete = '‾', changedel = '│' }
- local light_theme = { add = ' ', change = ' ', delete = ' ', topdelete = ' ', changedel = ' ' }
- local theme = dark_theme
- if vim.opt.background:get() == 'light' then theme = light_theme end
- return theme
-end
-
-local theme = get_theme()
-require('gitsigns').setup {
- signs = {
- add = {
- hl = 'GitSignsAdd',
- text = theme.add,
- -- text = ' ',
- numhl = 'GitSignsAddNr',
- linehl = 'GitSignsAddLn',
- },
- change = {
- hl = 'GitSignsChange',
- text = theme.change,
- -- text = ' ',
- numhl = 'GitSignsChangeNr',
- linehl = 'GitSignsChangeLn',
- },
- delete = {
- hl = 'GitSignsDelete',
- text = theme.delete,
- -- text = ' ',
- numhl = 'GitSignsDeleteNr',
- linehl = 'GitSignsDeleteLn',
- },
- topdelete = {
- hl = 'GitSignsDelete',
- text = theme.topdelete,
- -- text = ' ',
- numhl = 'GitSignsDeleteNr',
- linehl = 'GitSignsDeleteLn',
- },
- changedelete = {
- hl = 'GitSignsChange',
- text = theme.changedel,
- -- text = ' ',
- numhl = 'GitSignsChangeNr',
- linehl = 'GitSignsChangeLn',
- },
- },
- keymaps = {},
-}
-
-vim.keymap.set('n', '>c', function() require('gitsigns').next_hunk() end)
-vim.keymap.set('n', '>[', function() require('gitsigns').next_hunk() end)
-vim.keymap.set('n', '<c', function() require('gitsigns').prev_hunk() end)
-vim.keymap.set('n', '<[', function() require('gitsigns').prev_hunk() end)
-vim.keymap.set('n', '<leader>hs', function() require('gitsigns').stage_hunk() end)
-vim.keymap.set('n', '<leader>hu', function() require('gitsigns').undo_stage_hunk() end)
-vim.keymap.set('n', '<leader>hr', function() require('gitsigns').reset_hunk() end)
-vim.keymap.set('n', '<leader>hR', function() require('gitsigns').reset_buffer() end)
-vim.keymap.set('n', '<leader>hp', function() require('gitsigns').preview_hunk() end)
-vim.keymap.set('n', '<leader>hb', function() require('gitsigns').toggle_current_line_blame() end)
-vim.keymap.set('n', '<leader>hl', function() require('gitsigns').toggle_linehl() end)
-vim.keymap.set('n', '<leader>hn', function() require('gitsigns').toggle_numhl() end)
-vim.keymap.set('o', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>')
-vim.keymap.set('x', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>')
diff --git a/after/plugin/nulls.lua b/after/plugin/nulls.lua
@@ -21,14 +21,11 @@ local zsh_diag = {
}
null_ls.setup({
- on_attach = function(client, bufnr)
- if client.resolved_capabilities.document_formatting == true then
- -- vim.api.nvim_buf_set_option(bufnr, 'formatexpr', 'v:lua.vim.lsp.formatexpr()')
- vim.keymap.set('n', 'Q', vim.lsp.buf.formatting,
- { silent = true, buffer = bufnr, noremap = true, desc = 'LSP Format (nulls)' })
- vim.keymap.set('v', 'Q', vim.lsp.buf.range_formatting,
- { silent = true, buffer = bufnr, noremap = true, desc = 'LSP Range Format (nulls)' })
- end
+ on_attach = function(_, bufnr)
+ vim.keymap.set('n', 'Q', vim.lsp.buf.formatting,
+ { silent = true, buffer = bufnr, noremap = true, desc = 'LSP Format (nulls)' })
+ vim.keymap.set('v', 'Q', vim.lsp.buf.range_formatting,
+ { silent = true, buffer = bufnr, noremap = true, desc = 'LSP Range Format (nulls)' })
end,
sources = {
-- formatting
@@ -41,6 +38,19 @@ null_ls.setup({
'$FILENAME',
}, '--range-start', '--range-end'),
},
+ builtins.formatting.prettier.with {
+ filetypes = { 'typescript' },
+ args = h.range_formatting_args_factory({
+ '--parser',
+ vim.api.nvim_buf_get_option(0, 'filetype'),
+ '--trailing-comma',
+ 'all',
+ '--tab-width',
+ '2',
+ '--stdin-filepath',
+ '$FILENAME',
+ }, '--range-start', '--range-end'),
+ },
builtins.formatting.lua_format,
-- builtins.formatting.clang_format,
builtins.formatting.shfmt.with {
diff --git a/ftplugin/dart.lua b/ftplugin/dart.lua
@@ -7,7 +7,8 @@ vim.api.nvim_create_user_command('DartDebug', require('tms.ft.dart.debug').func,
vim.api.nvim_create_user_command('DartPrint', require('tms.ft.dart.debug').print, opts)
vim.api.nvim_create_user_command('DartOrganizeImports', require('tms.ft.dart.lsp').organize_imports, opts)
vim.api.nvim_create_user_command('DartFixAll', require('tms.ft.dart.lsp').fix_all, opts)
-vim.api.nvim_create_user_command('DartExtract', require('tms.ft.dart.lsp').extract, opts)
+vim.api.nvim_create_user_command('DartExtract', require('tms.ft.dart.lsp').extract_method, opts)
+vim.api.nvim_create_user_command('DartVariable', require('tms.ft.dart.lsp').extract_local_variable, opts)
opts = { buffer = true, noremap = true }
vim.keymap.set('n', '<leader>pp', function() require('tms.ft.dart.debug').print() end, opts)
diff --git a/lua/tms/ft/dart/lsp.lua b/lua/tms/ft/dart/lsp.lua
@@ -6,25 +6,54 @@ local M = {}
local execute_command = function(command)
local cur_buf = api.nvim_get_current_buf()
local cur_buf_name = api.nvim_buf_get_name(cur_buf)
- local params = {command = command, arguments = {cur_buf_name}, title = ''}
+ local params = { command = command, arguments = { cur_buf_name }, title = '' }
lsp.buf_request_sync(cur_buf, 'workspace/executeCommand', params, 1500)
end
+local get_visual = function()
+ local vs_start = vim.fn.getcurpos()[2]
+ local vs_end = vim.fn.line('v')
+ if vs_start > vs_end then
+ return vs_end - 1, vs_start - 1
+ else
+ return vs_start - 1, vs_end - 1
+ end
+end
+
M.organize_imports = function() execute_command('edit.organizeImports') end
M.fix_all = function() execute_command('edit.fixAll') end
--- TODO(tms) 20.10.2021:
-M.extract = function()
- local cur_buf = api.nvim_get_current_buf()
- local cur_buf_name = api.nvim_buf_get_name(cur_buf)
- local range = vim.lsp.util.make_range_params()
- local params = {command = 'refactor.perform', arguments = {'EXTRACT_METHOD', cur_buf_name, range}, title = ''}
- D(lsp.get_active_clients()[1].request('codeAction/resolve', 'EXTRACT_METHOD', function(err, resolved_action)
- if err then
- vim.notify(err.code .. ': ' .. err.message, vim.log.levels.ERROR)
- return
+M.extract_method = function()
+ local buf = vim.api.nvim_get_current_buf()
+ local buf_name = vim.api.nvim_buf_get_name(buf)
+ local start, stop = get_visual()
+ local start_offset = vim.api.nvim_buf_get_offset(buf, start)
+ local end_offset = vim.api.nvim_buf_get_offset(buf, stop + 1)
+ local length = end_offset - start_offset
+ vim.ui.input({}, function(input)
+ if input and #input ~= 0 then
+ vim.lsp.buf_request(buf, 'workspace/executeCommand', {
+ command = 'refactor.perform',
+ arguments = { 'EXTRACT_METHOD', buf_name, nil, start_offset, length, { name = input } },
+ })
+ end
+ end)
+end
+-- TODO(tms) 20.04.22:
+M.extract_local_variable = function()
+ local buf = vim.api.nvim_get_current_buf()
+ local buf_name = vim.api.nvim_buf_get_name(buf)
+ local start, stop = get_visual()
+ local start_offset = vim.api.nvim_buf_get_offset(buf, start)
+ local end_offset = vim.api.nvim_buf_get_offset(buf, stop + 1)
+ local length = end_offset - start_offset
+ vim.ui.input({}, function(input)
+ if input and #input ~= 0 then
+ vim.lsp.buf_request(buf, 'workspace/executeCommand', {
+ command = 'refactor.perform',
+ arguments = { 'EXTRACT_LOCAL_VARIABLE', buf_name, nil, start_offset, length, { name = input } },
+ })
end
- -- apply_action(resolved_action, client)
- end, cur_buf))
+ end)
end
return M
diff --git a/lua/tms/lsp/init.lua b/lua/tms/lsp/init.lua
@@ -15,12 +15,6 @@ local on_attach = function(client, bufnr)
-- vim.api.nvim_buf_set_option(bufnr, 'formatexpr', 'v:lua.vim.lsp.formatexpr()')
-- end
- -- TODO(tms) 11.04.22: handle genericaly for all servers
- if (client.name == 'sumneko_lua') then
- client.resolved_capabilities.document_formatting = false
- client.resolved_capabilities.range_formatting = false
- end
-
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { silent = true, buffer = bufnr, desc = 'LSP Definition' })
vim.keymap.set('n', 'gD', '<cmd>vsplit | lua vim.lsp.buf.definition()<cr>',
{ silent = true, buffer = bufnr, desc = 'LSP definition in vsplit' })
@@ -34,12 +28,20 @@ local on_attach = function(client, bufnr)
{ silent = true, buffer = bufnr, desc = 'LSP Signature Help' })
vim.keymap.set('n', 'gr', vim.lsp.buf.references, { silent = true, buffer = bufnr, desc = 'LSP References' })
vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, { silent = true, buffer = bufnr, desc = 'LSP Code Actions' })
+ vim.keymap.set('v', 'ga', vim.lsp.buf.range_code_action, { silent = true, buffer = bufnr, desc = 'LSP Code Actions' })
vim.keymap.set('n', 'gn', vim.lsp.buf.rename, { silent = true, buffer = bufnr, desc = 'LSP Rename' })
+
-- formatting
- if client.resolved_capabilities.document_formatting == true then
+ -- TODO(tms) 11.04.22
+ local excluded = { tsserver = true, sumneko_lua = true }
+ if not excluded[client.name] then
vim.keymap.set('n', 'Q', vim.lsp.buf.formatting, { silent = true, buffer = bufnr, desc = 'LSP Format' })
vim.keymap.set('v', 'Q', vim.lsp.buf.range_formatting, { silent = true, buffer = bufnr, desc = 'LSP Range Format' })
+ else
+ client.resolved_capabilities.document_formatting = false
+ client.resolved_capabilities.range_formatting = false
end
+
-- symbols
local t = require('tms.p.telescope')
vim.keymap.set('n', 'gm', t.lsp_document_symbols, { silent = true, buffer = bufnr, desc = 'LSP Document Symbols' })
diff --git a/lua/tms/plugins.lua b/lua/tms/plugins.lua
@@ -24,7 +24,6 @@ return packer.startup({
-- editor
use 'tpope/vim-repeat'
- use 'tpope/vim-eunuch' -- usefull unix utililties cmds
use 'tpope/vim-surround'
use 'chaoren/vim-wordmotion' -- word counts with _,.,-,...
use 'romgrk/equal.operator' -- equal text object `lefthand = righthand`
@@ -61,6 +60,7 @@ return packer.startup({
use { 'lewis6991/gitsigns.nvim', requires = { 'nvim-lua/plenary.nvim' } }
use 'sindrets/diffview.nvim'
use 'tpope/vim-fugitive'
+ use { 'ipod825/igit.nvim', requires = { 'nvim-lua/plenary.nvim', 'ipod825/libp.nvim' } }
use 'rhysd/git-messenger.vim'
use 'ThePrimeagen/git-worktree.nvim'
diff --git a/test/dart.dart b/test/dart.dart
@@ -0,0 +1,9 @@
+class Test {
+ Test() {
+ var test = '';
+ test += 'hej';
+ print(test);
+ }
+
+ void a() => '';
+}
diff --git a/test/dart.lua b/test/dart.lua
@@ -0,0 +1,32 @@
+local get_visual = function()
+ local vs_start = vim.fn.getcurpos()[2]
+ local vs_end = vim.fn.line('v')
+ if vs_start > vs_end then
+ return vs_end - 1, vs_start - 1
+ else
+ return vs_start - 1, vs_end - 1
+ end
+end
+
+local extract = function()
+ local buf = vim.api.nvim_get_current_buf()
+ local buf_name = vim.api.nvim_buf_get_name(buf)
+ local start, stop = get_visual()
+ local start_offset = vim.api.nvim_buf_get_offset(buf, start)
+ local end_offset = vim.api.nvim_buf_get_offset(buf, stop + 1)
+ local length = end_offset - start_offset
+ vim.ui.input({}, function(input)
+ if input and #input ~= 0 then
+ vim.lsp.buf_request(buf, 'workspace/executeCommand', {
+ command = 'refactor.perform',
+ arguments = { 'EXTRACT_METHOD', buf_name, nil, start_offset, length, { name = input } },
+ })
+ end
+ end)
+end
+
+vim.keymap.set('n', ',e', extract)
+vim.keymap.set('v', ',e', extract)
+
+vim.cmd [[messages clear]]
+print('loaded')