Skip to content

vilan 0.14.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 01:07
f6171a7

Vilan runs on Windows. Native, not WSL: install with one PowerShell line (irm https://github.com/ReedSyllas/vilan/releases/latest/download/install.ps1 | iex), and the whole toolchain is there — vilan.exe and vilan-lsp.exe, the compiler, run --watch with hot reload, fmt, test, and vilan upgrade (which learned the Windows swap: a running executable can't be replaced in place, so the old one steps aside and is swept on the next run). The VS Code extension finds the server on Windows now, and the language server treats every spelling of a file — C: vs c%3A, even DOS-era RUNNER~1 short names — as the one file it is, so diagnostics never duplicate or stick. Stopping a watch round kills the whole process tree (a forking dev server can't hold its port hostage), colors render in both Windows Terminal and classic conhost, and the entire test suite now runs green on Windows in CI as a required check on every change — this isn't a port that will quietly rot.

Line endings became law. A \r\n in source is one line terminator, and string literal values are built from the normalized text — a multi-line string contains \n regardless of how your editor or Git saved the file. This closes a real miscompile: the same program checked out with CRLF endings used to embed \r in its string values and emit different JavaScript than its LF twin. A leading byte-order mark is now stripped everywhere source is read, canonical Vilan is LF (vilan fmt converts), and a .gitattributes keeps every checkout byte-stable. The full corpus compiles byte-identically from LF, CRLF, and BOM'd copies — pinned, on both platforms.

Module names are case-exact — everywhere. New language rule (spec §4.2): an import must match the on-disk file name byte for byte. On a case-insensitive filesystem, import foo finding Foo.vl is now a clean diagnostic naming both spellings instead of a resolution — so a program that builds on Windows builds identically on Linux, with no case-sensitivity surprises waiting in CI.

Errors print to stderr now, and every diagnostic respects NO_COLOR. Compile errors joined warnings on stderr — vilan build --stdout can never again interleave a diagnostic into the JavaScript it pipes — and the ariadne-rendered reports finally obey the same terminal gate as the rest of the CLI: colored when you're looking, byte-plain when piped or NO_COLOR is set. If you were parsing errors from stdout in a script, read stderr instead.