mirror of
https://github.com/Ascyii/typstar.git
synced 2026-01-01 05:24:24 -05:00
feat(snip): exclude snippets by trigger
This commit is contained in:
@@ -6,15 +6,18 @@ local fmta = require('luasnip.extras.fmt').fmta
|
||||
local lsengines = require('luasnip.nodes.util.trig_engines')
|
||||
local ts = vim.treesitter
|
||||
|
||||
local exclude_triggers_set = {}
|
||||
local last_keystroke_time = nil
|
||||
vim.api.nvim_create_autocmd('TextChangedI', {
|
||||
callback = function() last_keystroke_time = vim.loop.now() end,
|
||||
})
|
||||
local lexical_result_cache = {}
|
||||
local ts_markup_query = ts.query.parse('typst', '(text) @markup')
|
||||
local ts_math_query = ts.query.parse('typst', '(math) @math')
|
||||
local ts_string_query = ts.query.parse('typst', '(string) @string')
|
||||
|
||||
utils.generate_bool_set(cfg.exclude, exclude_triggers_set)
|
||||
vim.api.nvim_create_autocmd('TextChangedI', {
|
||||
callback = function() last_keystroke_time = vim.loop.now() end,
|
||||
})
|
||||
|
||||
M.in_math = function()
|
||||
local cursor = utils.get_cursor_pos()
|
||||
return utils.cursor_within_treesitter_query(ts_math_query, 0, cursor)
|
||||
@@ -121,7 +124,16 @@ function M.setup()
|
||||
if cfg.enable then
|
||||
local autosnippets = {}
|
||||
for _, file in ipairs(cfg.modules) do
|
||||
vim.list_extend(autosnippets, require(('typstar.snippets.%s'):format(file)))
|
||||
for _, sn in ipairs(require(('typstar.snippets.%s'):format(file))) do
|
||||
local exclude
|
||||
local is_start = sn.trigger:match('^%^%(\\s%*%)')
|
||||
if is_start then
|
||||
exclude = exclude_triggers_set[sn.trigger:sub(7)]
|
||||
else
|
||||
exclude = exclude_triggers_set[sn.trigger]
|
||||
end
|
||||
if not exclude then table.insert(autosnippets, sn) end
|
||||
end
|
||||
end
|
||||
luasnip.add_snippets('typst', autosnippets)
|
||||
local jsregexp_ok, _ = pcall(require, 'luasnip-jsregexp')
|
||||
|
||||
@@ -25,6 +25,7 @@ local default_config = {
|
||||
'markup',
|
||||
'visual',
|
||||
},
|
||||
exclude = {}, -- list of triggers to exclude
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ local i = ls.insert_node
|
||||
local s = ls.snippet_node
|
||||
local t = ls.text_node
|
||||
local helper = require('typstar.autosnippets')
|
||||
local utils = require('typstar.utils')
|
||||
local snip = helper.snip
|
||||
local cap = helper.cap
|
||||
local math = helper.in_math
|
||||
@@ -62,14 +63,8 @@ for latin, greek in pairs(greek_letters_map) do
|
||||
table.insert(greek_keys, latin:upper())
|
||||
end
|
||||
|
||||
local generate_bool_set = function(arr, target)
|
||||
for _, val in ipairs(arr) do
|
||||
target[val] = true
|
||||
end
|
||||
end
|
||||
|
||||
generate_bool_set(index_conflicts, index_conflicts_set)
|
||||
generate_bool_set(punctuation_prepend_space, punctuation_prepend_space_set)
|
||||
utils.generate_bool_set(index_conflicts, index_conflicts_set)
|
||||
utils.generate_bool_set(punctuation_prepend_space, punctuation_prepend_space_set)
|
||||
|
||||
greek_letters_map = greek_full
|
||||
trigger_greek = table.concat(greek_keys, '|')
|
||||
|
||||
@@ -61,6 +61,12 @@ function M.urlencode(url)
|
||||
return url
|
||||
end
|
||||
|
||||
function M.generate_bool_set(arr, target)
|
||||
for _, val in ipairs(arr) do
|
||||
target[val] = true
|
||||
end
|
||||
end
|
||||
|
||||
function M.get_treesitter_root(bufnr) return ts.get_parser(bufnr):parse()[1]:root() end
|
||||
|
||||
function M.treesitter_match_start_end(match)
|
||||
|
||||
Reference in New Issue
Block a user