v1beta2
Fixes
- Single-use checks no longer false-positive on closure-shared variables. The counter used to stop at scope boundaries, so a variable used repeatedly inside a callback (Promise executor, event handler) but once in its own scope was flagged as single-use. The analysis now resolves every reference to its nearest enclosing binding, with shadowing handled exactly. A definition is flagged only with exactly one same-scope read and zero closure reads.
||=and&&=are now flagged bybool_opexactly like their expandeda = a || bforms, which previously slipped through.- The CLI errors on extra positional paths instead of silently dropping them.
- Fixed the
DELIBERTATE_CONSTANTtypo in the single-use message.
New checks
nullish_coalesce(default-on): flags??and??=— inline if statements in disguise, matching the ternary ban. Excludable viaexclude-type.optional_param(opt-in viainclude-extra): flagsarg?: Tin function implementations in favor of the explicitarg: T | null = null. Type-space signatures and overload declarations are exempt.
Dogfooding
ExplicitJS now lints itself: deno task lint runs the tool on its own source with optional_param enabled (see .explicitrc.json) and must exit clean. All ?? uses and optional parameters in our own code were rewritten accordingly.