Channel stable
-
changed:
stable head
2.0.2→2.0.3
stable: Artifacts
-
changed:
Artifact crate size
2394884 bytes→2395447 bytes
Releases
- added: Release 2.0.3stable, available, dated 2026-10-14 by its publisher
Publisher's notes for 2.0.3 stable
Analysis checks a buffer slice generator as a buffer with the default options, and in the modules a checked module requires.
Fixed
- A slice generator over a buffer (
[for byte in data[1:4] => byte],any[for byte in data[1:n] => byte ~= 0]) is lowered for analysis as a table slice until Luau has inferred its source, then as a buffer. That second step read the types Luau inferred, which a module keeps only with its full type graph, so withretain_full_type_graphsoff, the default, every buffer slice generator was checked as a table:Expected type table, got 'buffer' insteadand two operator errors at each one. It also ran for the module named in the check only, so a required module's buffer slices were checked as tables whatever the options. A check now keeps each module's type graph, and specializes every module it reaches.
Migration
Nothing to change. A strict package that reported the three errors above at its buffer slice generators reports none.
Known, and not l3i's to fix: under Luau's new solver, a function literal inside an if condition has its returns checked against the declared return type of the function holding the if. A reducer is lowered for analysis to such a literal, so if any[for value in values => value > 2] then inside a function declared to return, say, buffer? reports Expected this to be 'buffer?', but got 'boolean' twice. The code is correct and runs as written. To check clean, bind the reducer to a local before the if: local found = any[...], then if found then.
Written by the publisher and shown verbatim, rendered through a sanitizer.