local M = {} -- stop lsp error messages -- https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#loaders local ls = require("luasnip") local s = ls.snippet local sn = ls.snippet_node local isn = ls.indent_snippet_node local t = ls.text_node local i = ls.insert_node local f = ls.function_node local c = ls.choice_node local d = ls.dynamic_node local r = ls.restore_node local events = require("luasnip.util.events") local ai = require("luasnip.nodes.absolute_indexer") local extras = require("luasnip.extras") local l = extras.lambda local rep = extras.rep local p = extras.partial local m = extras.match local n = extras.nonempty local dl = extras.dynamic_lambda local fmt = require("luasnip.extras.fmt").fmt local fmta = require("luasnip.extras.fmt").fmta local conds = require("luasnip.extras.expand_conditions") local postfix = require("luasnip.extras.postfix").postfix local types = require("luasnip.util.types") local parse = require("luasnip.util.parser").parse_snippet local ms = ls.multi_snippet local k = require("luasnip.nodes.key_indexer").new_key -- Example: expanding a snippet on a new line only. -- In a snippet file, first require the line_begin condition... local line_begin = conds.line_begin -- This is the `get_visual` function I've been talking about. -- ---------------------------------------------------------------------------- -- Summary: When `LS_SELECT_RAW` is populated with a visual selection, the function -- returns an insert node whose initial text is set to the visual selection. -- When `LS_SELECT_RAW` is empty, the function simply returns an empty insert node. M.get_visual = function(_, parent, _, user_args) if #parent.snippet.env.LS_SELECT_RAW > 0 then return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW)) else -- If LS_SELECT_RAW is empty, return a blank insert node return sn(nil, i(1, user_args)) end end -- https://github.com/L3MON4D3/LuaSnip/discussions/1195 M.make_single_curly_bracket_snippets = function(type, trig, command, user_args) -- return s({trig=keyword,desc=desc}, {t"local function " .. keyword .. "(", i(1), t")"}) return s({ trig = trig, desc = "Expand " .. trig .. " into \\" .. command .. "{}", snippetType = type, }, fmt("\\" .. command .. "{<>}", { d(1, M.get_visual, { user_args = { user_args } }) }, { delimiters = "<>" })) end M.make_scope_snippets = function(type, trig, command, user_args) -- return s({trig=keyword,desc=desc}, {t"local function " .. keyword .. "(", i(1), t")"}) return s({ trig = trig, desc = "Expand " .. trig .. " into {\\" .. command .. " ... }", snippetType = type, }, fmt("{\\" .. command .. " <>}", { d(1, M.get_visual, { user_args = { user_args } }) }, { delimiters = "<>" })) end return M