Changelog
0.6.179 – 0.6.182 (2026-06-08)
A batch focused on real ucode/OpenWrt code: the fs standard streams, smarter
length()/filter() typing, and first-class support for extensionless shebang scripts.
New
- fs
stdin/stdout/stderrsupport (0.6.180).import { stdin } from "fs"
is now valid (it was wrongly flagged UC3005). These are realfs.filehandles, so
stdin.read("line"),stdout.write(...),stderr,.fileno(),.close(), etc.
get full diagnostics, hover, signature help, and completion — via named import,
alias (stdin as si), or namespace (fs.stdin). They also appear in thefs.and
import { … }completion lists. - Extensionless ucode shebang scripts (
firstLine+ 0.6.182). Files like OpenWrt's
/usr/sbin/unetacldthat begin with#!/usr/bin/env ucodeare now recognised as
ucode: VS Code assigns the language automatically, and the workspace scan analyzes
them (Problems panel for unopened files) and includes them in cross-file features.
Improvements
filter()is now a type-narrowing construct (0.6.179).filter(arr, (x) => type(x) == "string")narrows the result toarray<string>, reusing the same guard
engine asifblocks (type()/truthy/!= null/numeric-comparison guards).fs.stdin.completes fs.file methods (0.6.181) instead of the fs module list.
Fixes
length()in a test position is no longer flagged (0.6.179).length(x) > 0,
if (!length(x)), andfilter(a, x => length(x) > 0)are sound type-checks
(lengthis total), so they aren't reported as "unknown argument" — even under
'use strict'. A bare value use (let n = length(x)) is still flagged.
Test suite: 186 curated suites + 1143 native tests passing.