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]])})), }