summary refs log tree commit diff
path: root/.vim/snippets/all.lua
blob: ba26a8fddc227cebbb71c9b6b012cd2ed56b4dc9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
local todo_comment = function(key)
  local nodes = {}
  if type(key) == 'string' then
    table.insert(nodes, t(key))
  elseif type(key) == 'table' then
    table.insert(nodes, c(1, vim.tbl_map(function(e) return t(e) end, key)))
  end
  local wrapped = autowrap(t('('), t(')'), {
    c(#nodes, {
      t(''), -- bare
      sn(1, user_email),
      f(function() return os.date('%Y-%m-%d') end, {}), -- time
    }),
  })
  for _, n in ipairs(wrapped) do table.insert(nodes, n) end
  table.insert(nodes, t(': '))
  return comment(nodes)
end

local from_file = function(path, vargs)
  return d(1, function(_, _, _, ...)
    local lines = {}
    for line in io.lines(path) do table.insert(lines, line) end
    return sn(nil, fmt(table.concat(lines, "\n"), ...))
  end, {}, { user_args = {vargs}})
end

return {
  s('me', user_email),
  s('date', exec([[date --rfc-email]])),
  s('today', f(function() return os.date('%Y-%m-%d') end, {})),
  s('now'  , f(function() return os.date('%Y-%m-%dT%H:%M:%SZ') end, {})),

  -- todo comments
  s('todo', todo_comment('TODO')),
  s('note', todo_comment('NOTE')),
  s('hack', todo_comment('HACK')),
  s('warn', todo_comment({'WARN', 'XXX'})),
  s('fix' , todo_comment({'FIX', 'FIXME', 'ISSUE', 'BUG'})),

  s({trig='#!', name='Shell script skeleton'},
    fmt([=[
      #!/bin/sh

      set -e
      [ -n "$DEBUG" ] && set -x
      [ -n "$DESC" ] && desc() {{
      	printf "{}"
      	exit 0
      }}

    ]=], {i(1, 'what does this script do')}),
    {
      callbacks = {
        [-1] = {
          [events.enter] = function(_, _) vim.opt_local.filetype = 'sh' end
        }
      }
    }
  ),

  -- licenses (full-text)
  s({trig='license-mit', name='MIT license'}, from_file(
      vim.fn.stdpath('config') .. '/snippets/.licenses/mit',
      {
        year = f(function() return os.date('%Y') end, {}),
        copyright = sn(1, user_email),
      })
  ),
  s({trig='license-gpl-3.0', name='GPL-3.0 license'}, from_file(
      vim.fn.stdpath('config') .. '/snippets/.licenses/gpl-3.0', {})),
  s({trig='license-agpl-3.0', name='AGPL-3.0 license'}, from_file(
      vim.fn.stdpath('config') .. '/snippets/.licenses/agpl-3.0', {})),
  s({trig='license-cc0-1.0', name='CC-Zero-1.0 license'}, from_file(
      vim.fn.stdpath('config') .. '/snippets/.licenses/cc0-1.0', {})),
  -- licenses (SPDX header)
  s({trig='spdx-mit', name='MIT license'}, comment({t([[SPDX-License-Identifier: MIT]])})),
  s({trig='spdx-gpl-3.0', name='MIT license'}, comment({t([[SPDX-License-Identifier: GPL-3.0]])})),
  s({trig='spdx-agpl-3.0', name='MIT license'}, comment({t([[SPDX-License-Identifier: AGPL-3.0]])})),
  s({trig='spdx-cc0-1.0', name='MIT license'}, comment({t([[SPDX-License-Identifier: CC0-1.0]])})),
}