mirror of
https://github.com/folke/snacks.nvim
synced 2025-07-07 21:25:11 +00:00
107 lines
2.3 KiB
Lua
107 lines
2.3 KiB
Lua
---@module 'luassert'
|
|
|
|
local M = {}
|
|
|
|
---@param lines string|string[]
|
|
---@param opts? {ft?: string, ts?: boolean}
|
|
function M.set_lines(lines, opts)
|
|
opts = opts or {}
|
|
lines = type(lines) == "string" and vim.split(lines, "\n") or lines
|
|
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines --[[ @as string[] ]])
|
|
vim.bo.filetype = opts.ft or ""
|
|
vim.treesitter.stop()
|
|
assert(not vim.b.ts_highlight, "treesitter highlight is still enabled")
|
|
vim.b.snacks_ts = nil
|
|
if opts.ts then
|
|
vim.treesitter.start()
|
|
assert(vim.b.ts_highlight, "treesitter highlight is not enabled")
|
|
end
|
|
end
|
|
|
|
function M.inspect(v)
|
|
return vim.inspect(v):gsub("%s+", " ")
|
|
end
|
|
|
|
local test = [[
|
|
function foo()
|
|
while true do
|
|
if x == 1 then
|
|
break
|
|
end
|
|
local y = 2
|
|
end
|
|
end
|
|
]]
|
|
|
|
describe("scope", function()
|
|
local tests = {
|
|
[1] = { 1, 8 },
|
|
[2] = { 2, 7 },
|
|
[3] = { 3, 5 },
|
|
[4] = { 3, 5 },
|
|
[5] = { 3, 5 },
|
|
[6] = { 2, 7 },
|
|
[7] = { 2, 7 },
|
|
[8] = { 1, 8 },
|
|
}
|
|
Snacks.config.scope = {
|
|
cursor = false,
|
|
min_size = 2,
|
|
treesitter = {
|
|
blocks = false,
|
|
},
|
|
}
|
|
|
|
for _, ws in ipairs({ false, true }) do
|
|
local lines = vim.split(vim.trim(test), "\n")
|
|
|
|
local t = vim.deepcopy(tests)
|
|
|
|
if ws == true then
|
|
local c = #lines
|
|
-- insert empty lines
|
|
for i = 1, c do
|
|
table.insert(lines, i * 2, "")
|
|
end
|
|
local test2 = {}
|
|
-- transform tests
|
|
for line, s in pairs(t) do
|
|
test2[line * 2 - 1] = { s[1] * 2 - 1, s[2] * 2 - 1 }
|
|
end
|
|
t = test2
|
|
end
|
|
|
|
for _, ts in ipairs({ true, false }) do
|
|
for line, s in pairs(t) do
|
|
it("should get scope " .. M.inspect({ line = line, scope = s, ts = ts, ws = ws }), function()
|
|
M.set_lines(lines, {
|
|
ft = "lua",
|
|
ts = ts,
|
|
})
|
|
Snacks.scope.get(function(scope)
|
|
assert(scope)
|
|
assert((scope.node == nil) == not ts)
|
|
assert.same(scope.from, s[1])
|
|
assert.same(scope.to, s[2])
|
|
end, {
|
|
pos = { line, 0 },
|
|
treesitter = { enabled = ts },
|
|
})
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
local function foo()
|
|
while true do
|
|
-- doo
|
|
|
|
if x == 1 and false then
|
|
break
|
|
end
|
|
|
|
local y = 2
|
|
local y = 2
|
|
end
|
|
end
|