summary refs log tree commit diff
path: root/.vim/lua/internal/snips.lua
diff options
context:
space:
mode:
Diffstat (limited to '.vim/lua/internal/snips.lua')
-rw-r--r--.vim/lua/internal/snips.lua106
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' })