From 60a48b8186b23c5be94f67e20c24244868e760e7 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Fri, 5 Jan 2024 08:45:33 -0700 Subject: [PATCH] Use isn for visual selection indentations. --- .../neovim/config/python/snippets.lua | 2 +- .../jrpotter/neovim/config/utils/luasnip.lua | 27 ++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/users/jrpotter/neovim/config/python/snippets.lua b/users/jrpotter/neovim/config/python/snippets.lua index f198f72..12f6ec8 100644 --- a/users/jrpotter/neovim/config/python/snippets.lua +++ b/users/jrpotter/neovim/config/python/snippets.lua @@ -47,7 +47,7 @@ for {} in {}: })[index]) ) end, { 1 }), - ul.visual_node, + ul.visual_dynamic_node(3), } ) ), diff --git a/users/jrpotter/neovim/config/utils/luasnip.lua b/users/jrpotter/neovim/config/utils/luasnip.lua index 6629c1b..d8515ac 100644 --- a/users/jrpotter/neovim/config/utils/luasnip.lua +++ b/users/jrpotter/neovim/config/utils/luasnip.lua @@ -2,19 +2,17 @@ local M = {} local luasnip = require('luasnip') local types = require('luasnip.util.types') -local function_node = require('luasnip').function_node -M.visual_node = function_node(function(_, snip) - local env = snip.env - if type(env.LS_SELECT_RAW) ~= 'table' then - return env.LS_SELECT_RAW - end - local res = {} - for _, ele in ipairs(env.LS_SELECT_RAW) do - table.insert(res, ele) - end - return res -end, {}) +function M.visual_dynamic_node(pos) + local f = luasnip.function_node + local isn = luasnip.indent_snippet_node + + return isn(pos, { + f(function(_, parent) + return parent.snippet.env.LS_SELECT_DEDENT or {} + end) + }, '$PARENT_INDENT\t') +end function M.choice_index(choice_node) for i, c in ipairs(choice_node.choices) do @@ -46,6 +44,11 @@ function M.setup() }, } + -- Track where we are expanding the snippet. + luasnip.env_namespace('INFO', { + init = function(info) return { POS = info.pos } end, + }) + vim.keymap.set({ 'i', 's' }, '', function() if luasnip.choice_active() then return 'luasnip-next-choice'