mirror of
https://github.com/Ascyii/typstar.git
synced 2026-01-01 05:24:24 -05:00
feat(snip): trigger blacklist option
This commit is contained in:
@@ -73,6 +73,7 @@ function M.snip(trigger, expand, insert, condition, priority, trigOptions)
|
||||
trigOptions = vim.tbl_deep_extend('force', {
|
||||
maxTrigLength = nil,
|
||||
wordTrig = true,
|
||||
blacklist = {},
|
||||
}, trigOptions or {})
|
||||
return luasnip.snippet(
|
||||
{
|
||||
@@ -151,10 +152,11 @@ function M.engine(trigger, opts)
|
||||
end
|
||||
|
||||
-- matching
|
||||
return function(line, trig)
|
||||
return function(line_full, trig)
|
||||
if not M.snippets_toggle or not condition() then return nil end
|
||||
local first_idx = 1
|
||||
if max_length ~= nil then
|
||||
local first_idx = #line - max_length -- include additional char for wordtrig
|
||||
first_idx = #line_full - max_length -- include additional char for wordtrig
|
||||
if first_idx < 0 then
|
||||
if is_fixed_length then
|
||||
return nil
|
||||
@@ -163,10 +165,10 @@ function M.engine(trigger, opts)
|
||||
end
|
||||
end
|
||||
if first_idx > 0 then
|
||||
if string.byte(line, first_idx) > 127 then return nil end
|
||||
if string.byte(line_full, first_idx) > 127 then return nil end
|
||||
end
|
||||
line = line:sub(first_idx)
|
||||
end
|
||||
local line = line_full:sub(first_idx)
|
||||
local whole, captures = base_engine(line, trig)
|
||||
if whole == nil then return nil end
|
||||
|
||||
@@ -175,6 +177,11 @@ function M.engine(trigger, opts)
|
||||
if opts.wordTrig and from ~= 1 and string.match(string.sub(line, from - 1, from - 1), '[%w.]') ~= nil then
|
||||
return nil
|
||||
end
|
||||
|
||||
-- blacklist
|
||||
for _, w in ipairs(opts.blacklist) do
|
||||
if line_full:sub(-#w) == w then return nil end
|
||||
end
|
||||
return whole, captures
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ return {
|
||||
snip('ff', '(<>) / (<>) <>', { i(1, 'a'), i(2, 'b'), i(3) }, math),
|
||||
|
||||
-- exponents
|
||||
snip('iv', '^(-1) ', {}, math, 500, { wordTrig = false }),
|
||||
snip('iv', '^(-1) ', {}, math, 500, { wordTrig = false, blacklist = { 'equiv' } }),
|
||||
snip('sr', '^2 ', {}, math, 500, { wordTrig = false }),
|
||||
snip('cb', '^3 ', {}, math, 500, { wordTrig = false }),
|
||||
snip('jj', '_(<>) ', { i(1, 'n') }, math, 500, { wordTrig = false }),
|
||||
|
||||
Reference in New Issue
Block a user