diff options
Diffstat (limited to '.vim/lua/internal/snips.lua')
| -rw-r--r-- | .vim/lua/internal/snips.lua | 106 |
1 files changed, 66 insertions, 40 deletions
diff --git a/.vim/lua/internal/snips.lua b/.vim/lua/internal/snips.lua index 318c9f7..423eec6 100644 --- a/.vim/lua/internal/snips.lua +++ b/.vim/lua/internal/snips.lua @@ -1,4 +1,3 @@ - local ls = require('luasnip') local types = require('luasnip.util.types') @@ -13,7 +12,7 @@ vim.api.nvim_set_hl(0, 'LuasnipIndicator', { local autowrap = function(top, bot, inner) local autoinsert = function(args, _, _, wrap_with) local nodes = {} - if vim.trim(table.concat(args[1] or {})) ~= "" then + if vim.trim(table.concat(args[1] or {})) ~= '' then table.insert(nodes, wrap_with) end return ls.sn(nil, nodes) @@ -31,9 +30,11 @@ local autowrap = function(top, bot, inner) end local nodes = {} - table.insert(nodes, ls.d(maxpos+1, autoinsert, argnodes, {user_args = {top}})) - for _, e in ipairs(inner) do table.insert(nodes, e) end - table.insert(nodes, ls.d(maxpos+2, autoinsert, argnodes, {user_args = {bot}})) + table.insert(nodes, ls.d(maxpos + 1, autoinsert, argnodes, { user_args = { top } })) + for _, e in ipairs(inner) do + table.insert(nodes, e) + end + table.insert(nodes, ls.d(maxpos + 2, autoinsert, argnodes, { user_args = { bot } })) return nodes end @@ -41,61 +42,88 @@ end local comment = function(wrapped, blockcomment) -- commentstring helper local get_cstring = function() - local cs = require('Comment.ft').calculate { + local cs = require('Comment.ft').calculate({ ctype = blockcomment and 2 or 1, - range = require('Comment.utils').get_region() - } - local tbl = vim.split(cs or '', '%s', {plain = true, trimempty = true}) - return (#tbl == 0) and {'', ''} - or ((#tbl == 1) and {tbl[1] .. ' ', ''} - or {tbl[1], tbl[2]}) + range = require('Comment.utils').get_region(), + }) + local tbl = vim.split(cs or '', '%s', { plain = true, trimempty = true }) + return (#tbl == 0) and { '', '' } + or ((#tbl == 1) and { tbl[1] .. ' ', '' } or { tbl[1], tbl[2] }) end - if type(wrapped) ~= "table" then - wrapped = {wrapped} + if type(wrapped) ~= 'table' then + wrapped = { wrapped } end local nodes = {} - table.insert(nodes, ls.f(function() return get_cstring()[1] end)) - for _, n in ipairs(wrapped) do table.insert(nodes, n) end - table.insert(nodes, ls.f(function() return get_cstring()[2] end)) + table.insert( + nodes, + ls.f(function() + return get_cstring()[1] + end) + ) + for _, n in ipairs(wrapped) do + table.insert(nodes, n) + end + table.insert( + nodes, + ls.f(function() + return get_cstring()[2] + end) + ) return nodes end -- exec: inserts the output of command local exec = function(command) return ls.f(function(_, _, ...) - local results, code = require('plenary.job'):new({ - command = vim.env.SHELL, - args = {'-c', ...}, - enable_recording = true, - }):sync() + local results, code = require('plenary.job') + :new({ + command = vim.env.SHELL, + args = { '-c', ... }, + enable_recording = true, + }) + :sync() if not code == 0 or #results == 0 then error(string.format('exec "%s" failed', ...)) end return results - end, {}, {user_args = {command}}) + end, {}, { user_args = { command } }) +end + +local file_contents = function(path, vargs) + return ls.d(1, function(_, _, _, ...) + local lines = {} + for line in io.lines(path) do + table.insert(lines, line) + end + return ls.sn(nil, require('luasnip.extras.fmt').fmt(table.concat(lines, '\n'), ...)) + end, {}, { user_args = { vargs } }) end -ls.setup { +ls.setup({ ext_opts = { [types.snippet] = { - active = { virt_text = {{ '<-- luasnip', 'LuasnipIndicator' }}, virt_text_pos = 'right_align' } + active = { + virt_text = { { '<-- luasnip', 'LuasnipIndicator' } }, + virt_text_pos = 'right_align', + }, }, [types.insertNode] = { - unvisited = { hl_group = 'LuasnipIndicator' } + unvisited = { hl_group = 'LuasnipIndicator' }, }, [types.choiceNode] = { active = { - virt_text = {{'<-- choice node', 'LuasnipIndicator'}}, - } - } + virt_text = { { '<-- choice node', 'LuasnipIndicator' } }, + }, + }, }, snip_env = vim.tbl_extend('keep', ls.session.config.snip_env, { autowrap = autowrap, exec = exec, comment = comment, + file_contents = file_contents, user_email = { exec([[git config --get user.name]]), @@ -107,18 +135,16 @@ ls.setup { }), ls.t('>'), }, - }) -} + }), +}) -- snipmate snippets -require('luasnip.loaders.from_snipmate').lazy_load {paths = './after/snippets'} +require('luasnip.loaders.from_snipmate').lazy_load({ paths = './after/snippets' }) -- lua snippets -require("luasnip.loaders.from_lua").lazy_load {paths = './snippets'} +require('luasnip.loaders.from_lua').lazy_load({ paths = './snippets' }) -vim.api.nvim_create_user_command('LuaSnipUnlinkAll', - function() - while #package.loaded.luasnip.session.current_nodes > 0 do - package.loaded.luasnip.unlink_current() - end - end, - { desc = 'unlink all active snippets' }) +vim.api.nvim_create_user_command('LuaSnipUnlinkAll', function() + while #package.loaded.luasnip.session.current_nodes > 0 do + package.loaded.luasnip.unlink_current() + end +end, { desc = 'unlink all active snippets' }) |