vimlrs 0.2.1

Faithful Rust port of the Vimscript (VimL) interpreter, from the Neovim C eval engine
Documentation
" json.vim — json_encode()/json_decode() round-trip, with embedded unit tests.
"
" Demonstrates: building a nested Dict/List, encoding to JSON, decoding back,
" reading fields, and asserting the round-trip is lossless. Exits non-zero on
" failure.
"
"   vimlrs examples/json.vim

let config = {
      \ 'name': 'vimlrs',
      \ 'version': [0, 1, 0],
      \ 'features': ['jit', 'lsp', 'dap'],
      \ 'standalone': v:true,
      \ }

let encoded = json_encode(config)
let decoded = json_decode(encoded)

" ── unit tests ──
call assert_equal('{"name":"vimlrs","version":[0,1,0],"features":["jit","lsp","dap"],"standalone":true}', encoded)
call assert_equal('vimlrs', decoded['name'])
call assert_equal([0, 1, 0], decoded['version'])
call assert_equal('0.1.0', join(map(copy(decoded['version']), 'string(v:val)'), '.'))
call assert_equal(['jit', 'lsp', 'dap'], decoded['features'])
call assert_true(index(decoded['features'], 'jit') >= 0)
call assert_equal(config, decoded)

" ── demo ──
echo 'encoded :' encoded
echo 'name    :' decoded['name']
echo 'features:' decoded['features']

" ── self-test epilogue ──
if !empty(v:errors)
  for e in v:errors
    echo 'FAIL:' e
  endfor
  throw len(v:errors) . ' assertion(s) failed'
endif
echo 'OK: json assertions passed'