diff --git a/nvim/m-housh/lua/user/plugin/cmp.lua b/nvim/m-housh/lua/user/plugin/cmp.lua index fc6576e..b5e7c5a 100755 --- a/nvim/m-housh/lua/user/plugin/cmp.lua +++ b/nvim/m-housh/lua/user/plugin/cmp.lua @@ -2,6 +2,7 @@ return { "hrsh7th/nvim-cmp", event = "InsertEnter", dependencies = { + "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", -- source for text in buffer "hrsh7th/cmp-path", -- source for file system paths "L3MON4D3/LuaSnip", -- snippet engine @@ -33,7 +34,17 @@ return { [""] = cmp.mapping.select_next_item(), -- next suggestion [""] = cmp.mapping.complete(), -- show completion suggestions [""] = cmp.mapping.abort(), -- close completion window - [""] = cmp.mapping.confirm({ select = false, behavior = cmp.ConfirmBehavior.Replace }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + if luasnip.expandable() then + luasnip.expand() + else + cmp.confirm({ select = true }) + end + else + fallback() + end + end), -- TODO: -- The next two mappings are also implemented in the LuaSnip configuration, -- as and do they actually need to be here?? @@ -69,119 +80,3 @@ return { }) end, } --- return { --- "hrsh7th/nvim-cmp", --- enabled = true, --- dependencies = { --- "hrsh7th/cmp-nvim-lsp", --- "hrsh7th/cmp-buffer", --- "hrsh7th/cmp-path", --- "hrsh7th/cmp-cmdline", --- "hrsh7th/cmp-vsnip", --- "hrsh7th/vim-vsnip", --- "saadparwaiz1/cmp_luasnip", --- "f3fora/cmp-spell", --- "hrsh7th/cmp-calc", --- "hrsh7th/cmp-emoji", --- "L3MON4D3/LuaSnip", --- -- Adds a number of user-friendly snippets --- "rafamadriz/friendly-snippets", --- "onsails/lspkind.nvim", -- vs-code like pictograms --- }, --- event = { "BufReadPre", "BufNewFile" }, --- config = function() --- -- Setup nvim-cmp. --- local cmp = require("cmp") --- local lspkind = require("lspkind") --- local capabilities = vim.lsp.protocol.make_client_capabilities() --- capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) --- local luasnip = require("luasnip") --- require("luasnip.loaders.from_vscode").lazy_load() --- --- require("lspconfig").sourcekit.setup({ --- capabilities = capabilities, --- }) --- --- lspkind.init({ --- symbol_map = { --- --- Text = "", --- Method = "󰡱", --- Function = "󰡱", --- Constructor = "", --- Field = "ﰠ", --- Variable = "", --- Class = "ﴯ", --- Interface = "", --- Module = "", --- Property = "ﰠ", --- Unit = "塞", --- Value = "", --- Enum = "", --- Keyword = "", --- Snippet = "", --- Color = "", --- File = "", --- Reference = "", --- Folder = "", --- EnumMember = "", --- Constant = "", --- Struct = "פּ", --- Event = "", --- Operator = "", --- TypeParameter = "", --- }, --- }) --- --- cmp.setup({ --- completion = { --- completeopt = "menu,menuone,preview", --- }, --- snippet = { -- configure how nvim-cmp interacts with snippet engine --- expand = function(args) --- luasnip.lsp_expand(args.body) --- end, --- }, --- mapping = cmp.mapping.preset.insert({ --- [""] = cmp.mapping.select_prev_item(), -- previous suggestion --- [""] = cmp.mapping.select_next_item(), -- next suggestion --- [""] = cmp.mapping.complete(), -- show completion suggestions --- [""] = cmp.mapping.abort(), -- close completion window --- [""] = cmp.mapping.confirm({ select = false, behavior = cmp.ConfirmBehavior.Replace }), --- [""] = cmp.mapping(function(fallback) --- if luasnip.jumpable(-1) then --- luasnip.jump(-1) --- else --- fallback() --- end --- end, { "i", "s" }), --- [""] = cmp.mapping(function(fallback) --- if luasnip.jumpable(1) then --- luasnip.jump(1) --- else --- fallback() --- end --- end, { "i", "s" }), --- }), --- -- sources for autocompletion --- sources = cmp.config.sources({ --- { name = "nvim_lsp" }, --- { name = "luasnip" }, -- snippets --- { name = "buffer" }, -- text within current buffer --- { name = "path" }, -- file system paths --- --{ name = "calc" }, --- --{ name = "emoji" }, --- --{ name = "spell" }, --- }), --- -- configure lspkind for vs-code like pictograms in completion menu --- formatting = { --- expandable_indicator = true, --- fields = { "abbr", "kind", "menu" }, --- format = lspkind.cmp_format({ --- maxwidth = 50, --- ellipsis_char = "...", --- }), --- }, --- }) --- end, --- } diff --git a/nvim/m-housh/lua/user/plugin/luasnip.lua b/nvim/m-housh/lua/user/plugin/luasnip.lua index c90252f..2e648f1 100644 --- a/nvim/m-housh/lua/user/plugin/luasnip.lua +++ b/nvim/m-housh/lua/user/plugin/luasnip.lua @@ -1,14 +1,12 @@ return { "L3MON4D3/LuaSnip", - opts = { - history = true, - enable_autosnippets = false, -- don't automatically expand snippets. - updatevents = "TextChanged,TextChangedI", - }, config = function() local ls = require("luasnip") local types = require("luasnip.util.types") ls.setup({ + history = true, + enable_autosnippets = false, + updatevents = "TextChanged,TextChangedI", extra_opts = { [types.choiceNode] = { active = { diff --git a/nvim/m-housh/lua/user/snippets/swift.lua b/nvim/m-housh/lua/user/snippets/swift.lua index 6c9ca16..b073696 100644 --- a/nvim/m-housh/lua/user/snippets/swift.lua +++ b/nvim/m-housh/lua/user/snippets/swift.lua @@ -12,7 +12,7 @@ local rep = require("luasnip.extras").rep -- Add snippets ls.add_snippets("swift", { -- Add a dependency snippet. - s("@d", fmt("@Dependency(\\.{}) var {}", { i(1), rep(1) })), + s({ trig = "@d", desc = "Add a dependency." }, fmt("@Dependency(\\.{}) var {}", { i(1), rep(1) })), -- Add a dependency client. s( @@ -66,19 +66,23 @@ ls.add_snippets("swift", { ) ), - s({ trig = "spi", desc = "Add spi modifier." }, fmt("@_spi({})", { i(1, "name") })), + -- Decorate a type or function with an @_spi(...) + s({ trig = "@_s", desc = "Add spi modifier." }, fmt("@_spi({})", { i(1, "name") })), + -- Add an @_spi(...) import ... s( - { trig = "sii", desc = "Import with spi." }, + { trig = "@_si", desc = "Import with spi." }, fmt( [[ @_spi({}) import {} {} ]], - { i(1, "name"), i(2, "modlue"), i(0) } + { i(1, "name"), i(2, "module"), i(0) } ) ), + -- Document a function + -- TODO: add dynamic number of prameters. s( { trig = "docf", desc = "Document a function." }, fmt( @@ -88,10 +92,11 @@ ls.add_snippets("swift", { /// - Parameters: /// - {}: {} ]], - { i(1, "A short description."), i(2, ""), i(3, "") } + { i(1, "A short description."), i(2, ""), i(3, "Describe the parameter.") } ) ), + -- Add a parameter to a documentation string. s( { trig = "param", desc = "Add a parameter to documentation" }, fmt( @@ -101,6 +106,8 @@ ls.add_snippets("swift", { { i(1, ""), i(2, "") } ) ), + + -- Add a withDependencies s( { trig = "wd", desc = "withDependencies" }, fmt(