NickelEval.jl

Julia FFI bindings for Nickel configuration language
Log | Files | Refs | README | LICENSE

commit 2a0696ab744b8de9f50ad3619957d4391cf696b8
parent 81cc460905dbdb78eb621be90d7df3998915ea18
Author: Erik Loualiche <[email protected]>
Date:   Fri,  6 Feb 2026 17:11:34 -0600

Update TODO for v0.3.0

- Document completed features (FFI, enums, type system)
- 167 tests passing
- Next steps: cross-platform distribution, CI FFI testing

Co-Authored-By: Claude Opus 4.5 <[email protected]>

Diffstat:
MTODO.md | 52++++++++++++++++++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 16 deletions(-)

diff --git a/TODO.md b/TODO.md @@ -1,17 +1,32 @@ # NickelEval.jl - Status & TODOs -## Completed +## Current Version: v0.3.0 -### Core Features -- **Subprocess evaluation** - `nickel_eval`, `nickel_eval_file` via CLI +## Completed Features + +### Core Evaluation +- **Subprocess evaluation** - `nickel_eval`, `nickel_eval_file`, `nickel_read` via Nickel CLI - **FFI native evaluation** - `nickel_eval_native` via Rust binary protocol -- **Type preservation** - Int64 vs Float64 from Nickel types directly -- **Typed evaluation** - `nickel_eval(code, T)` for Dict, NamedTuple, etc. -- **Export functions** - JSON, TOML, YAML via subprocess -- **Documentation** - VitePress site at https://louloulibs.github.io/NickelEval/ +- **FFI JSON evaluation** - `nickel_eval_ffi` with typed parsing support + +### Type System +- **Primitives**: `Int64`, `Float64`, `Bool`, `String`, `Nothing` +- **Compounds**: `Vector{Any}`, `Dict{String, Any}` +- **Enums**: `NickelEnum` with `tag::Symbol` and `arg::Any` + - Simple enums: `'Foo` → `NickelEnum(:Foo, nothing)` + - With arguments: `'Some 42` → `NickelEnum(:Some, 42)` + - Nested enums, arrays of enums, enums in records + - Pattern matching support + - Pretty printing: `'Some 42` -### Test Coverage -- 94 tests passing (53 subprocess + 41 FFI) +### Export Functions +- `nickel_to_json`, `nickel_to_toml`, `nickel_to_yaml` via subprocess + +### Infrastructure +- Documentation site: https://louloulibs.github.io/NickelEval/dev/ +- 167 tests passing (53 subprocess + 114 FFI) +- CI: tests + documentation deployment +- Registry: loulouJL --- @@ -24,9 +39,9 @@ Currently FFI requires local Rust build. Options: ### 2. CI FFI Testing Update CI workflow to build Rust library and run FFI tests. +Currently CI only tests subprocess mode. ### 3. Performance Benchmarks -Compare subprocess vs FFI: ```julia using BenchmarkTools @benchmark nickel_eval("{ x = 1 }") # subprocess @@ -37,10 +52,10 @@ using BenchmarkTools ## Nice-to-Have -- File watching for config reload -- Multi-file evaluation with imports -- NamedTuple output option for records -- Nickel contracts integration +- **File watching** - auto-reload config on file change +- **Multi-file evaluation** - support Nickel imports +- **NamedTuple output** - optional record → NamedTuple conversion +- **Nickel contracts** - expose type validation --- @@ -56,6 +71,11 @@ cp target/release/libnickel_jl.so ../deps/ # Linux **Test FFI:** ```julia using NickelEval -check_ffi_available() # true if library found -nickel_eval_native("42") # => 42::Int64 +check_ffi_available() # true if library found +nickel_eval_native("42") # => 42::Int64 +nickel_eval_native("'Some 42") # => NickelEnum(:Some, 42) ``` + +**Registry:** loulouJL (https://github.com/LouLouLibs/loulouJL) +**Docs:** https://louloulibs.github.io/NickelEval/dev/ +**Repo:** https://github.com/LouLouLibs/NickelEval