[1.1.64] - 2026-11-05
Fixed
- Files longer than 2500 lines still receive the security, warning, style, and unreachable-code checks. Parenthesis depth for unreachable code is computed once per file
CALLof an external program is E014 only when that name is also a defined label.SET /Aaccepts a unary minus such as5*-1.where deletedis not SEC003, andscinside another word is not SEC005. Command chaining after2>&1is still SEC013. SET /P dataflow (SEC001) runs even when the first line is skipped as an embedded header- Label names end at whitespace and
+:=,;, matching cmd.exe, sogoto startreaches:start rem entry.REM LINT:IGNORE-LINEis recognized after&on the same line --update-baselinecan record a finding on a blank line. Follow-calls rejects UNC paths beforePath.resolve, and directory scans do not walk junctions or directory symlinks- Text output strips terminal escape sequences.
--fail-on errorand--follow-callshelp text matches the exit-code rules - The Windows installer broadcasts a settings change after writing a
REG_EXPAND_SZuser PATH. The uninstaller reads stop-script errors separately from process IDs. The quality gate requires Pester 5 or newer and reports PSScriptAnalyzer errors - The cmd.exe oracle also refuses
format,diskpart,bcdedit,setx,schtasks, andreg add. Nuitka toolchain downloads requireBLINTER_NUITKA_ALLOW_DOWNLOADS=1 - On Windows,
scripts/verify.pylaunches the lint benchmark throughrunpy, matching the regression test. Executingscripts/benchmark_lint.pyas a script exceeds the committed CPU ceiling - Child Python tools started by
scripts/verify.pyuse UTF-8, so isort checks source files that contain characters outside the console code page syntax/for-f-delims-only-validrecords the FOR /F rules thatdelims=must not raise. The conditional SETLOCAL fixture is no longer listed under pairing rules it does not assert
Changed
- CodeRabbit reviews follow
.coderabbit.yaml, including generated files, corpus fixtures, and the batch-spec submodule - Contributor commands use
uv runor an activated.venv. A barepycan import a different Blinter - Script-structure analysis no longer returns delayed-expansion flags that no checker reads
- S003 command-start scanning lives in
parsing/command_scan.py. Caret escapes are the one helper inparsing/context.py - The optional
batch-script-examplesfolder, its baseline check, and theneeds_corpustests are removed. Rule fixtures stay inspec/corpus scripts/spec/cmd_oracle.py --caseruns one corpus case- yamllint no longer checks YAML newlines.
.gitattributesalready stores YAML as LF, and a Windowscore.autocrlfcheckout is CRLF - The synthetic and label benchmark medians are remeasured now that files over 2500 lines run the full checks. The ceiling remains twice the measured median
- The MegaLinter install pin is 1.1.64