This release is about staying out of your way in a busy project. Bulk file
changes — a dependency install, a big checkout, a mass delete — no longer pin
the language server at full CPU for minutes; the search index is now rebuilt
once for the whole batch, and only when something actually needs it. Files
your .gitignore excludes stay excluded while watching, not just at startup.
And the index behind the MCP server no longer grows with every edit, so a long
working session keeps steady memory and search speed.
Thanks @bulbigood and @Retengart for the reports that led to these fixes.
iwes
Fixed
- Bulk filesystem changes no longer stall the server. Adding or deleting many files at once — for example when a package manager rewrites a dependency tree — rebuilds the search index once for the whole batch instead of once per file, turning an operation that ran for minutes at full CPU into one that finishes in well under a second.
- Files that the initial scan skips are no longer picked up while watching. Changes under directories excluded by
.gitignoreor.ignore, such asnode_modules, are now ignored at runtime too, so they can no longer appear in completions, symbols, or link resolution.
Changed
- The search index is rebuilt when a search actually needs it, or after a short idle pause, rather than immediately on every document change (previously every keystroke in a large project triggered a full rebuild).
iwec
Fixed
- The search index behind mutation warnings no longer grows with every edit, so memory and search speed stay steady across a long session.
Library crates (liwe, diwe)
diwe
Added
PathFilterin thefsmodule — decides whether a path belongs to the library using the same hidden-file and ignore-file rules aswalk_md_paths, so watching and the initial scan agree on which files count.Bm25Index::avgdl_drift— how far the corpus average document length has moved from the value the index was fit to.
Changed
start_watcherandstart_poll_watcherskip hidden files and files excluded by.gitignoreor.ignore(previously every file with a matching extension was reported).
Fixed
Bm25Indexreuses document slots instead of abandoning one on everyupsertandremove, so a long-lived index no longer grows with the number of edits made to it.Bm25Indexre-fits its length normalization once the average document length drifts far enough from the fitted value, so incremental updates no longer score against stale corpus statistics.