neovim

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

commit a788b10d8e45b76ef4a5d44553d478fd40672d3b
parent 47b205bd344c1eeb71188798deea1f5c2eb22089
Author: Tomas Nemec <owl@gtms.dev>
Date:   Fri, 15 Dec 2023 22:48:11 +0100

update

Diffstat:
Mafter/plugin/cmp.lua | 9+--------
Mafter/plugin/codeium.lua | 17++++++++---------
Mafter/plugin/comment.lua | 10+++++-----
Mafter/plugin/diagflow.lua | 10+++++++++-
Mafter/plugin/hardtime.lua | 2+-
Dafter/plugin/lsp-inlayhints.lua | 28----------------------------
Mafter/plugin/lsp.lua | 31++++++++++++++++++-------------
Aafter/plugin/neodev.lua | 5+++++
Dafter/plugin/spectre.lua | 62--------------------------------------------------------------
Mafter/plugin/treesitter-context.lua | 30++++++++++++++++--------------
Mcolors/tms.lua | 78++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mftplugin/dart.lua | 44++++++++++++++++++++++++++++++++------------
Mftplugin/gdscript.lua | 8+++++++-
Mftplugin/json.lua | 19++++++++++++++++---
Mftplugin/lua.lua | 28++++++++++++++++++++++++++++
Mlua/plugins.lua | 8++++----
Mlua/tms/lsp/init.lua | 11++++-------
Mlua/tms/lsp/servers.lua | 51---------------------------------------------------
Mlua/tms/options.lua | 2+-
Mlua/tms/p/codeium.lua | 13+------------
Mlua/tms/p/jsonpath.lua | 4++--
Dplugin/ai.lua | 1-
Aqueries/dart/context.scm | 29+++++++++++++++++++++++++++++
Mtest/test.json | 3++-
24 files changed, 233 insertions(+), 270 deletions(-)

