mirror of
https://github.com/neovim/neovim.git
synced 2026-07-14 13:20:35 +00:00
Problem: No CI coverage for wasm builds. Solution: Add a basic workflow that builds with ENABLE_WASMTIME and runs wasm-specific tests.
86 lines
2.5 KiB
Lua
86 lines
2.5 KiB
Lua
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
|
|
local clear = n.clear
|
|
local command = n.command
|
|
local eq = t.eq
|
|
local exec_lua = n.exec_lua
|
|
local insert = n.insert
|
|
local skip = t.skip
|
|
|
|
local lua_text = [[
|
|
local M = {}
|
|
|
|
-- returns the sum of two numbers
|
|
local function add(a, b)
|
|
return a + b
|
|
end
|
|
|
|
M.add = add
|
|
return M
|
|
]]
|
|
|
|
describe('treesitter WASM parser', function()
|
|
before_each(clear)
|
|
|
|
it('lua WASM parser produces same highlight captures as native parser', function()
|
|
skip(
|
|
exec_lua('return vim._ts_add_language_from_wasm == nil'),
|
|
'N/A ENABLE_WASMTIME not enabled'
|
|
)
|
|
|
|
local wasm_files = exec_lua(function()
|
|
return vim.api.nvim_get_runtime_file('parser/lua.wasm', true)
|
|
end)
|
|
assert(
|
|
#wasm_files > 0,
|
|
'lua.wasm not found in runtimepath (rebuild with ENABLE_WASMTIME=ON USE_BUNDLED_TS_PARSERS=ON)'
|
|
)
|
|
|
|
local wasm_path = wasm_files[1]
|
|
|
|
local query_str = exec_lua(function()
|
|
local files = vim.api.nvim_get_runtime_file('queries/lua/highlights.scm', false)
|
|
assert(#files > 0, 'queries/lua/highlights.scm not found')
|
|
local f = assert(io.open(files[1]))
|
|
local s = f:read('*a')
|
|
f:close()
|
|
return s
|
|
end)
|
|
|
|
-- Buffer 1: parse with the native lua parser.
|
|
insert(lua_text)
|
|
local native_captures = exec_lua(function(qstr)
|
|
local query = vim.treesitter.query.parse('lua', qstr)
|
|
local parser = vim.treesitter.get_parser(0, 'lua')
|
|
local tree = parser:parse()[1]
|
|
local result = {}
|
|
for id, node in query:iter_captures(tree:root(), 0) do
|
|
local r = { node:range() }
|
|
table.insert(result, { query.captures[id], r[1], r[2], r[3], r[4] })
|
|
end
|
|
return result
|
|
end, query_str)
|
|
|
|
-- Buffer 2: same content, but the lua language loaded from WASM.
|
|
command('new')
|
|
insert(lua_text)
|
|
local wasm_captures = exec_lua(function(path, qstr)
|
|
-- Remove the native registration so the WASM one can take its place.
|
|
vim._ts_remove_language('lua')
|
|
vim._ts_add_language_from_wasm(path, 'lua')
|
|
local query = vim.treesitter.query.parse('lua', qstr)
|
|
local parser = vim.treesitter.get_parser(0, 'lua')
|
|
local tree = parser:parse()[1]
|
|
local result = {}
|
|
for id, node in query:iter_captures(tree:root(), 0) do
|
|
local r = { node:range() }
|
|
table.insert(result, { query.captures[id], r[1], r[2], r[3], r[4] })
|
|
end
|
|
return result
|
|
end, wasm_path, query_str)
|
|
|
|
eq(native_captures, wasm_captures)
|
|
end)
|
|
end)
|