LuaSnip で自前のPostfix snippetを設定する方法を調べた。

Postfix snippetは、例えば Goxxx.split と打つと strings.Split(xxx, "") に展開されるといった、後方に入力したタイミングで前方の文字ごと補完する機能でIDEだとよくあるあれ。

LuaSnipでは以下のようにする。

https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#postfix-snippet

local status_ok, ls = pcall(require, "luasnip")
if not status_ok then return end
 
local f = ls.function_node
local postfix = require("luasnip.extras.postfix").postfix
 
ls.add_snippets("all", {
  postfix(".br", {
    f(function(_, parent) return "[" .. parent.snippet.env.POSTFIX_MATCH .. "]" end, {}),
  }),
})

これで abc.br とすると、 [abc] に展開される。

Goxxx.lenlen(xxx) に展開したかったので、以下のような設定を追加した。

ls.add_snippets("go", {
  postfix(".len", {
    f(function(_, parent) return "len(" .. parent.snippet.env.POSTFIX_MATCH .. ")" end, {}),
  }),
}