[1.1.36] - 2026-10-14
Fixed
- E003 checks only the IF condition, so a valid line such as
if "%1"=="" set X=1orif ... echo a = bis no longer a fatal error --format jsonkeeps skipped-file details in the JSON report. When every file is skipped, stdout is still JSON- S028 leaves parentheses in place when the group chains commands with
&or| - P022 and P023 apply only inside a FOR block, including a one-line
for ... do - W004 allows the usual
shiftloop that exits when the next argument is empty - P006 no longer requires ENDLOCAL before a top-level
exit /b. Ending the batch file ends SETLOCAL - A UTF-16 BOM is decoded as UTF-16. NUL bytes that are not valid UTF-8, UTF-16, or UTF-32 raise one encoding error instead of being read as cp1252
- Directory scans accept
.BATand.CMDon case-sensitive filesystems - Piping output to a program that closes the pipe exits quietly
- The installer treats a PATH entry as present only when the segment matches exactly
Changed
- CALL and GOTO checks remember the first line that targets each label, and sort label definitions once per file
- The performance gate uses the current synthetic timing and a second file with 2000 labels and unique CALL targets. A case fails when it takes more than twice that median
- Source distributions omit the
tests/tree. Tests run from a git checkout - GitHub Actions are pinned to commit SHAs, and PyPI publishing pins Twine 7.0.0
- Changelog links point at
BatchLang/Blinter