diff --git a/lua/typstar/autosnippets.lua b/lua/typstar/autosnippets.lua index c2b7d2e..1790302 100644 --- a/lua/typstar/autosnippets.lua +++ b/lua/typstar/autosnippets.lua @@ -19,10 +19,10 @@ local ts_string_query = ts.query.parse('typst', '(string) @string') M.in_math = function() local cursor = utils.get_cursor_pos() - return utils.cursor_inside_treesitter_query(ts_math_query, cursor) - and not utils.cursor_inside_treesitter_query(ts_string_query, cursor) + return utils.cursor_within_treesitter_query(ts_math_query, 0, cursor) + and not utils.cursor_within_treesitter_query(ts_string_query, 0, cursor) end -M.in_markup = function() return utils.cursor_inside_treesitter_query(ts_markup_query) end +M.in_markup = function() return utils.cursor_within_treesitter_query(ts_markup_query, 2) end M.not_in_math = function() return not M.in_math() end M.not_in_markup = function() return not M.in_markup() end M.snippets_toggle = true @@ -50,8 +50,6 @@ function M.snip(trigger, expand, insert, condition, priority) trig = trigger, trigEngine = M.engine, trigEngineOpts = { condition = condition }, - regTrig = true, - wordtrig = false, priority = priority, snippetType = 'autosnippet' }, diff --git a/lua/typstar/utils.lua b/lua/typstar/utils.lua index 4bc849b..e1c8dbe 100644 --- a/lua/typstar/utils.lua +++ b/lua/typstar/utils.lua @@ -20,7 +20,7 @@ function M.run_shell_command(cmd) vim.fn.jobstart(cmd) end -function M.cursor_inside_treesitter_query(query, cursor) +function M.cursor_within_treesitter_query(query, match_tolerance, cursor) cursor = cursor or M.get_cursor_pos() local bufnr = vim.api.nvim_get_current_buf() local root = ts.get_parser(bufnr):parse()[1]:root() @@ -28,7 +28,8 @@ function M.cursor_inside_treesitter_query(query, cursor) if match then local start_row, start_col, _, _ = match[1]:range() local _, _, end_row, end_col = match[#match]:range() - local matched = M.cursor_inside_coords(cursor, start_row, end_row, start_col, end_col) + local matched = M.cursor_within_coords(cursor, start_row, end_row, start_col, end_col, + match_tolerance) if matched then return true end @@ -37,11 +38,11 @@ function M.cursor_inside_treesitter_query(query, cursor) return false end -function M.cursor_inside_coords(cursor, start_row, end_row, start_col, end_col) +function M.cursor_within_coords(cursor, start_row, end_row, start_col, end_col, match_tolerance) if start_row <= cursor[1] and end_row >= cursor[1] then - if start_row == cursor[1] and start_col > cursor[2] then + if start_row == cursor[1] and start_col - match_tolerance >= cursor[2] then return false - elseif end_row == cursor[1] and end_col < cursor[2] then + elseif end_row == cursor[1] and end_col + match_tolerance <= cursor[2] then return false end return true