Replace hatchling with uv_build as the build backend and declare the MIT
license using the PEP 639 license field to eliminate the uv build
warning (#27).
Update GitHub Actions workflows to actions/setup-python@v7 and refresh the
disabled Codecov step to codecov/codecov-action@v7 (#28).
Files starting with a known binary format signature are now correctly
classified as binary before the txtvsbin byte set check runs (#23).
This covers formats whose content can consist entirely of allow-listed bytes:
PDF files (for example, uncompressed PDFs written by R's pdf() device)
and DOS EPS binary files (EPS with a TIFF/WMF preview).
Previously, such files were classified as text files and then reported as
UTF-8 read errors.
Aligned binary file detection with the zlib C implementation of the
txtvsbin algorithm (#22). Bytes 26 (SUB) and 27 (ESC) are now gray-listed
(tolerated) instead of block-listed. This matches the mask in zlib's
detect_data_type. Files such as ANSI-colored logs that mix escape sequences
with regular text are now classified as text files and linted.
Files containing only gray-listed bytes remain binary files.
Bounded memory use when classifying files as text or binary (#22).
Classification now samples up to 8 KB from the head and 8 KB from the tail
of each file instead of reading the entire file, following the sampling
strategy used by zlib (first deflate block) and Google's Magika (head and
tail chunks). Files smaller than 16 KB are still read fully, so results for
typical repository files are unchanged. Larger files whose only binary
bytes sit between the sampled regions are now classified as text.
Streamed text scanning in fixed 64 KB character chunks instead of iterating
lines, bounding memory for large files without line breaks, and evaluated
the character policy once per distinct character per chunk instead of once
per character. This makes scans of large clean files orders of magnitude
faster (#22).
Refactored file discovery logic to load ignore rules before walking the
filesystem and prune matching directories from os.walk (#12).
Previously, asciilint enumerated every file before applying ignore rules,
which caused noticeable startup lag in projects containing large ignored
trees such as .venv/ and node_modules/.
Their contents are now never queried, while configured ignore files,
negated directory rules, and --no-gitignore behavior remain supported.
Simplified discovery progress to report the files to scan and ignored entries
without a redundant "Files found" count (#14).
Lower the minimum required version of click to 8.3.0 and
pathspec to 1.0.0 to allow for more flexible dependency resolution
in downstream projects (#9).
Added progressive CLI output that prints scan setup, discovery counts, and
per-file status marks while scanning instead of waiting for the full scan to
finish (#5).
Wrapped long status mark output at a fixed width with marks starting on their
own lines, to keep large-project and GitHub Actions logs responsive and
readable (#5).
Added scanner progress callbacks so the CLI can stream progress while
preserving the existing complete scan result for final reporting (#5).