feat(treesitter): add support for wasm parsers

Problem: Installing treesitter parser is hard (harder than
climbing to heaven).

Solution: Add optional support for wasm parsers with `wasmtime`.

Notes:

* Needs to be enabled by setting `ENABLE_WASMTIME` for tree-sitter and
  Neovim. Build with
  `make CMAKE_EXTRA_FLAGS=-DENABLE_WASMTIME=ON
  DEPS_CMAKE_FLAGS=-DENABLE_WASMTIME=ON`
* Adds optional Rust (obviously) and C11 dependencies.
* Wasmtime comes with a lot of features that can negatively affect
  Neovim performance due to library and symbol table size. Make sure to
  build with minimal features and full LTO.
* To reduce re-compilation times, install `sccache` and build with
  `RUSTC_WRAPPER=<path/to/sccache> make ...`
This commit is contained in:
Lewis Russell
2024-04-19 16:04:57 +01:00
committed by Christian Clason
parent 664de5ea97
commit 688b961d13
17 changed files with 272 additions and 20 deletions

View File

@@ -109,7 +109,14 @@ function M.add(lang, opts)
path = paths[1]
end
vim._ts_add_language(path, lang, symbol_name)
if vim.endswith(path, '.wasm') then
if not vim._ts_add_language_from_wasm then
error(string.format("Unable to load wasm parser '%s': not built with ENABLE_WASMTIME ", path))
end
vim._ts_add_language_from_wasm(path, lang)
else
vim._ts_add_language_from_object(path, lang, symbol_name)
end
M.register(lang, filetype)
end