diff --git a/after/plugin/cmp.lua b/after/plugin/cmp.lua @@ -46,18 +46,11 @@ local Codeium = require('tms.p.codeium') -- cmp.register_source('exe', require('tms.p.cmp.exe_source').new()) local function close() return function(fallback) - -- if pcall(require, 'copilot') then - -- local copilot = require('copilot.suggestion') - -- if copilot.is_visible() then - -- fallback = copilot.dismiss - -- end - -- end - if Codeium.Completions() then fallback = Codeium.Clear end - if not cmp.abort() then + if not cmp.close() then fallback() end end diff --git a/after/plugin/codeium.lua b/after/plugin/codeium.lua @@ -1,19 +1,18 @@ vim.g.codeium_disable_bindings = true vim.g.codeium_no_map_tab = true -local Codeium = require('tms.p.codeium') - -vim.keymap.set('i', '<c-y>', Codeium.Accept, { expr = true, desc = 'Codeium Accept' }) -vim.keymap.set('i', '<c-e>', Codeium.Clear, { expr = true, desc = 'Codeium Clear' }) -vim.keymap.set('i', '<c-n>', Codeium.Next, { expr = true, desc = 'Codeium Next' }) -vim.keymap.set('i', '<c-p>', Codeium.Prev, { expr = true, desc = 'Codeium Prev' }) +local codeium = require('tms.p.codeium') +vim.keymap.set('i', '<c-y>', codeium.Accept, { expr = true, desc = 'Codeium Accept' }) +vim.keymap.set('i', '<c-e>', codeium.Clear, { desc = 'Codeium Clear' }) +vim.keymap.set('i', '<c-n>', codeium.Next, { desc = 'Codeium Next' }) +vim.keymap.set('i', '<c-p>', codeium.Prev, { desc = 'Codeium Prev' }) local toggle = require('tms.toggle') toggle.fn('p', function() - if Codeium.isEnabled() then - Codeium.Disable() + if codeium.isEnabled() then + codeium.Disable() else - Codeium.Enable() + codeium.Enable() end end, 'Codeium Toggle') diff --git a/after/plugin/comment.lua b/after/plugin/comment.lua @@ -1,15 +1,15 @@ if not pcall(require, 'Comment') then return end -local comment = require('Comment') -local setup = { - ignore = '^$', -} +local comment = require 'Comment' +local setup = { ignore = '^$' } + if pcall(require, 'ts_context_commentstring') then setup.pre_hook = require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook() end + comment.setup(setup) -local ft = require('Comment.ft') +local ft = require 'Comment.ft' ft.dart = { '//%s', '/*%s*/' } diff --git a/after/plugin/diagflow.lua b/after/plugin/diagflow.lua @@ -2,4 +2,12 @@ if not pcall(require, 'diagflow') then return end -require('diagflow').setup { toggle_event = { 'InsertEnter' } } +require('diagflow').setup { + padding_top = 2, + scope = 'line', + show_borders = true, + -- todo + -- toggle_event = { 'InsertEnter' }, + -- render_event = { 'DiagnosticChanged', 'CursorMoved' }, + -- update_event = { 'DiagnosticChanged', 'BufReadPost' }, +} diff --git a/after/plugin/hardtime.lua b/after/plugin/hardtime.lua @@ -2,4 +2,4 @@ if not pcall(require, 'hardtime') then return end -require('hardtime').setup() +require('hardtime').setup { disabled_filetypes = { 'qf', 'netrw', 'dirbuf', 'mason', 'query' } } diff --git a/after/plugin/lsp-inlayhints.lua b/after/plugin/lsp-inlayhints.lua @@ -1,28 +0,0 @@ -if not pcall(require, 'lsp-inlayhints') then - return -end - -do - 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 @@ -2,9 +2,6 @@ if not pcall(require, 'lspconfig') then return end -local lspconfig = require 'lspconfig' -local lsp = require 'tms.lsp'; - local lsp_group = vim.api.nvim_create_augroup('user-lsp', {}) local function keymap(client, buf) @@ -40,11 +37,11 @@ local function keymap(client, buf) if client.supports_method('textDocument/documentHighlight') then vim.keymap.set('n', '<leader>k', lb.document_highlight, opt('LSP Highlight')) vim.api.nvim_create_autocmd('CursorMoved', - { group = lsp_group, buffer = buf, callback = vim.lsp.buf.clear_references }) + { group = lsp_group, buffer = buf, callback = vim.lsp.buf.clear_references }) end if client.supports_method('textDocument/inlayHint') then vim.keymap.set('n', 'gH', function() - vim.lsp.inlay_hint(0, nil) + vim.lsp.inlay_hint.enable(0, not vim.lsp.inlay_hint.is_enabled(0)) end, opt('LSP Inlay hints')) end if client.supports_method('textDocument/rename') then @@ -63,9 +60,9 @@ local function keymap(client, buf) vim.keymap.set('n', 'gQ', function() vim.lsp.buf.format() - if vim.api.nvim_get_option_value('ft', { buf = buf }) == 'dart' then - vim.cmd.NgHtmlFormat() - end + -- if vim.api.nvim_get_option_value('ft', { buf = buf }) == 'dart' then + -- vim.cmd.NgHtmlFormat() + -- end end, { buffer = buf, desc = 'LSP Format' }) end end @@ -74,12 +71,16 @@ vim.api.nvim_create_autocmd('LspAttach', { group = lsp_group, callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) + if not client then + return + end + keymap(client, args.buf) end, }) local handlers = vim.lsp.handlers -handlers['textDocument/hover'] = vim.lsp.with(handlers.hover, { border = 'single' }) +vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(handlers.hover, { border = 'single' }) handlers['textDocument/signatureHelp'] = vim.lsp.with(handlers.signature_help, { border = 'single' }) local crc = handlers['client/registerCapability'] handlers['client/registerCapability'] = function(_, result, ctx) @@ -98,13 +99,17 @@ end -- mason if pcall(require, 'mason') then - require('mason').setup() - local mlsp = require('mason-lspconfig') + require 'mason'.setup() + local mlsp = require 'mason-lspconfig' mlsp.setup() mlsp.setup_handlers { function(name) - local opts = lsp.make_opts(name) - lspconfig[name].setup(opts) + local opts = require 'tms.lsp'.make_opts(name) + require 'lspconfig'[name].setup(opts) + end, + ['jsonls'] = function() + end, + ['lua_ls'] = function() end, } end diff --git a/after/plugin/neodev.lua b/after/plugin/neodev.lua @@ -0,0 +1,5 @@ +if not pcall(require, 'neodev') then + return +end + +require'neodev'.setup {} diff --git a/after/plugin/spectre.lua b/after/plugin/spectre.lua @@ -1,62 +0,0 @@ -if not pcall(require, 'spectre') then - return -end - -vim.keymap.set('n', '<leader>S', function() - require('spectre').open() -end) -vim.keymap.set('v', '<leader>s', function() - require('spectre').open_visual() -end) - -require('spectre').setup({ - mapping = { - ['toggle_line'] = { - map = 'gd', - cmd = '<cmd>lua require(\'spectre\').toggle_line()<CR>', - desc = 'toggle current item', - }, - ['enter_file'] = { - map = '<cr>', - cmd = '<cmd>lua require(\'spectre.actions\').select_entry()<CR>', - desc = 'goto current file', - }, - ['send_to_qf'] = { - map = 'gq', - cmd = '<cmd>lua require(\'spectre.actions\').send_to_qf()<CR>', - desc = 'send all item to quickfix', - }, - ['replace_cmd'] = { - map = 'gc', - cmd = '<cmd>lua require(\'spectre.actions\').replace_cmd()<CR>', - desc = 'input replace vim command', - }, - ['show_option_menu'] = { map = 'go', cmd = '<cmd>lua require(\'spectre\').show_options()<CR>', desc = 'show option' }, - ['run_replace'] = { - map = 'gR', - cmd = '<cmd>lua require(\'spectre.actions\').run_replace()<CR>', - desc = 'replace all', - }, - ['change_view_mode'] = { - map = 'tt', - cmd = '<cmd>lua require(\'spectre\').change_view()<CR>', - desc = 'change result view mode', - }, - ['toggle_live_update'] = { - map = 'tu', - cmd = '<cmd>lua require(\'spectre\').toggle_live_update()<CR>', - desc = 'update change when vim write file.', - }, - ['toggle_ignore_case'] = { - map = 'ti', - cmd = '<cmd>lua require(\'spectre\').change_options(\'ignore-case\')<CR>', - desc = 'toggle ignore case', - }, - ['toggle_ignore_hidden'] = { - map = 'th', - cmd = '<cmd>lua require(\'spectre\').change_options(\'hidden\')<CR>', - desc = 'toggle search hidden', - }, - -- you can put your mapping here it only use normal mode - }, -}) diff --git a/after/plugin/treesitter-context.lua b/after/plugin/treesitter-context.lua @@ -2,17 +2,19 @@ if not pcall(require, 'treesitter-context') then return end --- require'treesitter-context'.setup { --- enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) --- max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit. --- min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit. --- line_numbers = true, --- multiline_threshold = 20, -- Maximum number of lines to show for a single context --- trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' --- mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline' --- -- Separator between context and content. Should be a single character string, like '-'. --- -- When separator is set, the context will only show up when there are at least 2 lines above cursorline. --- separator = nil, --- zindex = 20, -- The Z-index of the context window --- on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching --- } +require'treesitter-context'.setup { + -- enable = false, -- Enable this plugin (Can be enabled/disabled later via commands) + -- max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit. + -- min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit. + line_numbers = true, + -- multiline_threshold = 20, -- Maximum number of lines to show for a single context + -- trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' + -- mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline' + -- -- Separator between context and content. Should be a single character string, like '-'. + -- -- When separator is set, the context will only show up when there are at least 2 lines above cursorline. + separator = '─', + -- zindex = 20, -- The Z-index of the context window + -- on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching +} + +vim.keymap.set('n', '<c-h><c-x>', require('treesitter-context').go_to_context, { silent = true }) diff --git a/colors/tms.lua b/colors/tms.lua @@ -5,23 +5,22 @@ -- 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 @@ -44,7 +43,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 }) @@ -140,15 +139,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 }) @@ -284,14 +283,15 @@ vim.api.nvim_set_hl(0, 'javaOperator', { fg = gui0D, ctermfg = cterm0D }) -- end color -- -vim.api.nvim_set_hl(0, 'LineNr', { fg = gui03, bg = gui00 }) -vim.api.nvim_set_hl(0, 'SignColumn', { fg = gui03, bg = gui00 }) -vim.api.nvim_set_hl(0, 'StatusLine', { fg = gui04, bg = gui01 }) -vim.api.nvim_set_hl(0, 'TreesitterContext', { bg = gui01 }) +vim.api.nvim_set_hl(0, 'LineNr', { fg = gui03, bg = 'background' }) +vim.api.nvim_set_hl(0, 'SignColumn', { fg = gui03, bg = 'background' }) +vim.api.nvim_set_hl(0, 'StatusLine', { fg = gui03, bg = 'background' }) +vim.api.nvim_set_hl(0, 'StatusLineNC', { fg = gui03, bg = 'background' }) +vim.api.nvim_set_hl(0, 'TreesitterContext', {}) +-- vim.api.nvim_set_hl(0, 'TreesitterContextBottom', { underline = true, sp = 'foreground' }) vim.api.nvim_set_hl(0, 'NormalFloat', {}) vim.api.nvim_set_hl(0, 'WinSeparator', {}) vim.api.nvim_set_hl(0, 'FloatBorder', {}) -vim.api.nvim_set_hl(0, 'StatusLine', { fg = 'background', bg = 'background' }) vim.api.nvim_set_hl(0, 'Identifier', { fg = gui05, ctermfg = cterm05 }) vim.api.nvim_set_hl(0, 'Beacon', { bg = 'fg' }) @@ -332,13 +332,23 @@ vim.api.nvim_set_hl(0, 'CodeiumSuggestion', { link = 'Comment' }) vim.api.nvim_set_hl(0, 'LspReferenceText', { underline = true }) vim.api.nvim_set_hl(0, 'LspReferenceRead', { undercurl = true }) +-- LSP highlighting +vim.api.nvim_set_hl(0, 'DiagnosticFloatingError', { fg = gui08, ctermfg = cterm08 }) +vim.api.nvim_set_hl(0, 'DiagnosticFloatingWarn', { fg = gui09, ctermfg = cterm09 }) +vim.api.nvim_set_hl(0, 'DiagnosticFloatingInfo', { fg = gui05, ctermfg = cterm05 }) +vim.api.nvim_set_hl(0, 'DiagnosticFloatingHint', { fg = gui03, ctermfg = cterm03 }) + -- Hide all semantic highlights -- for _, group in ipairs(vim.fn.getcompletion('@lsp', 'highlight')) do -- vim.api.nvim_set_hl(0, group, {}) -- end vim.api.nvim_set_hl(0, '@lsp.type.class', {}) -vim.api.nvim_set_hl(0, '@lsp.type.class', { link = '@keyword', default = true }) +vim.api.nvim_set_hl(0, '@lsp.type.enum', {}) +vim.api.nvim_set_hl(0, '@lsp.type.keyword', { link = 'Keyword' }) vim.api.nvim_set_hl(0, '@lsp.mod.annotation', { italic = true }) vim.api.nvim_set_hl(0, '@lsp.type.type', { bold = true }) --- vim.api.nvim_set_hl(0, '@variable.builtin', { link = 'Keyword' }) +vim.api.nvim_set_hl(0, '@type.qualifier', { link = 'Keyword' }) +vim.api.nvim_set_hl(0, '@variable.builtin', { link = 'Type' }) +vim.api.nvim_set_hl(0, '@conceal', { link = 'Conceal' }) +vim.api.nvim_set_hl(0, '@text.reference', { link = 'Keyword' }) diff --git a/ftplugin/dart.lua b/ftplugin/dart.lua @@ -1,23 +1,43 @@ -vim.bo.comments = [[sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://]] -vim.bo.commentstring = '//%s' -vim.bo.includeexpr = [[v:lua.require('tms.ft.dart.package').package_path(v:fname)]] +vim.opt_local.comments = [[sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://]] +vim.opt_local.commentstring = '//%s' +vim.opt_local.includeexpr = [[v:lua.require('tms.ft.dart.package').package_path(v:fname)]] vim.opt_local.isfname:append{ ':' } vim.opt_local.iskeyword:append{ '$' } +vim.opt_local.textwidth = 80 +vim.opt_local.formatoptions:remove('t') +vim.opt_local.makeprg = [[dart %]] +vim.opt_local.efm = [[%f:%l:%c: %m]] vim.b.undo_ftplugin = 'setl com< cms< inex< isf<' - vim.cmd.iabbrev('STring', 'String') -vim.bo.makeprg = [[dart %]] -vim.bo.efm = [[%f:%l:%c: %m]] +if pcall(require, 'no-neck-pain') and not require'no-neck-pain.state'.enabled and not vim.g.no_neck_init then + require'no-neck-pain'.enable() + -- at start cursor is in left most window + vim.schedule(function() + vim.cmd [[exe "normal \<c-w>l"]] + end) + vim.g.no_neck_init = true +end local full_path = vim.fn.expand('%:p') if string.find(full_path, '%.pub%-cache') then vim.bo.modifiable = false end -vim.lsp.start(require'tms.lsp'.make_opts('dartls')) - -vim.api.nvim_set_hl(0, '@lsp.type.comment.dart', {}) +vim.lsp.start { + name = 'dartls', + cmd = { 'dart', 'language-server', '--protocol=lsp' }, + root_dir = vim.fs.dirname(vim.fs.find({ 'pubspec.yaml', '.git' }, { upward = true })[1]), + capabilities = require'tms.lsp'.capabilities(), + init_options = { closingLabels = true, outline = true, flutterOutline = true }, + settings = { dart = { completeFunctionCalls = true, showTodos = true, lineLength = 120 } }, + handlers = { + ['typeHierarchy/subtypes'] = require'dart-tools.lsp.type_hierarchy'.handler(), + ['typeHierarchy/supertypes'] = require'dart-tools.lsp.type_hierarchy'.handler(), + ['dart/textDocument/publishClosingLabels'] = require'dart-tools.lsp.labels'.handler(), + ['dart/textDocument/super'] = vim.lsp.handlers['textDocument/definition'], + }, +} vim.keymap.set('n', '<leader>ar', ':make<cr>', { desc = 'Dart Run' }) vim.keymap.set('n', '<leader>at', ':DartTest<cr>', { desc = 'Dart Test' }) @@ -31,9 +51,9 @@ vim.api.nvim_buf_create_user_command(0, 'DartTest', function() end, {}) if pcall(require, 'dart-tools') then - local dt_lsp = require('dart-tools.lsp') - local dt_req = require('dart-tools.lsp.request') - local ddebug = require('tms.ft.dart.debug') + local dt_lsp = require 'dart-tools.lsp' + local dt_req = require 'dart-tools.lsp.request' + local ddebug = require 'tms.ft.dart.debug' local cmd_opts = {} vim.api.nvim_buf_create_user_command(0, 'DartDebug', ddebug.func, cmd_opts) diff --git a/ftplugin/gdscript.lua b/ftplugin/gdscript.lua @@ -1 +1,7 @@ -vim.lsp.start(require'tms.lsp'.make_opts('gdscript')) +vim.lsp.start { + name = 'gdscript', + cmd = vim.lsp.rpc.connect('127.0.0.1', 6005), + filetypes = { 'gd', 'gdscript', 'gdscript3' }, + capabilities = require'tms.lsp'.capabilities(), + root_dir = vim.fs.dirname(vim.fs.find({ 'project.godot', '.git' }, { upward = true })[1]), +} diff --git a/ftplugin/json.lua b/ftplugin/json.lua @@ -1,9 +1,22 @@ vim.keymap.set('n', 'gO', '<cmd>Json<cr>') -if vim.fn.exists('+winbar') then - vim.opt_local.winbar = '%{luaeval(\'require\"tms.p.jsonpath\".get()\')}' +if vim.fn.exists '+winbar' then + vim.opt_local.winbar = '%{luaeval(\'require\"tms.p.jsonpath\".get()\')} %=%f' end vim.keymap.set('n', 'y<c-p>', function() - vim.fn.setreg('+', require('tms.p.jsonpath').get()) + vim.fn.setreg('+', require 'tms.p.jsonpath'.get()) end, { buffer = true, desc = 'Yank Json Path' }) + +local schemas +if pcall(require, 'schemastore') then + schemas = require 'schemastore'.json.schemas() +end + +vim.lsp.start { + name = 'jsonls', + cmd = { 'vscode-json-language-server', '--stdio' }, + capabilities = require 'tms.lsp'.capabilities(), + root_dir = vim.fn.getcwd(), + settings = { json = { schemas = schemas, validate = { enable = true } } }, +} diff --git a/ftplugin/lua.lua b/ftplugin/lua.lua @@ -2,3 +2,31 @@ vim.bo.efm = [[lua: %f:%l: %m]] vim.bo.makeprg = [[lua %:S]] vim.keymap.set('n', '<leader>ar', vim.cmd.make) + +vim.lsp.start { + name = 'lua-language-server', + cmd = { 'lua-language-server' }, + before_init = require'neodev.lsp'.before_init, + capabilities = require'tms.lsp'.capabilities(), + root_dir = vim.fn.getcwd(), + settings = { + Lua = { + runtime = { version = 'LuaJIT' }, + diagnostics = { + -- + globals = { 'vim' }, + disable = { 'missing-parameter' }, + }, + telemetry = { enable = false }, + workspace = { + checkThirdParty = false, + -- slow compared to neodev + -- library = vim.api.nvim_get_runtime_file('', true), + -- library = { vim.env.VIMRUNTIME }, + }, + completion = { callSnippet = 'Replace' }, + }, + }, +} + +vim.api.nvim_set_hl(0, '@lsp.mod.defaultLibrary.lua', { link = 'Special' }) diff --git a/lua/plugins.lua b/lua/plugins.lua @@ -55,18 +55,18 @@ return require('paq') { 'tamago324/cmp-zsh', 'uga-rosa/cmp-dictionary', 'hrsh7th/nvim-cmp', - 'aduros/ai.vim', -- ui + -- get rid of this 'stevearc/dressing.nvim', - 'rcarriga/nvim-notify', -- lsp + 'rcarriga/nvim-notify', 'neovim/nvim-lspconfig', 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', 'b0o/schemastore.nvim', + -- can we get rid of this? 'folke/neodev.nvim', { 'jose-elias-alvarez/null-ls.nvim', requires = { 'nvim-lua/plenary.nvim' } }, - 'lvimuser/lsp-inlayhints.nvim', -- use 'zbirenbaum/copilot.lua' 'dgagn/diagflow.nvim', - 'Exafunction/codeium.vim', -- dap + 'Exafunction/codeium.vim', 'mfussenegger/nvim-dap', 'leoluz/nvim-dap-go', 'rcarriga/nvim-dap-ui', diff --git a/lua/tms/lsp/init.lua b/lua/tms/lsp/init.lua @@ -1,14 +1,11 @@ local M = {} function M.capabilities() - local cap = vim.lsp.protocol.make_client_capabilities() - - local has_cmp, cmp_lsp = pcall(require, 'cmp_nvim_lsp') - if has_cmp then - cap = vim.tbl_deep_extend('force', cap, cmp_lsp.default_capabilities()) + local o = vim.lsp.protocol.make_client_capabilities() + if pcall(require, 'cmp_nvim_lsp') then + o = vim.tbl_deep_extend('force', o, require'cmp_nvim_lsp'.default_capabilities()) end - - return cap + return o end function M.make_opts(name) diff --git a/lua/tms/lsp/servers.lua b/lua/tms/lsp/servers.lua @@ -1,27 +1,6 @@ -- Custom configuration for servers local M = {} -function M.gdscript(opts) - opts.cmd = vim.lsp.rpc.connect('127.0.0.1', 6005) - opts.filetypes = { 'gd', 'gdscript', 'gdscript3' } - opts.root_dir = vim.fs.dirname(vim.fs.find({ 'project.godot', '.git' }, { upward = true })[1]) - return opts -end - -function M.jsonls(opts) - if pcall(require, 'schemastore') then - opts.settings = { - json = { - -- - schemas = require('schemastore').json.schemas(), - validate = { enable = true }, - }, - } - end - - return opts -end - function M.yamlls(opts) opts.settings = { yaml = { @@ -38,27 +17,6 @@ function M.cssls(opts) return opts end -function M.lua_ls(opts) - if pcall(require, 'neodev') then - require('neodev').setup {} - end - opts.settings = { - Lua = { - -- - runtime = { version = 'LuaJIT' }, - diagnostics = { - -- - globals = { 'vim' }, - disable = { 'missing-parameter' }, - }, - telemetry = { enable = false }, - workspace = { checkThirdParty = false }, - completion = { callSnippet = 'Replace' }, - }, - } - return opts -end - function M.emmet_ls(opts) opts.root_dir = function(path) vim.fs.dirname(vim.fs.find({ '.git', vim.fn.getcwd() }, { path = path, upward = true })[1]) @@ -78,15 +36,6 @@ function M.html(opts) return opts end -function M.dartls(opts) - local dart_tools_lsp = require('dart-tools.lsp') - if dart_tools_lsp then - opts = dart_tools_lsp.make_opts(opts) - opts.settings.dart.lineLength = 120 - end - return opts -end - function M.intelephense(opts) opts.init_options = { clearCache = true, diff --git a/lua/tms/options.lua b/lua/tms/options.lua @@ -33,7 +33,7 @@ vim.opt.statusline = ' ' vim.opt.winbar = '%=%m %f' vim.opt.ruler = false vim.opt.listchars = { space = '·', tab = '» ', extends = '›', precedes = '‹', nbsp = '_', trail = '_', eol = '$' } -vim.opt.fillchars = { eob = '•' } +vim.opt.fillchars = { eob = '•', diff = '╱' } vim.opt.scrolloff = 5 vim.opt.sidescrolloff = 5 vim.opt.signcolumn = 'yes:1' diff --git a/lua/tms/p/codeium.lua b/lua/tms/p/codeium.lua @@ -1,17 +1,6 @@ local M = {} -M.Accept = function() - local htok = pcall(require, 'hardtime') - if htok then - vim.cmd.Hardtime 'disable' - end - - vim.fn['codeium#Accept']() - - if htok then - vim.cmd.Hardtime 'enable' - end -end +M.Accept = vim.fn['codeium#Accept'] M.Clear = vim.fn['codeium#Clear'] diff --git a/lua/tms/p/jsonpath.lua b/lua/tms/p/jsonpath.lua @@ -1,7 +1,7 @@ local M = {} -local parsers = require('nvim-treesitter.parsers') -local ts_utils = require('nvim-treesitter.ts_utils') +local parsers = require 'nvim-treesitter.parsers' +local ts_utils = require 'nvim-treesitter.ts_utils' local get_node_text = function(node) return vim.treesitter.get_node_text(node, 0) diff --git a/plugin/ai.lua b/plugin/ai.lua @@ -1 +0,0 @@ -vim.g.ai_no_mappings = true diff --git a/queries/dart/context.scm b/queries/dart/context.scm @@ -0,0 +1,29 @@ +(function_body) @context + +(for_statement + body: (_) @context.end +) @context + +(while_statement + body: (_) @context.end +) @context + +(do_statement + body: (_) @context.end +) @context + +(try_statement + body: (_) @context.end +) @context + +(if_statement + consequence: (_) @context.end +) @context + +(class_definition + body: (_) @context.end +) @context + +(extension_declaration + body: (_) @context.end +) @context diff --git a/test/test.json b/test/test.json @@ -1,5 +1,6 @@ { "foo": [2, 3, 4, 5], "zab": "testing", - "woo": ["foobar"] + "woo": ["foobar"], + "a": {"b": "asdf"} }