diff --git a/init.lua b/init.lua index 8d44e29..42cebbf 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,5 @@ -if vim.fn.has('nvim-0.10') == 0 then - error('Need Neovim v0.10+ (Nightly) in order to run Cosmic!') +if vim.fn.has('nvim-0.11') == 0 then + error('Need Neovim v0.11+ (Nightly) in order to run Cosmic!') end local ok, err = pcall(require, 'cosmic') diff --git a/lazy-lock.json b/lazy-lock.json index 2527b6e..0bea887 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,14 +1,21 @@ { "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, +<<<<<<< HEAD "LuaSnip": { "branch": "master", "commit": "ac7cbc0e85710db7cba6510b1d8e6a1a551444f7" }, "SchemaStore.nvim": { "branch": "main", "commit": "3e54f4bbebea598646b141aa8aeca8a01b6ba601" }, "auto-session": { "branch": "main", "commit": "3cd531ce4d46fb156268ddedf5f3e6822ef26af7" }, +======= + "LuaSnip": { "branch": "master", "commit": "45db5addf8d0a201e1cf247cae4cdce605ad3768" }, + "SchemaStore.nvim": { "branch": "main", "commit": "ae75241aed204d829fe15595bbf05e6fbf3d49dd" }, + "auto-session": { "branch": "main", "commit": "0e9aa77525b5217e8eacb36007edd3d02bb2a91a" }, +>>>>>>> v0.7 "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" }, "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, "cosmic-ui": { "branch": "main", "commit": "c0b14531999f2bfef3d927c4dcd57a1a8fed5ee9" }, +<<<<<<< HEAD "friendly-snippets": { "branch": "main", "commit": "de8fce94985873666bd9712ea3e49ee17aadb1ed" }, "gitsigns.nvim": { "branch": "main", "commit": "ee7634ab4f0a6606438fe13e16cbf2065589a5ed" }, "lazy.nvim": { "branch": "main", "commit": "cf8ecc2c5e4332760431a33534240b0cbc6680ab" }, @@ -41,4 +48,40 @@ "tokyonight.nvim": { "branch": "main", "commit": "4867d10ead04e69872b24818d0d306539305cf87" }, "vim-fugitive": { "branch": "master", "commit": "d4877e54cef67f5af4f950935b1ade19ed6b7370" }, "which-key.nvim": { "branch": "main", "commit": "8badb359f7ab8711e2575ef75dfe6fbbd87e4821" } +======= + "friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" }, + "gitsigns.nvim": { "branch": "main", "commit": "899e993850084ea33d001ec229d237bc020c19ae" }, + "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, + "lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" }, + "lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" }, + "luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "482350b050bd413931c2cdd4857443c3da7d57cb" }, + "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, + "noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" }, + "none-ls-extras.nvim": { "branch": "main", "commit": "dfdc998a8c7bb728abab156942bd43ed2345845a" }, + "none-ls-shellcheck.nvim": { "branch": "main", "commit": "0f84461241e76e376a95fb7391deac82dc3efdbf" }, + "none-ls.nvim": { "branch": "main", "commit": "203f5ebde4a1af48ba2eb146401b5be2e7866942" }, + "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, + "nvim-autopairs": { "branch": "master", "commit": "19606af7c039271d5aa96bceff101e7523af3136" }, + "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, + "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, + "nvim-lspconfig": { "branch": "master", "commit": "2a6f00ff66e276ab3289be8bb9f844f7ab385848" }, + "nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" }, + "nvim-tree.lua": { "branch": "master", "commit": "d43ab67d0eb4317961c5e9d15fffe908519debe0" }, + "nvim-treesitter": { "branch": "master", "commit": "7a64148896289a91cb2a92e9da3f76d5512a3fb8" }, + "nvim-treesitter-refactor": { "branch": "master", "commit": "65ad2eca822dfaec2a3603119ec3cc8826a7859e" }, + "nvim-ts-autotag": { "branch": "main", "commit": "e239a560f338be31337e7abc3ee42515daf23f5e" }, + "nvim-ts-context-commentstring": { "branch": "main", "commit": "375c2d86cee6674afd75b4f727ce3a80065552f7" }, + "nvim-web-devicons": { "branch": "master", "commit": "3722e3d1fb5fe1896a104eb489e8f8651260b520" }, + "nx.nvim": { "branch": "main", "commit": "f8a3a21b3d540889401a40d1f2803083794c0372" }, + "plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" }, + "popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, + "telescope.nvim": { "branch": "master", "commit": "5972437de807c3bc101565175da66a1aa4f8707a" }, + "todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" }, + "toggleterm.nvim": { "branch": "main", "commit": "137d06fb103952a0fb567882bb8527e2f92d327d" }, + "tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" }, + "vim-fugitive": { "branch": "master", "commit": "0444df68cd1cdabc7453d6bd84099458327e5513" }, + "which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" } +>>>>>>> v0.7 } diff --git a/lua/cosmic/config/examples/config.lua b/lua/cosmic/config/examples/config.lua index 43079d6..1c5045d 100644 --- a/lua/cosmic/config/examples/config.lua +++ b/lua/cosmic/config/examples/config.lua @@ -1,8 +1,5 @@ -- Override Cosmic configuration options --- You can require null-ls if needed --- local null_ls = require('null-ls') - local config = { -- See :h nvim_open_win for possible border options border = 'rounded', @@ -10,8 +7,6 @@ local config = { lsp = { -- Enable/disable inlay hints inlay_hint = false, - -- True/false or table of filetypes {'.ts', '.js',} - format_on_save = true, -- Time in MS before format timeout format_timeout = 3000, -- Set to false to disable rename notification @@ -24,6 +19,28 @@ local config = { 'rust_analyzer', }, + -- See Cosmic defaults cosmic/plugins/null-ls/init.lua and https://github.com/jose-elias-alvarez/null-ls.nvim/ + -- If adding additional sources, be sure to also copy the defaults that you would like to preserve from cosmic/plugins/null-ls/init.lua + null_ls = { + -- Disable default list of sources provided by CosmicNvim + default_cosmic_sources = false, + --disable formatting + format_on_save = false, + -- Add additional sources here + get_sources = function() + local null_ls = require('null-ls') + return { + null_ls.builtins.diagnostics.shellcheck, + null_ls.builtins.diagnostics.actionlint.with({ + condition = function() + local cwd = vim.fn.expand('%:p:.') + return cwd:find('.github/workflows') + end, + }), + } + end, + }, + -- lsp servers that should be enabled servers = { -- Enable rust_analyzer @@ -32,36 +49,16 @@ local config = { -- Enable ts_ls w/custom settings ts_ls = { -- Disable formatting (defaults to true) - format = false, + format_on_save = false, -- OR add/override server options opts = { on_attach = function(client, bufnr) end, flags = { debounce_text_changes = 150, }, + settings = {}, }, }, - -- See Cosmic defaults lsp/providers/null_ls.lua and https://github.com/jose-elias-alvarez/null-ls.nvim/ - -- If adding additional sources, be sure to also copy the defaults that you would like to preserve from lsp/providers/null_ls.lua - null_ls = { - -- Disable default list of sources provided by CosmicNvim - default_cosmic_sources = false, - --disable formatting - format = false, - -- Add additional sources here - get_sources = function() - local null_ls = require('null-ls') - return { - null_ls.builtins.diagnostics.shellcheck, - null_ls.builtins.diagnostics.actionlint.with({ - condition = function() - local cwd = vim.fn.expand('%:p:.') - return cwd:find('.github/workflows') - end, - }), - } - end, - }, }, }, @@ -77,14 +74,6 @@ local config = { diagnostic = {}, -- See :h gitsigns-usage gitsigns = {}, - -- See https://git.sr.ht/~whynothugo/lsp_lines.nvim - lsp_lines = { - -- additional flag only for CosmicNvim - -- true - loads plugin and is enabled at start - -- false - loads plugin but is not enabled at start - -- you may use ld to toggle - enable_on_start = true, - }, -- See https://github.com/nvim-lualine/lualine.nvim#default-configuration lualine = {}, -- See https://github.com/L3MON4D3/LuaSnip/blob/577045e9adf325e58f690f4d4b4a293f3dcec1b3/README.md#config diff --git a/lua/cosmic/config/examples/editor.lua b/lua/cosmic/config/examples/editor.lua index aec7e5b..6604db6 100644 --- a/lua/cosmic/config/examples/editor.lua +++ b/lua/cosmic/config/examples/editor.lua @@ -1,7 +1,7 @@ -- Override Cosmic editor options local g = vim.g -local map = require('cosmic.utils').map +local map = require('cosmic.utils').set_keymap local opt = vim.opt -- Default leader is diff --git a/lua/cosmic/core/mappings.lua b/lua/cosmic/core/mappings.lua index a7743fe..c83fdcf 100644 --- a/lua/cosmic/core/mappings.lua +++ b/lua/cosmic/core/mappings.lua @@ -1,4 +1,4 @@ -local map = require('cosmic.utils').map +local map = require('cosmic.utils').set_keymap -- Quickfix mappings map('n', 'ck', ':cexpr []', { desc = 'Clear list' }) @@ -9,9 +9,11 @@ map('n', 'cp', ':cprevzz', { desc = 'Prev Item' }) map('n', 'cn', ':cnextzz', { desc = 'Next Item' }) -- buffer navigation -map('n', 'bp', ':bprev', { desc = 'Prev buffer' }) -map('n', 'bn', ':bnext', { desc = 'Next buffer' }) -map('n', 'bd', ':bdelete', { desc = 'Delete buffer' }) +map('n', 'kp', ':bprev', { desc = 'Prev buffer' }) +map('n', 'kn', ':bnext', { desc = 'Next buffer' }) +map('n', 'kd', ':bdelete', { desc = 'Delete buffer' }) +map('n', 'kc', ':new', { desc = 'New buffer' }) +map('n', 'ko', '%bd|e#', { desc = 'Close all buffers but the current one' }) -- https://stackoverflow.com/a/42071865/516188 -- tab navigation map('n', 'tp', ':tabprevious', { desc = 'Prev tab' }) @@ -33,5 +35,3 @@ map('n', '', ':resize -2', { desc = 'Resize -2' }) map('n', '', ':resize +2', { desc = 'Resize +2' }) map('n', '', ':vertical resize -2', { desc = 'Vertical Resize -2' }) map('n', '', ':vertical resize +2', { desc = 'Vertical Resize +2' }) - -map('n', 'bo', '%bd|e#', { desc = 'Close all buffers but the current one' }) -- https://stackoverflow.com/a/42071865/516188 diff --git a/lua/cosmic/core/user.lua b/lua/cosmic/core/user.lua index 78a69cb..5e938dc 100644 --- a/lua/cosmic/core/user.lua +++ b/lua/cosmic/core/user.lua @@ -9,18 +9,9 @@ local default_config = { border = 'rounded', disable_builtin_plugins = {}, add_plugins = {}, - plugins = { - lsp_lines = { - -- additional flag only for CosmicNvim - -- true - loads plugin and is enabled at start - -- false - loads plugin but is not enabled at start - -- you may use ld to toggle - enable_on_start = false, - }, - }, + plugins = {}, lsp = { inlay_hint = false, - format_on_save = true, -- true/false or table of filetypes {'.ts', '.js',} format_timeout = 500, rename_notification = true, -- table of callbacks pushed via plugins @@ -49,11 +40,11 @@ local default_config = { tailwindcss = true, eslint = true, jsonls = { - format = false, + format_on_save = false, }, pyright = true, lua_ls = { - format = false, + format_on_save = false, }, gopls = true, html = true, diff --git a/lua/cosmic/lsp/diagnostics/config.lua b/lua/cosmic/lsp/diagnostics/config.lua deleted file mode 100644 index 783769f..0000000 --- a/lua/cosmic/lsp/diagnostics/config.lua +++ /dev/null @@ -1,50 +0,0 @@ -local u = require('cosmic.utils') -local icons = require('cosmic.utils.icons') -local user_config = require('cosmic.core.user') - -local function format_diagnostic(diagnostic) - local icon = icons.error - if diagnostic.severity == vim.diagnostic.severity.WARN then - icon = icons.warn - elseif diagnostic.severity == vim.diagnostic.severity.INFO then - icon = icons.info - elseif diagnostic.severity == vim.diagnostic.severity.HINT then - icon = icons.hint - end - - local message = string.format('%s %s', icon, diagnostic.message) - if diagnostic.code and diagnostic.source then - message = string.format('%s [%s][%s] %s', icon, diagnostic.source, diagnostic.code, diagnostic.message) - elseif diagnostic.code or diagnostic.source then - message = string.format('%s [%s] %s', icon, diagnostic.code or diagnostic.source, diagnostic.message) - end - - return message .. ' ' -end - -local config = u.merge({ - underline = true, - signs = true, - update_in_insert = false, - severity_sort = true, - float = { - border = user_config.border, - focusable = false, - header = { icons.debug .. ' Diagnostics:', 'DiagnosticInfo' }, - scope = 'line', - suffix = '', - source = false, - format = format_diagnostic, - }, - virtual_text = { - prefix = '', - spacing = 2, - source = false, - severity = { - min = vim.diagnostic.severity.HINT, - }, - format = format_diagnostic, - }, -}, user_config.diagnostic or {}) - -return config diff --git a/lua/cosmic/lsp/diagnostics/init.lua b/lua/cosmic/lsp/diagnostics/init.lua index ee71c88..9f58b34 100644 --- a/lua/cosmic/lsp/diagnostics/init.lua +++ b/lua/cosmic/lsp/diagnostics/init.lua @@ -1,19 +1,64 @@ +local u = require('cosmic.utils') local icons = require('cosmic.utils.icons') -local config = require('cosmic.lsp.diagnostics.config') +local user_config = require('cosmic.core.user') --- set up LSP signs -local signs = { - Error = icons.error .. ' ', - Warn = icons.warn .. ' ', - Hint = icons.hint .. ' ', - Info = icons.info .. ' ', -} +local function format_diagnostic(diagnostic) + local icon = icons.error + if diagnostic.severity == vim.diagnostic.severity.WARN then + icon = icons.warn + elseif diagnostic.severity == vim.diagnostic.severity.INFO then + icon = icons.info + elseif diagnostic.severity == vim.diagnostic.severity.HINT then + icon = icons.hint + end --- Set up diagnostic signs -for type, icon in pairs(signs) do - local hl = 'DiagnosticSign' .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' }) + local message = string.format('%s %s', icon, diagnostic.message) + if diagnostic.code and diagnostic.source then + message = string.format('%s [%s][%s] %s', icon, diagnostic.source, diagnostic.code, diagnostic.message) + elseif diagnostic.code or diagnostic.source then + message = string.format('%s [%s] %s', icon, diagnostic.code or diagnostic.source, diagnostic.message) + end + + return message .. ' ' end +local config = u.merge({ + underline = true, + update_in_insert = false, + severity_sort = true, + signs = { + text = { + [vim.diagnostic.severity.ERROR] = icons.error .. ' ', + [vim.diagnostic.severity.HINT] = icons.hint .. ' ', + [vim.diagnostic.severity.INFO] = icons.info .. ' ', + [vim.diagnostic.severity.WARN] = icons.warn .. ' ', + }, + numhl = { + [vim.diagnostic.severity.ERROR] = 'ErrorMsg', + [vim.diagnostic.severity.HINT] = 'DiagnosticsSignHint', + [vim.diagnostic.severity.INFO] = 'DiagnosticsSignInfo', + [vim.diagnostic.severity.WARN] = 'WarningMsg', + }, + }, + float = { + border = user_config.border, + focusable = false, + header = { icons.debug .. ' Diagnostics:', 'DiagnosticInfo' }, + scope = 'line', + suffix = '', + source = false, + format = format_diagnostic, + }, + virtual_text = { + prefix = '', + spacing = 2, + source = false, + severity = { + min = vim.diagnostic.severity.HINT, + }, + format = format_diagnostic, + }, +}, user_config.diagnostic or {}) + -- set up diagnostics vim.diagnostic.config(config) diff --git a/lua/cosmic/lsp/mappings.lua b/lua/cosmic/lsp/mappings.lua index ac03c9c..0b04d23 100644 --- a/lua/cosmic/lsp/mappings.lua +++ b/lua/cosmic/lsp/mappings.lua @@ -44,8 +44,10 @@ function M.init(client, bufnr) buf_map('v', 'la', 'lua vim.lsp.buf.range_code_actions()', { desc = 'Range Code Actions' }) -- formatting - buf_map('n', 'lf', '', { desc = 'Format', callback = lsp_utils.format }) - buf_map('v', 'lf', 'lua vim.lsp.buf.range_formatting()', { desc = 'Range Format' }) + if client.supports_method('textDocument/formatting') then + buf_map('n', 'lf', '', { desc = 'Format', callback = lsp_utils.buf_format }) + buf_map('v', 'lf', 'lua vim.lsp.buf.range_formatting()', { desc = 'Range Format' }) + end -- lsp workspace buf_map('n', 'lwa', 'lua vim.lsp.buf.add_workspace_folder()', { desc = 'Add workspace folder' }) diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua deleted file mode 100644 index 1955f19..0000000 --- a/lua/cosmic/lsp/providers/defaults.lua +++ /dev/null @@ -1,85 +0,0 @@ -local capabilities = require('cmp_nvim_lsp').default_capabilities() -local M = {} -local augroup_name = 'CosmicNvimLspFormat' -local group = vim.api.nvim_create_augroup(augroup_name, { clear = true }) -local user_config = require('cosmic.core.user') -local u = require('cosmic.utils') - -function M.on_attach(client, bufnr) - local function buf_set_option(name, value) - vim.api.nvim_set_option_value(name, value, { - buf = bufnr, - }) - end - - -- Enable completion triggered by - buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - - if user_config.lsp.inlay_hint and client.supports_method('textDocument/inlayHint') then - vim.lsp.inlay_hint(bufnr, true) - end - - if client.supports_method('textDocument/formatting') then - -- set up :LspFormat for clients that are capable - vim.cmd(string.format("command! -nargs=? LspFormat lua require('cosmic.utils.lsp').format(%s, )", bufnr)) - - -- set up auto format on save - if user_config.lsp.format_on_save then - -- check user config to see if we can format on save - -- collect filetype(s) from user config - local filetype_patterns = {} - local filetype_allowed = false - if vim.tbl_islist(user_config.lsp.format_on_save) then - filetype_patterns = user_config.lsp.format_on_save - else -- any filetype if none set - filetype_allowed = true - end - - vim.api.nvim_clear_autocmds({ - group = group, - buffer = bufnr, - }) - -- autocommand for format on save with specified filetype(s) - vim.api.nvim_create_autocmd('BufWritePre', { - callback = function(ev) - for _, pattern in pairs(filetype_patterns) do - if string.match(ev.file, pattern) then - filetype_allowed = true - end - end - if filetype_allowed then - require('cosmic.utils.lsp').format(bufnr) - end - end, - buffer = bufnr, - group = group, - }) - end - end - - -- set up default mappings - require('cosmic.lsp.mappings').init(client, bufnr) - - -- set up any additional mappings/overrides from user config - for _, callback in pairs(user_config.lsp.on_attach_mappings) do - callback(client, bufnr) - end -end - -M.capabilities = u.merge(capabilities, { - -- See: https://github.com/neovim/neovim/issues/23291 - workspace = { - didChangeWatchedFiles = { - dynamicRegistration = false, - }, - }, -}) - -M.root_dir = function(fname) - local util = require('lspconfig').util - return util.root_pattern('.git', 'tsconfig.base.json', 'tsconfig.json', 'package.json', '.eslint.js', '.eslint.json')( - fname - ) -end - -return M diff --git a/lua/cosmic/lsp/providers/eslint.lua b/lua/cosmic/lsp/providers/eslint.lua deleted file mode 100644 index b8b1c79..0000000 --- a/lua/cosmic/lsp/providers/eslint.lua +++ /dev/null @@ -1,10 +0,0 @@ -local default_on_attach = require('cosmic.lsp.providers.defaults').on_attach -return { - on_attach = function(client, bufnr) - default_on_attach(client, bufnr) - vim.api.nvim_create_autocmd('BufWritePre', { - buffer = bufnr, - command = 'EslintFixAll', - }) - end, -} diff --git a/lua/cosmic/lsp/providers/tsserver.lua b/lua/cosmic/lsp/providers/tsserver.lua deleted file mode 100644 index 167b819..0000000 --- a/lua/cosmic/lsp/providers/tsserver.lua +++ /dev/null @@ -1,8 +0,0 @@ -local default_on_attach = require('cosmic.lsp.providers.defaults').on_attach -local M = {} - -function M.on_attach(client, bufnr) - default_on_attach(client, bufnr) -end - -return M diff --git a/lua/cosmic/lsp/servers/defaults.lua b/lua/cosmic/lsp/servers/defaults.lua new file mode 100644 index 0000000..082f2f8 --- /dev/null +++ b/lua/cosmic/lsp/servers/defaults.lua @@ -0,0 +1,70 @@ +local M = {} +local augroup_name = 'CosmicNvimLspFormat' +local user_config = require('cosmic.core.user') +local u = require('cosmic.utils') +local lsp_utils = require('cosmic.utils.lsp') +local lsp_mappings = require('cosmic.lsp.mappings') + +M.augroup = vim.api.nvim_create_augroup(augroup_name, { clear = true }) + +function M.on_attach(client, bufnr) + local function buf_set_option(name, value) + vim.api.nvim_set_option_value(name, value, { + buf = bufnr, + }) + end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + if user_config.lsp.inlay_hint and client.supports_method('textDocument/inlayHint') then + vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) + end + + if client.supports_method('textDocument/formatting') then + -- set up :LspFormat for clients that are capable + vim.cmd( + string.format("command! -nargs=? LspFormat lua require('cosmic.utils.lsp').buf_format(%s, )", bufnr) + ) + + -- set up auto format on save + vim.api.nvim_clear_autocmds({ + group = M.augroup, + buffer = bufnr, + }) + vim.api.nvim_create_autocmd('BufWritePre', { + callback = function() + if lsp_utils.format_on_save_enabled then + vim.lsp.buf.format({ + timeout_ms = user_config.lsp.format_timeout, + bufnr = bufnr, + filter = function() + return lsp_utils.can_client_format_on_save(client) + end, + }) + end + end, + buffer = bufnr, + group = M.augroup, + }) + end + + -- set up default mappings + lsp_mappings.init(client, bufnr) + + -- set up any additional mappings/overrides from user config + for _, callback in pairs(user_config.lsp.on_attach_mappings) do + callback(client, bufnr) + end +end + +M.capabilities = u.merge(require('cmp_nvim_lsp').default_capabilities(), { + -- See: https://github.com/neovim/neovim/issues/23291 + workspace = { + didChangeWatchedFiles = { + dynamicRegistration = false, + }, + }, +}) + +return M diff --git a/lua/cosmic/lsp/servers/eslint.lua b/lua/cosmic/lsp/servers/eslint.lua new file mode 100644 index 0000000..9a304a8 --- /dev/null +++ b/lua/cosmic/lsp/servers/eslint.lua @@ -0,0 +1,14 @@ +local defaults = require('cosmic.lsp.servers.defaults') +local can_format_on_save = require('cosmic.utils.lsp').can_client_format_on_save +return { + on_attach = function(client, bufnr) + defaults.on_attach(client, bufnr) + if can_format_on_save(client) then + vim.api.nvim_create_autocmd('BufWritePre', { + buffer = bufnr, + command = 'EslintFixAll', + group = defaults.augroup, + }) + end + end, +} diff --git a/lua/cosmic/lsp/providers/jsonls.lua b/lua/cosmic/lsp/servers/jsonls.lua similarity index 100% rename from lua/cosmic/lsp/providers/jsonls.lua rename to lua/cosmic/lsp/servers/jsonls.lua diff --git a/lua/cosmic/lsp/providers/lua_ls.lua b/lua/cosmic/lsp/servers/lua_ls.lua similarity index 100% rename from lua/cosmic/lsp/providers/lua_ls.lua rename to lua/cosmic/lsp/servers/lua_ls.lua diff --git a/lua/cosmic/lsp/providers/pyright.lua b/lua/cosmic/lsp/servers/pyright.lua similarity index 100% rename from lua/cosmic/lsp/providers/pyright.lua rename to lua/cosmic/lsp/servers/pyright.lua diff --git a/lua/cosmic/lsp/servers/tsserver.lua b/lua/cosmic/lsp/servers/tsserver.lua new file mode 100644 index 0000000..cc0bb64 --- /dev/null +++ b/lua/cosmic/lsp/servers/tsserver.lua @@ -0,0 +1,16 @@ +local M = {} + +M.root_dir = function(fname) + local util = require('lspconfig').util + return util.root_pattern( + '.git', + 'tsconfig.base.json', + 'tsconfig.json', + 'package.json', + '.eslint.js', + '.eslint.json', + 'eslint.config.js' + )(fname) +end + +return M diff --git a/lua/cosmic/plugins/auto-session/mappings.lua b/lua/cosmic/plugins/auto-session/mappings.lua index 339df10..1b7ef87 100644 --- a/lua/cosmic/plugins/auto-session/mappings.lua +++ b/lua/cosmic/plugins/auto-session/mappings.lua @@ -1,4 +1,4 @@ -local map = require('cosmic.utils').map +local map = require('cosmic.utils').set_keymap -- session map('n', 'sl', 'silent RestoreSession', { desc = 'Restore session' }) diff --git a/lua/cosmic/plugins/gitsigns/init.lua b/lua/cosmic/plugins/gitsigns/init.lua index 18aa864..99f507e 100644 --- a/lua/cosmic/plugins/gitsigns/init.lua +++ b/lua/cosmic/plugins/gitsigns/init.lua @@ -53,30 +53,30 @@ return { }) -- Actions - map('n', 'hs', gs.stage_hunk, { desc = 'Stage hunk' }) - map('n', 'hr', gs.reset_hunk, { desc = 'Reset hunk' }) - map('v', 'hs', function() + map('n', 'vs', gs.stage_hunk, { desc = 'Stage hunk' }) + map('n', 'vr', gs.reset_hunk, { desc = 'Reset hunk' }) + map('v', 'vs', function() gs.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, { desc = 'Stage hunk selection', }) - map('v', 'hr', function() + map('v', 'vr', function() gs.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, { desc = 'Reset hunk selection', }) - map('n', 'hS', gs.stage_buffer, { desc = 'Stage buffer' }) - map('n', 'hu', gs.undo_stage_hunk, { desc = 'Undo stage hunk' }) - map('n', 'hR', gs.reset_buffer, { desc = 'Reset buffer' }) - map('n', 'hp', gs.preview_hunk, { desc = 'Preview hunk' }) - map('n', 'hb', function() + map('n', 'vS', gs.stage_buffer, { desc = 'Stage buffer' }) + map('n', 'vu', gs.undo_stage_hunk, { desc = 'Undo stage hunk' }) + map('n', 'vR', gs.reset_buffer, { desc = 'Reset buffer' }) + map('n', 'vp', gs.preview_hunk, { desc = 'Preview hunk' }) + map('n', 'vb', function() gs.blame_line({ full = true }) end, { desc = 'Blame line', }) - map('n', 'htb', gs.toggle_current_line_blame, { desc = 'Toggle blame current line' }) - map('n', 'hd', gs.diffthis, { desc = 'Diff buffer' }) - map('n', 'hD', function() + map('n', 'vtb', gs.toggle_current_line_blame, { desc = 'Toggle blame current line' }) + map('n', 'vd', gs.diffthis, { desc = 'Diff buffer' }) + map('n', 'vD', function() gs.diffthis('~') end, { desc = 'Diff project' }) map('n', 'td', gs.toggle_deleted, { desc = 'Toggle delete' }) diff --git a/lua/cosmic/plugins/lazydev/init.lua b/lua/cosmic/plugins/lazydev/init.lua new file mode 100644 index 0000000..d94937f --- /dev/null +++ b/lua/cosmic/plugins/lazydev/init.lua @@ -0,0 +1,18 @@ +local user_config = require('cosmic.core.user') +return { + 'folke/lazydev.nvim', + ft = 'lua', -- only load on lua files + opts = { + library = { + -- See the configuration section for more details + -- Load luvit types when the `vim.uv` word is found + { path = 'luvit-meta/library', words = { 'vim%.uv' } }, + 'lazy.nvim', + 'toggleterm.nvim', + --[[ { path = 'plenary.nvim/lua/plenary', words = { 'plenary' } }, ]] + }, + }, + dependencies = { { 'Bilal2453/luvit-meta', lazy = true } }, + enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'lazydev'), + event = 'VeryLazy', +} diff --git a/lua/cosmic/plugins/lualine/init.lua b/lua/cosmic/plugins/lualine/init.lua index a066e57..8a63fe1 100644 --- a/lua/cosmic/plugins/lualine/init.lua +++ b/lua/cosmic/plugins/lualine/init.lua @@ -56,7 +56,7 @@ return { custom_sections.diff, }, lualine_x = { 'diagnostics' }, - lualine_y = { lsp_utils.get_active_clients_str }, + lualine_y = { lsp_utils.buf_get_active_clients_str }, lualine_z = { 'location', 'progress' }, }, inactive_sections = { diff --git a/lua/cosmic/plugins/luasnip/init.lua b/lua/cosmic/plugins/luasnip/init.lua deleted file mode 100644 index 2993989..0000000 --- a/lua/cosmic/plugins/luasnip/init.lua +++ /dev/null @@ -1,26 +0,0 @@ -local user_config = require('cosmic.core.user') -local u = require('cosmic.utils') - -return { - 'L3MON4D3/LuaSnip', - config = function() - local ls = require('luasnip') - ls.config.set_config(u.merge({ - history = true, - -- Update more often, :h events for more info. - updateevents = 'TextChanged,TextChangedI', - enable_autosnippets = true, - }, user_config.plugins.luasnip or {})) - - -- extend html snippets to react files - require('luasnip').filetype_extend('javascriptreact', { 'html' }) - require('luasnip').filetype_extend('typescriptreact', { 'html' }) - - -- load snippets (friendly-snippets) - require('luasnip.loaders.from_vscode').lazy_load() - end, - dependencies = { - 'rafamadriz/friendly-snippets', - }, - enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'luasnip'), -} diff --git a/lua/cosmic/plugins/mason-lspconfig/init.lua b/lua/cosmic/plugins/mason-lspconfig/init.lua index 0735b1c..a682cce 100644 --- a/lua/cosmic/plugins/mason-lspconfig/init.lua +++ b/lua/cosmic/plugins/mason-lspconfig/init.lua @@ -13,38 +13,24 @@ return { -- set up lsp servers local u = require('cosmic.utils') - local default_config = require('cosmic.lsp.providers.defaults') + local default_config = require('cosmic.lsp.servers.defaults') local lspconfig = require('lspconfig') local start_server = function(server) - -- null_ls doesn't need/can't to be started via lspconfig - if server == 'null_ls' or server == 'typescript-tools' then - return - end - - local opts = default_config + local server_config = default_config -- set up default cosmic options - if server == 'tsserver' then - opts = u.merge(opts, require('cosmic.lsp.providers.tsserver')) - elseif server == 'jsonls' then - opts = u.merge(opts, require('cosmic.lsp.providers.jsonls')) - elseif server == 'pyright' then - opts = u.merge(opts, require('cosmic.lsp.providers.pyright')) - elseif server == 'eslint' then - opts = u.merge(opts, require('cosmic.lsp.providers.eslint')) - elseif server == 'lua_ls' then - opts = u.merge(opts, require('cosmic.lsp.providers.lua_ls')) + local ok, cosmic_server_config = pcall(require, 'cosmic.lsp.servers.' .. server) + if ok then + server_config = u.merge(server_config, cosmic_server_config) end - -- override options if user definds them - if type(user_config.lsp.servers[server]) == 'table' then - if user_config.lsp.servers[server].opts ~= nil then - opts = u.merge(opts, user_config.lsp.servers[server].opts) - end + -- override options if user defines them + if type(user_config.lsp.servers[server]) == 'table' and user_config.lsp.servers[server].opts ~= nil then + server_config = u.merge(server_config, user_config.lsp.servers[server].opts) end - lspconfig[server].setup(opts) + lspconfig[server].setup(server_config) end for config_server, config_opt in pairs(user_config.lsp.servers) do @@ -56,5 +42,6 @@ return { dependencies = { 'williamboman/mason.nvim', }, - event = 'BufEnter', + lazy = false, + --[[ event = 'BufEnter', ]] } diff --git a/lua/cosmic/plugins/neodev/init.lua b/lua/cosmic/plugins/neodev/init.lua deleted file mode 100644 index e81423b..0000000 --- a/lua/cosmic/plugins/neodev/init.lua +++ /dev/null @@ -1 +0,0 @@ -return { 'folke/neodev.nvim', opt = {} } diff --git a/lua/cosmic/plugins/noice/init.lua b/lua/cosmic/plugins/noice/init.lua index 103851a..7b1178c 100644 --- a/lua/cosmic/plugins/noice/init.lua +++ b/lua/cosmic/plugins/noice/init.lua @@ -1,6 +1,6 @@ local user_config = require('cosmic.core.user') local u = require('cosmic.utils') -local map = require('cosmic.utils').map +local map = require('cosmic.utils').set_keymap return { 'folke/noice.nvim', diff --git a/lua/cosmic/plugins/null-ls/init.lua b/lua/cosmic/plugins/null-ls/init.lua index 628de54..8260039 100644 --- a/lua/cosmic/plugins/null-ls/init.lua +++ b/lua/cosmic/plugins/null-ls/init.lua @@ -8,11 +8,11 @@ return { 'gbprod/none-ls-shellcheck.nvim', }, config = function() - local defaults = require('cosmic.lsp.providers.defaults') + local defaults = require('cosmic.lsp.servers.defaults') local null_ls = require('null-ls') - local config_opts = u.merge(user_config.lsp.servers.null_ls or {}, { + local config_opts = u.merge({ default_cosmic_sources = true, - }) + }, user_config.lsp.null_ls or {}) if config_opts.default_cosmic_sources then local function get_user_config_sources() if not config_opts.add_sources then @@ -25,9 +25,6 @@ return { config_opts.sources = u.merge_list({ null_ls.builtins.code_actions.gitsigns, null_ls.builtins.diagnostics.markdownlint, - --[[ require('none-ls.diagnostics.eslint_d'), ]] - --[[ require('none-ls.formatting.eslint_d'), ]] - --[[ require('none-ls.code_actions.eslint_d'), ]] null_ls.builtins.formatting.prettierd.with({ env = { PRETTIERD_LOCAL_PRETTIER_ONLY = 1, @@ -40,6 +37,7 @@ return { null_ls.setup(u.merge(defaults, config_opts)) end, - event = 'BufReadPre', + --[[ event = 'BufEnter', ]] + lazy = false, enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'null_ls'), } diff --git a/lua/cosmic/plugins/nvim-cmp/config.lua b/lua/cosmic/plugins/nvim-cmp/config.lua index ff666b8..17209b5 100644 --- a/lua/cosmic/plugins/nvim-cmp/config.lua +++ b/lua/cosmic/plugins/nvim-cmp/config.lua @@ -1,16 +1,27 @@ local cmp = require('cmp') local u = require('cosmic.utils') -local luasnip = require('luasnip') local user_config = require('cosmic.core.user') local icons = require('cosmic.utils.icons') local cmp_autopairs = require('nvim-autopairs.completion.cmp') +local user_has_luasnip = not vim.tbl_contains(user_config.disable_builtin_plugins, 'luasnip') +local _, luasnip = pcall(require, 'luasnip') + local has_words_before = function() unpack = unpack or table.unpack local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') == nil end +local snippet = {} +if user_has_luasnip then + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + } +end + local default_cmp_opts = { enabled = function() -- disable completion in comments @@ -22,11 +33,7 @@ local default_cmp_opts = { return not context.in_treesitter_capture('comment') and not context.in_syntax_group('Comment') end end, - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, + snippet = snippet, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), @@ -42,7 +49,7 @@ local default_cmp_opts = { [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then + elseif user_has_luasnip and luasnip.expand_or_jumpable() then luasnip.expand_or_jump() elseif has_words_before() then cmp.complete() @@ -56,7 +63,7 @@ local default_cmp_opts = { [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() - elseif luasnip.jumpable(-1) then + elseif user_has_luasnip and luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() diff --git a/lua/cosmic/plugins/nvim-cmp/init.lua b/lua/cosmic/plugins/nvim-cmp/init.lua index e3fe89f..78cfe79 100644 --- a/lua/cosmic/plugins/nvim-cmp/init.lua +++ b/lua/cosmic/plugins/nvim-cmp/init.lua @@ -1,4 +1,5 @@ local user_config = require('cosmic.core.user') +local u = require('cosmic.utils') return { 'hrsh7th/nvim-cmp', @@ -7,12 +8,36 @@ return { end, dependencies = { 'hrsh7th/cmp-nvim-lsp', - 'saadparwaiz1/cmp_luasnip', + { + 'saadparwaiz1/cmp_luasnip', + enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'luasnip'), + }, 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-path', - -- has configs - 'L3MON4D3/LuaSnip', + { + 'L3MON4D3/LuaSnip', + config = function() + local ls = require('luasnip') + ls.config.set_config(u.merge({ + history = true, + -- Update more often, :h events for more info. + updateevents = 'TextChanged,TextChangedI', + enable_autosnippets = true, + }, user_config.plugins.luasnip or {})) + + -- extend html snippets to react files + require('luasnip').filetype_extend('javascriptreact', { 'html' }) + require('luasnip').filetype_extend('typescriptreact', { 'html' }) + + -- load snippets (friendly-snippets) + require('luasnip.loaders.from_vscode').lazy_load() + end, + dependencies = { + 'rafamadriz/friendly-snippets', + }, + enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'luasnip'), + }, }, event = 'InsertEnter', enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'nvim-cmp'), diff --git a/lua/cosmic/plugins/nvim-tree/init.lua b/lua/cosmic/plugins/nvim-tree/init.lua index 6baff09..2703be3 100644 --- a/lua/cosmic/plugins/nvim-tree/init.lua +++ b/lua/cosmic/plugins/nvim-tree/init.lua @@ -46,7 +46,7 @@ return { require('nvim-tree').setup(u.merge(args, user_config.plugins.nvim_tree or {})) end, init = function() - local map = require('cosmic.utils').map + local map = require('cosmic.utils').set_keymap map('n', '', ':NvimTreeToggle', { desc = 'Toggle Tree' }) map('n', 'nt', ':NvimTreeToggle', { desc = 'Toggle Tree' }) diff --git a/lua/cosmic/plugins/telescope/init.lua b/lua/cosmic/plugins/telescope/init.lua index aa064c0..85bc515 100644 --- a/lua/cosmic/plugins/telescope/init.lua +++ b/lua/cosmic/plugins/telescope/init.lua @@ -15,7 +15,7 @@ return { init = function() -- normal mappings local u = require('cosmic.utils') - local map = u.map + local map = u.set_keymap map('n', 'ff', '', { callback = require('cosmic.plugins.telescope.utils').project_files, diff --git a/lua/cosmic/plugins/terminal/highlights.lua b/lua/cosmic/plugins/terminal/highlights.lua deleted file mode 100644 index fa23506..0000000 --- a/lua/cosmic/plugins/terminal/highlights.lua +++ /dev/null @@ -1,8 +0,0 @@ -local set_highlight = require('cosmic.utils.theme').set_highlight - --- terminal highlights -set_highlight('FloatBorder', { - guibg = 'None', -}) - -vim.cmd('hi! link FloatermBorder FloatBorder') diff --git a/lua/cosmic/plugins/terminal/init.lua b/lua/cosmic/plugins/terminal/init.lua deleted file mode 100644 index c761635..0000000 --- a/lua/cosmic/plugins/terminal/init.lua +++ /dev/null @@ -1,23 +0,0 @@ -local user_config = require('cosmic.core.user') - -return { - 'voldikss/vim-floaterm', - cmd = { 'FloatermToggle', 'FloatermNew' }, - keys = { - { '', 'FloatermToggle', desc = 'Floating Terminal' }, - }, - config = function() - local g = vim.g - local title = vim.env.SHELL - - g.floaterm_width = 0.7 - g.floaterm_height = 0.8 - g.floaterm_title = '[' .. title .. ']:($1/$2)' - g.floaterm_borderchars = '─│─│╭╮╯╰' - g.floaterm_opener = 'vsplit' - - require('cosmic.plugins.terminal.highlights') - require('cosmic.plugins.terminal.mappings') - end, - enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'terminal'), -} diff --git a/lua/cosmic/plugins/terminal/mappings.lua b/lua/cosmic/plugins/terminal/mappings.lua deleted file mode 100644 index 1b18aa5..0000000 --- a/lua/cosmic/plugins/terminal/mappings.lua +++ /dev/null @@ -1,8 +0,0 @@ -local map = require('cosmic.utils').map - -map('n', '', ':FloatermToggle', { desc = 'Toggle Floaterm' }) -map('t', '', [[]], { desc = 'Close Floaterm' }) -map('t', 'l', [[:FloatermNext]], { desc = 'Next terminal' }) -map('t', 'h', [[:FloatermPrev]], { desc = 'Prev terminal' }) -map('t', 'n', [[:FloatermNew]], { desc = 'New terminal' }) -map('t', 'c', [[:FloatermKill]], { desc = 'Kill current terminal' }) diff --git a/lua/cosmic/plugins/toggleterm/init.lua b/lua/cosmic/plugins/toggleterm/init.lua new file mode 100644 index 0000000..475c055 --- /dev/null +++ b/lua/cosmic/plugins/toggleterm/init.lua @@ -0,0 +1,35 @@ +local user_config = require('cosmic.core.user') +local map = require('cosmic.utils').set_keymap +return { + 'akinsho/toggleterm.nvim', + config = function() + require('toggleterm').setup({ + direction = 'float', + float_opts = { + border = user_config.border, + }, + highlights = { + FloatBorder = { + link = 'FloatBorder', + }, + }, + }) + local terminal_utils = require('cosmic.plugins.toggleterm.utils') + + -- toggle terminals + map('n', 'xx', ':ToggleTerm', { desc = 'Toggle Terminal' }) + + -- new terminal + map('n', 'xn', terminal_utils.new_terminal, { desc = 'New terminal' }) + + -- select terminal to open + map('n', 'fx', ':TermSelect', { desc = 'Find open terminal' }) + + -- rename terminal + map('n', 'xr', ':ToggleTermSetName', { desc = 'Rename terminal', buffer = 0 }) + + -- terminal only mappings + vim.cmd("autocmd! TermOpen term://* lua require('cosmic.plugins.toggleterm.utils').set_terminal_keymaps()") + end, + lazy = false, +} diff --git a/lua/cosmic/plugins/toggleterm/utils.lua b/lua/cosmic/plugins/toggleterm/utils.lua new file mode 100644 index 0000000..9a5b8d9 --- /dev/null +++ b/lua/cosmic/plugins/toggleterm/utils.lua @@ -0,0 +1,18 @@ +local M = {} +local map = require('cosmic.utils').set_keymap +local Terminal = require('toggleterm.terminal').Terminal + +function M.new_terminal() + local terminal = Terminal:new() + terminal:toggle() +end + +function M.set_terminal_keymaps() + map('t', '', [[]], { desc = 'Visual mode' }) + -- map('t', 'xx', [[]] .. ':ToggleTerm', { desc = 'Toggle Terminal' }) + -- map('t', 'xn', M.new_terminal, { desc = 'New terminal' }) + -- map('t', 'fx', [[]] .. ':TermSelect', { desc = 'Find open terminal' }) + -- map('t', 'xr', [[]] .. ':ToggleTermSetName', { desc = 'Rename terminal', buffer = 0 }) +end + +return M diff --git a/lua/cosmic/plugins/treesitter/init.lua b/lua/cosmic/plugins/treesitter/init.lua index d95bfd6..3b0276c 100644 --- a/lua/cosmic/plugins/treesitter/init.lua +++ b/lua/cosmic/plugins/treesitter/init.lua @@ -16,6 +16,7 @@ local defaults = { 'php', 'python', 'regex', + 'styled', 'scss', 'tsx', 'typescript', diff --git a/lua/cosmic/plugins/which-key/init.lua b/lua/cosmic/plugins/which-key/init.lua index 29adcee..ae4ef51 100644 --- a/lua/cosmic/plugins/which-key/init.lua +++ b/lua/cosmic/plugins/which-key/init.lua @@ -12,7 +12,7 @@ return { --[[ winblend = 20, ]] }, layout = { - height = { min = 4, max = 25 }, + height = { min = 10, max = 25 }, width = { min = 20, max = 50 }, spacing = 8, align = 'center', diff --git a/lua/cosmic/utils/init.lua b/lua/cosmic/utils/init.lua index a848e92..4143fec 100644 --- a/lua/cosmic/utils/init.lua +++ b/lua/cosmic/utils/init.lua @@ -1,6 +1,6 @@ local M = {} -function M.map(mode, lhs, rhs, opts) +function M.set_keymap(mode, lhs, rhs, opts) local defaults = { silent = true, noremap = true, @@ -10,7 +10,7 @@ end function M.create_buf_map(bufnr, opts) return function(mode, lhs, rhs, map_opts) - M.map( + M.set_keymap( mode, lhs, rhs, diff --git a/lua/cosmic/utils/lsp.lua b/lua/cosmic/utils/lsp.lua index 145ef02..ea70737 100644 --- a/lua/cosmic/utils/lsp.lua +++ b/lua/cosmic/utils/lsp.lua @@ -1,81 +1,68 @@ local user_config = require('cosmic.core.user') local M = {} -M.format_disabled_override = false +M.format_on_save_enabled = true -local function can_client_format(client) +function M.can_client_format_on_save(client) + local user_server_config = user_config.lsp.servers[client.name] -- formatting enabled by default if server=true - if user_config.lsp.servers[client.name] == true or client.name == 'null-ls' then + if user_server_config == true then return true end -- check config server settings - if user_config.lsp.servers[client.name] then + if user_server_config then -- default to true if no format flag on server settings is set - if user_config.lsp.servers[client.name].format == nil then + if user_server_config.format_on_save == nil then return true end - -- check format flag on server settings - return (user_config.lsp.servers[client.name].format == true) + return user_server_config.format_on_save == true end return true end function M.toggle_format_on_save() - M.format_disabled_override = not M.format_disabled_override - vim.notify(string.format('Format on save disabled: %s', M.format_disabled_override)) + M.format_on_save_enabled = not M.format_on_save_enabled + vim.notify(string.format('Format on save: %s', M.format_on_save_enabled)) end --- format current buffer w/user settings -function M.format(bufnr, timeout) +function M.buf_format(bufnr, timeout) if timeout == '' or timeout == nil then timeout = user_config.lsp.format_timeout else timeout = timeout * 1000 end - local filter = can_client_format - if M.format_disabled_override then - filter = function(client) - return false - end - end vim.lsp.buf.format({ timeout_ms = timeout, - filter = filter, - bufnr = bufnr or 0, + bufnr = bufnr or vim.api.nvim_get_current_buf(), }) end -function M.get_active_lsp_clients() - local active_clients = vim.lsp.get_clients() +function M.buf_get_active_clients_str() + local active_clients = vim.lsp.get_clients({ + bufnr = vim.api.nvim_get_current_buf(), + }) local client_names = {} + for _, client in pairs(active_clients or {}) do - local buf = vim.api.nvim_get_current_buf() - -- only return attached buffers - if vim.lsp.buf_is_attached(buf, client.id) then - table.insert(client_names, client.name) - end + table.insert(client_names, client.name) end if not vim.tbl_isempty(client_names) then table.sort(client_names) end - return client_names -end -function M.get_active_clients_str() - local clients = M.get_active_lsp_clients() local client_str = '' - if #clients < 1 then + if #client_names < 1 then return end - for i, client in ipairs(clients) do - client_str = client_str .. client - if i < #clients then + for i, client_name in ipairs(client_names) do + client_str = client_str .. client_name + if i < #client_names then client_str = client_str .. ', ' end end @@ -87,7 +74,9 @@ function M.toggle_inlay_hints() local enabled = user_config.lsp.inlay_hint return function() enabled = not enabled - vim.lsp.inlay_hint(vim.api.nvim_get_current_buf() or 0, enabled) + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ + bufnr = vim.api.nvim_get_current_buf(), + })) end end diff --git a/readme.md b/readme.md index 9ae89c4..8c38f32 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@

💫 CosmicNvim

- Neovim Minimum Version + Neovim Minimum Version GitHub last commit Discord @@ -38,7 +38,7 @@ Full featured native LSP functionality! - Custom statusline via [lualine](https://github.com/nvim-lualine/lualine.nvim) - Explore files via [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua) - Fuzzy finder via [Telescope](https://github.com/nvim-telescope/telescope.nvim) -- Floating terminal with [vim-floaterm](https://github.com/voldikss/vim-floaterm) +- Floating terminal with [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) - Auto LSP/formatter/linter installation via [mason.nvim](https://github.com/williamboman/mason.nvim) - Autocompletion via [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - Snippet support via [LuaSnip](https://github.com/L3MON4D3/LuaSnip) @@ -55,10 +55,9 @@ experience with any LSP supported language._ #### Prerequisites -- Neovim (+0.10.0) nightly +- Neovim (+0.11.0) nightly - [Node.js](https://nodejs.org/en/) - [prettierd](https://github.com/fsouza/prettierd) -- [eslint_d](https://www.npmjs.com/package/eslint_d) (for eslint w/null_ls, optional) #### Install