vimlrs 0.2.1

Faithful Rust port of the Vimscript (VimL) interpreter, from the Neovim C eval engine
Documentation
[package]
name = "vimlrs"
description = "Faithful Rust port of the Vimscript (VimL) interpreter, from the Neovim C eval engine"
version = "0.2.1"
keywords = ["vim", "vimscript", "viml", "interpreter", "fusevm"]
categories = ["command-line-utilities", "compilers"]
authors = ["MenkeTechnologies <linux.dev25@gmail.com>"]
edition = "2021"
rust-version = "1.80"
homepage = "https://menketechnologies.github.io/vimlrs/"
documentation = "https://docs.rs/vimlrs"
repository = "https://github.com/MenkeTechnologies/vimlrs"
license = "MIT"
readme = "README.md"
publish = true
# `vendor/` is the vendored Neovim C spec for porting; `docs/` is the published
# HUD site — neither is part of the crate build.
exclude = ["/vendor/", "/docs/"]

# vimlrs is a standalone crate, not a workspace member. An explicit empty
# `[workspace]` stops cargo walking up to the MenkeTechnologiesMeta parent.
[workspace]

[lib]
name = "vimlrs"
path = "src/lib.rs"
# `staticlib` produces libvimlrs.a so `--build --native` can link AOT-compiled
# objects (fusevm::aot) against the VimL runtime into a standalone executable.
crate-type = ["lib", "staticlib"]

[[bin]]
name = "viml"
path = "src/main.rs"

# Offline generator for docs/reference.html — the full builtin reference page.
[[bin]]
name = "gen-docs"
path = "src/bin/gen_docs.rs"

[dependencies]
# Language-agnostic bytecode VM + 3-tier Cranelift JIT. VimL has no local
# vm.rs / jit.rs: lex/parse → AST → lower to fusevm bytecode → fusevm runs it,
# the same way zshrs hosts zsh. jit-disk-cache persists native code across runs.
fusevm = { version = "0.14.5", features = ["jit", "jit-disk-cache", "aot"] }
clap = { version = "4.5", features = ["derive", "cargo"] }
thiserror = "2.0"
rustc-hash = "2.1"
# Dict keeps insertion order (closest to Vim's observable hashtab iteration,
# and deterministic for echo/string() output).
indexmap = "2"
# rkyv bytecode cache (phase 8) — wired now so the script-cache format is
# versioned from day one (compat-floor: never break a cached .vim that worked).
rkyv = { version = "0.7", features = ["validation", "archive_le", "size_32"] }
memmap2 = "0.9"
dirs = "5"
# Inner-blob codec for the rkyv script cache (the compiled fusevm::Chunk).
bincode = "1.3"
# flock on the cache shard so concurrent writers serialize; `time` provides the
# monotonic clock backing `os_hrtime()` for reltime().
nix = { version = "0.29", features = ["fs", "time"] }
once_cell = "1"
# AOT: zstd-compressed script trailer baked into the binary.
zstd = "0.13"
# LSP/DAP (phases 9–10).
lsp-server = "0.7.9"
lsp-types = "0.97.0"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# Interactive REPL (`viml --repl` / TTY fallthrough): reedline line editor,
# nu-ansi-term for the status-bar/banner colors, sysinfo for the live stats box,
# toml for the `~/.vimlrs/config.toml` edit-mode setting, libc for localtime_r +
# TIOCGWINSZ (no chrono/time dep). Pins match strykelang's REPL exactly.
reedline = "0.47.0"
nu-ansi-term = "0.50"
sysinfo = { version = "0.38", default-features = false, features = ["system"] }
toml = "0.8"
libc = "0.2"

[dev-dependencies]
tempfile = "3"