diff --git a/roles/neovim/files/after/plugin/luasnip.lua b/roles/neovim/files/after/plugin/luasnip.lua index 80bfdcf..8176a20 100644 --- a/roles/neovim/files/after/plugin/luasnip.lua +++ b/roles/neovim/files/after/plugin/luasnip.lua @@ -7,6 +7,12 @@ if vim.g.snippets ~= "luasnip" then return end +ls.config.set_config { + enable_autosnippets = true, + history = true, + updateevents = "TextChanged,TextChangedI", +} + local snippet = ls.snippet local i = ls.insert_node local t = ls.text_node @@ -27,7 +33,7 @@ local shortcut = function(val) return val end -local function make(tbl) +local make = function(tbl) local result = {} for k, v in pairs(tbl) do table.insert(result, (snippet({ trig = k, desc = v.desc }, shortcut(v)))) @@ -37,12 +43,14 @@ local function make(tbl) end local javascript = make(R "opdavies.snippets.ft.javascript") +local lua = make(R "opdavies.snippets.ft.lua") local markdown = make(R "opdavies.snippets.ft.markdown") local php = make(R "opdavies.snippets.ft.php") local rst = make(R "opdavies.snippets.ft.rst") -local snippets = { +ls.snippets = { js = javascript, + lua = lua, markdown = markdown, php = php, rst = rst, @@ -50,12 +58,42 @@ local snippets = { vue = javascript, } -ls.snippets = snippets +local imap = require("opdavies.keymap").imap +local map = require("opdavies.keymap").map +local nmap = require("opdavies.keymap").nmap -vim.cmd [[ - imap luasnip#expand_or_jumpable() ? 'luasnip-expand-or-jump' : '' - inoremap lua require('luasnip').jump(-1) - imap luasnip#choice_active() ? 'luasnip-next-choice' : '' - snoremap lua require('luasnip').jump(1) - snoremap lua require('luasnip').jump(-1) -]] +local map_opts = { silent = true } + +map { + { "i", "s" }, + "", + function() + if ls.jumpable(-1) then + ls.jump(-1) + end + end, + map_opts, +} + +map { + { "i", "s" }, + "", + function() + if ls.expand_or_jumpable() then + ls.expand_or_jump() + end + end, + map_opts, +} + +imap { + "", + function() + if ls.choice_active() then + ls.change_choice(1) + end + end, + map_opts, +} + +nmap { "s", "source ~/.config/nvim/after/plugin/luasnip.lua", map_opts } diff --git a/roles/neovim/files/lua/opdavies/keymap.lua b/roles/neovim/files/lua/opdavies/keymap.lua index 92724d7..7802ab6 100644 --- a/roles/neovim/files/lua/opdavies/keymap.lua +++ b/roles/neovim/files/lua/opdavies/keymap.lua @@ -4,6 +4,10 @@ M.imap = function(tbl) vim.keymap.set("i", tbl[1], tbl[2], tbl[3]) end +M.map = function(tbl) + vim.keymap.set(tbl[1], tbl[2], tbl[3], tbl[4] or {}) +end + M.nmap = function(tbl) vim.keymap.set("n", tbl[1], tbl[2], tbl[3]) end diff --git a/roles/neovim/files/lua/opdavies/snippets/ft/lua.lua b/roles/neovim/files/lua/opdavies/snippets/ft/lua.lua new file mode 100644 index 0000000..13c63fd --- /dev/null +++ b/roles/neovim/files/lua/opdavies/snippets/ft/lua.lua @@ -0,0 +1,9 @@ +local fmt = require("luasnip.extras.fmt").fmt +local ls = require "luasnip" +local rep = require("luasnip.extras").rep + +local i = ls.insert_node + +return { + req = fmt("local {} = require('{}')", { i(1), rep(1) }) +} diff --git a/roles/neovim/files/lua/opdavies/snippets/ft/php.lua b/roles/neovim/files/lua/opdavies/snippets/ft/php.lua index bc6e600..af8311d 100644 --- a/roles/neovim/files/lua/opdavies/snippets/ft/php.lua +++ b/roles/neovim/files/lua/opdavies/snippets/ft/php.lua @@ -6,45 +6,26 @@ local i = ls.insert_node local t = ls.text_node local M = { - -- TODO: only load if within a Drupal project? - drupalclass = { - fmta( - [[ - <(<>)<> {\n <>\n}<>", { i(1), i(2), i(3), i(4), i(0) }), - declare(strict_types=1); + met = fmta( + [[ + <> function <>(<>)<> { + <> + }<> + ]], + { c(1, { t "public", t "protected", t "private" }), i(2), i(3), i(4), i(5), i(0) } + ), - namespace Drupal\<>; - - <>class <> { - - <> - - } - ]], - { i(1), c(2, { t "", t "final " }), i(3), i(0) } - ), - }, - - test = { - fmta( - [[ - /** @test */ - public function <><>(): void { - <> - } - ]], - { - c(1, { - t "test", - t "it", - t "should", - }), - i(2), - i(0), - } - ), - }, + test = fmta( + [[ + /** @test */ + public function <><>(): void { + <> + }<> + ]], + { c(1, { t "test", t "it", t "should" }), i(2), i(3), i(0) } + ), } return M